Heroku-16 スタック
最終更新日 2022年02月02日(水)
Heroku-16 スタックのサポートは 2021 年 5 月 1 日に終了しています。 できるだけ早く、新しいスタックにアップグレードしてください。 詳細は、Heroku-16 のサポート終了に関する FAQ を参照してください。
この記事では、Ubuntu 16.04 をベースとした Heroku-16 スタックについて説明します。スタックとは
新機能
Heroku-16 スタックで Cedar-14 スタックから変更した内容は次のとおりです。
- Heroku-16 は非常に小さく、Docker イメージが 465 MB (Cedar-14 では 1.35 GB) です。 Heroku-16 Docker イメージ (ローカル開発用) を使用することで、開発/本番パリティを確保します (つまり、ローカルで実行しているイメージは Heroku で実行しているイメージと同じです)。
- ネイティブ Ruby および Python パッケージのコンパイルのサポートの向上
- JDK は Java/JVM buildpack によってインストールされます。Java を使用するアプリを持っているが、Java buildpack (jython や Java Bridge など) は持っていない場合、アプリ上で JVM buildpack を設定する必要があります (手順は下に一覧表示しています)。
HEROKU_
ネームスペースは、機能を提供するために Heroku プラットフォームで設定された環境設定用に予約されています。HEROKU_
環境設定を作成している場合は、環境設定の競合を避けるため、Heroku-16 にアップグレードするときにこれらを変更することをお勧めします。
使用可能なソフトウェア
Heroku の各スタックは、異なるオペレーティングシステムパッケージおよび言語ランタイムのバージョンをサポートしています。このサポートは通常、スタックが最初にリリースされた時点でそれぞれの保守担当主体によって活発に開発されていたソフトウェアに限定されています。
言語ランタイム
サポートされている言語ランタイムのバージョンについての最も正確な情報は、個々の言語のページを確認してください。
buildpack | ショートハンド | ランタイムのバージョン |
---|---|---|
Ruby | heroku/ruby |
ランタイムのバージョン |
Node.js | heroku/nodejs |
ランタイムのバージョン |
Python | heroku/python |
ランタイムのバージョン |
Java | heroku/java |
ランタイムのバージョン |
PHP | heroku/php |
ランタイムのバージョン |
Go | heroku/go |
ランタイムのバージョン |
オペレーティングシステムパッケージ
Heroku-16 で使用可能なすべてのオペレーティングシステムパッケージの一覧は、「Heroku スタックの Ubuntu パッケージ」の記事を参照してください。
サポート期間
Heroku-16 は Ubuntu 16.04 をベースとしており、2021 年 5 月 1 日にサポートが終了しています。詳細は、Heroku-16 のサポート終了に関する FAQ を参照してください。
Heroku-16 の使用
新しい Heroku-16 アプリを作成したり、既存のアプリのスタックを Heroku-16 に切り替えたりすることはできなくなりました。代わりに、サポートされているスタックを使用してください。
Heroku-16 へのアップグレード
新しいスタックにアップグレードするときに実行する手順を理解するには、スタックアップグレードガイドを参照してください。
新しいスタックにアプリを移行した後は、アプリケーションを入念に監視して、正常に実行されていることを確認するようお勧めします。
アップグレードに関する注意事項
スタックからの Java の削除
Heroku-16 スタックには JDK がバンドルされなくなったため、JVM が必要だが (jython や Java Bridge などの) Java buildpack を使用していないアプリを実行するには、heroku/jvm
を最初の buildpack として設定する必要があります。
設定すると、この JVM buildpack がビルドの最初のステップとして実行され、それ以降の buildpack で、また実行時に JDK が使用できるようになります。
コマンドラインで、heroku-16 アプリの buildpack リストの先頭に heroku/jvm
を追加します。
$ heroku buildpacks:add --index 1 heroku/jvm
アプリの新しい buildpack リストを確認するには、heroku buildpacks
を使用します。
$ heroku buildpacks
=== my-app-on-heroku-16 Buildpack URLs
1. heroku/jvm
2. heroku/python
app.json
を使用している場合は、代わりに、このファイル内の buildpack リストの先頭に heroku/jvm
を追加することができます。
{
"buildpacks": [
{
"url": "heroku/jvm"
},
{
"url": "heroku/ruby"
}
]
}
スタックからのロケールの削除
ロケールは、一部のプログラムで、言語や地域に応じて数値の書式設定、文字列の照合、日付の表現などの操作を実行するために使用される命令セットです。
Heroku-16 からは、ロケールはスタックに含まれなくなり、代わりに別の buildpack 経由でインストールされるようになりました。
アプリにロケールが必要な場合は、アプリのコードベースのルートディレクトリに .locales
ファイルを作成して、必要なすべてのロケールをそこに記述してください。次に例を示します。
de_DE
fr_FR
.locale
ファイルを追加 (git add
) して変更をコミット (git commit
) した後、アプリで使用する buildpack リストの先頭に heroku-community/locale
buildpack を追加できます。
$ heroku buildpacks:add --index 1 heroku-community/locale
heroku-community/locale
buildpack は、ビルドの最初のステップとして実行され、それ以降の buildpack によって、また実行時に使用される任意のロケールをインストールします。
Java アプリケーションでは、java.util
および java.text
パッケージのロケール固有動作のサポートはプラットフォームに依存しないため、通常、システムロケールのインストールは必要ありません。システムのロケールとタイムゾーンは、ホストオペレーティングシステムのロケールとタイムゾーンに基づいて、初期デフォルトのロケールとタイムゾーンを設定するためにのみ使用されます。その他のロケールやタイムゾーンに変更を加えたり、それらを使用したりする場合は、JVM にバンドルされているデータが使用されます。
Heroku-16 の Docker イメージ
Heroku-16 は、次の 2 つの Docker イメージとして入手できます。
- ランタイムイメージ (
heroku/heroku:16
) は、ほとんどのワークロードの場合に、ビルドイメージよりもお勧めします。 - ビルドイメージ (
heroku/heroku:16-build
) は、開発用ヘッダーとツールチェーンを含んでいるため、サイズが大きくなっています。そのため、ソースコードまたは依存関係をコンパイルする必要があるお客様にのみお勧めします。
Heroku-16 をベースイメージとして使用するには、Dockerfile
で次のコマンドを使用します。
FROM heroku/heroku:16
Docker イメージのデプロイについての詳細は、Heroku Container Registry および Runtimeのドキュメントを参照してください。