Heroku-24 スタック
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2025年03月19日(水)
この記事では、Ubuntu 24.04 をベースとした Heroku-24 スタックについて説明します。スタックとは
新機能
現在、このスタックのベースは Ubuntu 24.04 であり、Heroku-22 スタックで使用されていた Ubuntu 22.04 とは異なります。
Heroku-22 と比べた最も重要な変更は、以下のとおりです。
- ベースイメージのサイズを縮小するために、スタックにインストールされる Ubuntu パッケージを調整しました。
- あまり使用されないパッケージ (Bazaar や Mercurial など) をいくつか削除しました。
- 通常はビルド時にのみ必要となる一部のツール (GCC、Make、Git、システム Python など) を、アプリの実行時ではなく、ビルド時にのみ使用できるようにしました。
- Heroku-24 Docker イメージ にいくつかの変更を加えました。
amd64
だけでなくamd64
とarm64
両方のアーキテクチャをサポートするマルチアーキテクチャイメージとして公開するようにしました。- デフォルトのイメージ Linux ユーザーを
root
ではなくheroku
に設定することになりました。
詳細な変更情報については、「アップグレードに関する注意事項」を参照してください。
使用可能なソフトウェア
Heroku のすべてのスタックは、さまざまなオペレーティングシステムパッケージと言語ランタイムバージョンをサポートしています。 通常、このサポートはスタックが最初にリリースされた時点でそれぞれの保守担当主体によって活発に開発されていたソフトウェアに限定されています。
言語ランタイム
サポートされている言語ランタイムのバージョンについての最も正確な情報は、個々の言語のページを確認してください。
buildpack | ショートハンド | ランタイムのバージョン |
---|---|---|
Ruby | heroku/ruby |
ランタイムのバージョン |
Node.js | heroku/nodejs |
ランタイムのバージョン |
Python | heroku/python |
ランタイムのバージョン |
Java | heroku/java |
ランタイムのバージョン |
PHP | heroku/php |
ランタイムのバージョン |
Go | heroku/go |
ランタイムのバージョン |
オペレーティングシステムパッケージ
Heroku-24 で使用可能なすべてのオペレーティングシステムパッケージの一覧は、「Heroku スタックの Ubuntu パッケージ」の記事を参照してください。
サポート期間
Heroku-24 は Ubuntu 24.04 をベースとしています。サポートは、2029 年 4 月までです。Heroku のスタック更新ポリシーの詳細を確認してください。
Heroku-24 の使用
アプリの作成時にスタックを指定できます。
$ heroku create --stack heroku-24
既存のアプリのスタックを変更できます。新しいスタックは、次に実行されるビルドから使用されます。
$ heroku stack:set heroku-24
app.json
を使用している場合、Review Apps と Heroku CI の実行で同じスタックが使用されるよう、このファイルでもスタックを指定してください。
{
"stack": "heroku-24"
}
既存のアプリのスタックは app.json
を使用して変更できません。指定されたスタックは
新しく作成された Review App、
Heroku CI テスト実行アプリ、または Heroku Button を使用して作成されたアプリにのみ適用されます。
Heroku-24 へのアップグレード
新しいスタックにアップグレードするときに実行する手順を理解するには、スタックアップグレードガイドを参照してください。
新しいスタックにアプリを移行した後は、アプリケーションを入念に監視して、 正常に実行されていることを確認するようお勧めします。
アップグレードに関する注意事項
Git への変更
Git はビルド時にのみ使用でき、アプリの実行時には使用できなくなりました。
アプリの Git リポジトリの .git/
メタデータディレクトリは、古いスタックを使用している場合であっても、
ビルド時または実行時には使用できませんでした。そのため、アプリが実行時に Git を呼び出して
展開されているソースリビジョン (コミット SHA) を確認する場合、
有効なリポジトリがないためこれらの呼び出しは常に失敗します。
アプリの現在デプロイされているリビジョンを確認する必要がある場合は、ビルド中に環境変数 SOURCE_COMMIT
を使用するか、dyno メタデータ機能を有効にして実行時に環境変数 HEROKU_BUILD_COMMIT
を使用します。
アプリが他の目的で実行時に Git を必要とする場合は、APT buildpack を使用してインストールします。
- 次のコマンドで buildpack を追加します (まだ使用していない場合):
heroku buildpacks:add --index 1 heroku-community/apt
- アプリのソースコードのルートに
Aptfile
という名前のファイルを作成し、その行にパッケージ名git
を含めます。
システム Python への変更
ベースイメージ内のシステム Python インストールはビルド時にのみ使用でき、アプリの実行時には使用できなくなりました。さらに、システム Python インストールは python3
コマンド経由でのみ利用でき、移行用の python
シンボリックリンク経由では利用できなくなりました。
buildpack によって提供される Python インストールはシステム Python インストールよりも優先されるため、これらの変更は Python buildpack を使用するアプリには影響しません。
アプリの実行時に Python が必要で、まだ Python buildpack を使用していなかった場合は、アプリに Python buildpack を追加する必要があります。heroku buildpacks:add --index 1 heroku/python
を実行し、アプリのソースコードのルートディレクトリに空の requirements.txt
ファイルを作成してから変更をデプロイします。
buildpack では Python バージョンの指定と依存関係のインストールをサポートしており、プラットフォーム上で最高のパフォーマンスが得られるように Python/アプリを構成するため、 システム Python に頼るのではなく、Python buildpack を使用することをお勧めします。
Docker Hub に公開されている Docker イメージへの変更
amd64
だけでなく amd64
と arm64
両方のアーキテクチャをサポートするマルチアーキテクチャイメージとして Heroku-24 Docker イメージを公開するようにしました。これらのイメージを Heroku 外部の ARM CPU 搭載マシンで使用する場合、Docker は amd64
ではなく arm64
アーキテクチャを自動的に使用するようになりました。amd64
アーキテクチャに戻すには、--platform linux/amd64
を docker build
または docker run
に渡すか、Dockerfile
で FROM --platform=linux/amd64 IMAGE_NAME
を使用します。
さらに、これらの Docker イメージのデフォルト Linux ユーザーを、ルート権限を持たない heroku
に設定するようになりました。/home/heroku
または /tmp
以外の場所を変更する必要がある場合は、root
ユーザーに切り替える必要があります。これを行うには、イメージをビルドするときに USER root
を Dockerfile
に追加するか、--user root
を任意の docker run
コマンドに渡します。
OpenJDK のデフォルトバージョンが変更されました
Java、Scala、Clojure の各アプリを実行するために使用されるデフォルトの OpenJDK バージョンが変更されました。デフォルトで OpenJDK 8 になる代わりに、最新の長期サポートリリースがインストールされます。現在は OpenJDK 21 ですが、OpenJDK 25 がリリースされ次第すぐに変更されます。古いスタックでは今のところ、引き続き OpenJDK 8 がデフォルトでインストールされます。こちらで説明されているように、必要な OpenJDK バージョンを常に明示的に設定することをお勧めします。
追加の英語ロケールがインストールされなくなりました
スタックには、C
、C.utf8
、POSIX
、en_US.utf8
の各ロケールのみが含まれるようになり、以前は language-pack-en
パッケージによって提供されていた追加の en_*
バリアントは含まれなくなりました。
削除されたロケールのいずれかが必要な場合は、heroku-buildpack-locale を使用してインストールしてください。
デフォルトのロケール POSIX
は変更されていません。
APT ソースリストの場所と形式が変更されました
Ubuntu 24.04 では、APT ソースリスト の場所が /etc/apt/sources.list
から /etc/apt/sources.list.d/ubuntu.sources
に変更され、ファイルでは新しい deb822
形式を使用するようになりました。
この変更に対応するために、heroku-buildpack-apt buildpack を更新しました。ただし、APT を使用してパッケージをインストールし、デフォルトの dir::etc::sourceparts
の場所を上書きするサードパーティの buildpack は、この変更に合わせて調整する必要があります (互換性の修正の例))。
レガシータイムゾーンデータは利用できなくなりました
Ubuntu 24.04 では、非標準およびレガシータイムゾーンのタイムゾーンデータが削除されました。タイムゾーンのデフォルトのリストは、地理的地域 (大陸または海洋) と都市名を持つものに限定されています。
この削除により、US/*
スタイルのタイムゾーンは使用できなくなり、代わりに America/Chicago
のようなタイムゾーンを使用する必要があります。
アプリケーションにレガシータイムゾーンが必要な場合は、言語の使用状況に基づいてインストールできます。
- Ruby アプリケーションは
gem "tzinfo-data"
をGemfile
に追加できます。 - Goアプリケーションは
_ "time/tzdata"
をpackage main
インポートに追加できます。
一部の言語エコシステムではこのパッケージに依存せず、ベンダーのタイムゾーンデータを使用します。
他の種類のアプリケーションでレガシータイムゾーンが必要な場合は、問題のトラッキングにコメントを残してお知らせください。
OpenSSL 証明書の読み込みパフォーマンスへの変更
Ubuntu 24.04 では、さらなる SSL 証明書がグローバル証明書ストアに追加されました。追加の証明書は OpenSSL のパフォーマンスに悪影響を及ぼすことが報告されています。
OpenSSL や http ライブラリに関連する追加のレイテンシーが認められる場合は、アプリの環境で SSL_CERT_FILE=/dev/null
を設定して、新しい証明書の読み込みを無効にすることができます。または、アプリのアーキテクチャに適している場合は、コード内で共有 HTTP クライアントやセッションを使用して、証明書が頻繁に再読み込みされないようにすることを検討してください。
レガシー Google Chrome buildpack はサポートされなくなりました
heroku-buildpack-google-chrome buildpack は Heroku-24 と互換性がありません。古い buildpack のいくつかの制限に対処する新しい Chrome for Testing buildpack の導入に伴い、 レガシー buildpack は廃止されました。こちらの手順に従って新しい buildpack に移行してください。
Redis Stunnel buildpack はサポートされなくなりました
heroku-buildpack-redis buildpack は Heroku-24 と互換性がありません。Redis 6 以降は TLS をネイティブにサポートしており buildpack が不要になったため、Redis Stunnel buildpack は廃止されました。buildpack を削除し、代わりに Redis のネイティブ TLS サポートに切り替えてください。詳細は、「Heroku Redis のセキュリティ保護」を参照してください。
Heroku-24 の Docker イメージ
Heroku-24 は、次の 2 つの Docker イメージとして入手できます。
- ランタイムイメージ (
heroku/heroku:24
) は、ほとんどのワークロードの場合に、ビルドイメージよりもお勧めです。 - ビルドイメージ (
heroku/heroku:24-build
) は、開発用ヘッダーとツールチェーンを含んでいるため、サイズが大きくなっています。そのため、ソースコードまたは依存関係をコンパイルする必要があるお客様にのみお勧めします。
Heroku-24 をベースイメージとして使用するには、Dockerfile
で次のコマンドを使用します。
FROM heroku/heroku:24
これらのイメージは、amd64
と arm64
の両方の CPU アーキテクチャをサポートするマルチアーキテクチャイメージとして
公開されます。デフォルトでは、Docker は実行されているマシンに一致するイメージアーキテクチャを使用します。別のアーキテクチャの使用を強制するには、--platform linux/<architecture>
を docker build
または docker run
コマンドに渡すか、FROM --platform=linux/<architecture> IMAGE_NAME
を Dockerfile
で使用します。
これらのイメージのデフォルト Linux ユーザーはルート権限を持たない heroku
です。/home/heroku
または /tmp
以外の場所を変更する必要がある場合は、root
ユーザーに切り替える必要があります。これを行うには、イメージをビルドするときに USER root
を Dockerfile
に追加するか、--user root
を任意の docker run
コマンドに渡します。
Docker イメージのデプロイについての詳細は、Heroku Container Registry および Runtimeのドキュメントを参照してください。