Heroku-22 スタック
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2022年08月24日(水)
この記事では、Ubuntu 22.04 をベースとした Heroku-22 スタックについて説明します。スタックとは
新機能
現在、このスタックのベースは Ubuntu 22.04 であり、Heroku-20 スタックで使用されていた Ubuntu 20.04 とは異なります。
Heroku-20 と比べた最も重要な変更は、以下のとおりです。
- スタックにシステム Ruby のインストール済み環境が含まれなくなりました。このことは大多数のユーザーに影響しません。これは、Ruby アプリは Ruby buildpack によって提供された Ruby インストール済み環境を使用するためです。
- スタックに、システム Python 2 のインストール済み環境 (
python2
コマンドを使用して Heroku-20 でアクセスされる) が含まれなくなりました。Python 3 は、Heroku-20 の場合と同様に、python
およびpython3
コマンドを使用して引き続き利用できます 。
使用可能なソフトウェア
Heroku のすべてのスタックは、さまざまなオペレーティングシステムパッケージと言語ランタイムバージョンをサポートしています。このサポートは通常、スタックが最初にリリースされた時点でそれぞれの保守担当主体によって活発に開発されていたソフトウェアに限定されています。
言語ランタイム
サポートされている言語ランタイムのバージョンについての最も正確な情報は、個々の言語のページを確認してください。
buildpack | ショートハンド | ランタイムのバージョン |
---|---|---|
Ruby | heroku/ruby |
ランタイムのバージョン |
Node.js | heroku/nodejs |
ランタイムのバージョン |
Python | heroku/python |
ランタイムのバージョン |
Java | heroku/java |
ランタイムのバージョン |
PHP | heroku/php |
ランタイムのバージョン |
Go | heroku/go |
ランタイムのバージョン |
オペレーティングシステムパッケージ
Heroku-22 で使用可能なすべてのオペレーティングシステムパッケージの一覧は、「Heroku スタックの Ubuntu パッケージ」の記事を参照してください。
サポート期間
Heroku-22 は Ubuntu 22.04 をベースとしています。サポートは、2027 年 4 月までです。Heroku のスタックアップデートポリシーの詳細を確認してください。
Heroku-22 の使用
アプリの作成時にスタックを指定できます。
$ heroku create --stack heroku-22
既存のアプリのスタックを変更できます。新しいスタックは、次に実行されるビルドから使用されます。
$ heroku stack:set heroku-22
app.json
を使用している場合、レビューアプリと Heroku CI の実行で同じスタックが使用されるよう、このファイルでもスタックを指定する必要があります。
{
"stack": "heroku-22"
}
既存のアプリのスタックは app.json
を使用して変更できません。指定されたスタックは、レビューアプリである新しく作成されたアプリ、Heroku CI テスト実行アプリ、または Heroku Button を使用して作成されたアプリにのみ適用されます。
Heroku-22 へのアップグレード
新しいスタックにアップグレードするときに実行する手順を理解するには、スタックアップグレードガイドを参照してください。
新しいスタックにアプリを移行した後は、アプリケーションを入念に監視して、正常に実行されていることを確認するようお勧めします。
アップグレードに関する注意事項
システム Ruby がインストールされなくなりました
スタックにシステム Ruby のインストール済み環境が含まれなくなりました。このことは大多数のユーザーに影響しません。これは、Ruby アプリはデフォルトで、Ruby buildpack によって提供された Ruby インストール済み環境を使用するためです。
アプリが Ruby 以外の言語で実装されているが、起動中またはワーカーの制御などのスクリプトの目的で Ruby に依存している場合、heroku/ruby
buildpack をアプリに追加することが必要な場合もあります。
アプリケーションで Ruby を使用していて、ruby: command not found
エラーが発生した場合、システムレベルの Ruby インストール済み環境を誤って使用していないか確認します。これは、heroku buildpacks
を使用して、アプリケーションの buildpacks のリストに Ruby buildpack が存在することを確認することによって行うことができます。heroku/ruby
buildpack (または同等の GitHub URL) がない場合、これを追加する方法については buildpacks に関するドキュメントを参照してください。buildpack の順序を注意して確認する必要があります。Ruby が使用されている正確な場所に応じて、新しく追加された Ruby buildpack は他の buildpack よりも前に来ることが必要な場合もあります。
Ruby buildpack の追加後も、アプリケーションブート時の profile.d/
スクリプトから ruby: command not found
エラーが表示される場合、profile.d/
スクリプトがアルファベット順に供給され、profile.d/ruby.sh
スクリプトが実行された後にのみ buildpack Ruby が PATH
に追加されることがこの原因です。他のすべての profile.d/
スクリプトには、ruby.sh
の後ろにアルファベット順にソートされる名前が必要になります。あるいは、影響を受けるすべての profile.d/
スクリプトの内容を .profile ファイルに移動することができ、他のすべての profile.d/*
スクリプトの後に常に実行することが保証されます。
Ruby を使用する buildpack の保守担当の場合、次のいずれかを実行する必要があります。
- Ruby を build の一部として供給するように buildpack を変更する (例)。
- buildpack の Ruby 部分を書き直してシェルスクリプトになるようにする。
- buildpack ドキュメントを更新して、問題の buildpack より前に Ruby buildpack を追加するようエンドユーザーに指示する (エンドユーザーは、最小限の
Gemfile
/Gemfile.lock
ファイルが存在して、Ruby buildpack が検出できるようにする必要もあります)。
システム Python 2 がインストールされなくなりました
スタックに、システム Python 2 のインストール済み環境 (python2
コマンドを使用して Heroku-20 でアクセスされる) が含まれなくなりました。これは、Python 2 が当面のサンセットアップストリームであるためです。
システム Python のインストール済み環境は、Python buildpack によって提供されたものと同じではありません (Heroku-20 より、Python 2 のサポートがすでに削除されています)。
Python 3 は、Heroku-20 の場合と同様に、(システム Python 経由で、または buildpack で提供された Python インストール済み環境経由で) python
および python3
コマンドを使用して引き続き利用できます。
OpenSSL 3
Ubuntu 22.04 には OpenSSL 3.0 が付属します。OpenSSL 1.1 はランタイムライブラリとして使用できません。
OpenSSL/libssl に関連するエラー (libssl.so.1.1: cannot open shared object file
や SSL_read: unexpected eof while reading
などがありますが、その他に多くのバリエーションがあります) が表示される場合、依存関係またはサードパーティの buildpack あるいはその両方を、OpenSSL 3 と互換性のあるバージョンに更新する必要があり、使用する依存関係またはバイナリが OpenSSL 3 に対してコンパイルされるようにする必要があります。
さらに、OpenSSL 3 では、従来の安全でないいくつかの暗号化アルゴリズムのデフォルトサポートが除去されています。アプリケーションから外部のサービスへ接続する TLS/SSL に関連するエラーが表示される場合、それらのサーバーで、安全でない古いソフトウェアまたは設定がおそらく実行されており、それらのサービスの保守担当によってこれを修正する必要があります。
静的 buildpack がサポートされなくなりました
試験的な heroku-buildpack-static buildpack は Heroku-22 ではサポートされません。アプリケーションでその buildpack が使用されている場合 (heroku buildpacks
コマンドの出力で heroku-community/static
または heroku-buildpack-static
のいずれかを確認します)、定期的に保守されている最新の Nginx buildpack に切り替える必要があります (heroku-community/nginx
から入手できます)。
詳細は、この移行ガイドを参照してください。
Heroku-22 の Docker イメージ
Heroku-22 は、次の 2 つの Docker イメージとして入手できます。
- ランタイムイメージ (
heroku/heroku:22
) は、ほとんどのワークロードの場合に、ビルドイメージよりもお勧めします。 - ビルドイメージ (
heroku/heroku:22-build
) は、開発用ヘッダーとツールチェーンを含んでいるため、サイズが大きくなっています。そのため、ソースコードまたは依存関係をコンパイルする必要があるお客様にのみお勧めします。
Heroku-22 をベースイメージとして使用するには、Dockerfile
で次のコマンドを使用します。
FROM heroku/heroku:22
Docker イメージのデプロイについての詳細は、Heroku Container Registry および Runtimeのドキュメントを参照してください。