Heroku の Ruby サポート
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2025年04月16日(水)
Table of Contents
- 新しいアプリについての Ruby のデフォルトバージョン
- Ruby バージョンを指定する
- Ruby バージョンサポートポリシー
- サポートされている Ruby バージョン
- Ruby バージョン
- サポートされていない Ruby バージョン
- JRuby バージョン設定
- JRuby バージョンの指定
- JRuby バージョンポリシー
- サポートされている JRuby バージョン
- Bundler バージョン設定
- デフォルトの Bundler バージョン
- Bundler バージョンポリシー
- サポートされている Bundler バージョン
- Rails バージョン設定とサポートポリシー
- Ruby JIT のサポート
- インストールされるバイナリ
- Node.js Support
- 動作
- トラブルシューティング
- カスタマーサポート
- その他の資料
Heroku は Ruby のさまざまな実装で Ruby アプリケーションを実行でき、フレームワーク固有のワークフローのためのサポートを備えています。このドキュメントには、バージョンのサポート情報が記載されています。
Heroku が Ruby アプリケーションを認識して実行する一般的な動作に関する情報については、「Heroku での Ruby の動作」を参照してください。フレームワーク固有のチュートリアルについては、次を参照してください。
- Cedar 世代のアプリ向け「Heroku スターターガイド (Ruby)」チュートリアル
- Fir 世代のアプリ向け「Heroku スターターガイド (Ruby)」チュートリアル
- Heroku スターターガイド (Rails 7)
- Heroku スターターガイド (Rails 7)
- Ruby on Rails アプリケーションイメージを 5 分でローカルに構築します。Dockerfile は必要ありません。
新しいアプリについての Ruby のデフォルトバージョン
Gemfile
に ruby
エントリがない場合、現在のデフォルトバージョンは Cedar 世代のアプリでは MRI 3.3.7
、Fir 世代のアプリでは MRI 3.3.7
です。
Cedar 世代のアプリでは、Ruby のバージョンを指定するか、Heroku がデフォルトバージョンを更新した後の次のビルドまでデフォルトがロックされますが、Fir ではロックされません。たとえば、アプリでデフォルトの Ruby バージョン 3.1.6
を使用している場合、3.1.6
が維持されます。今後 Heroku が現在のデフォルトバージョンを更新した場合、次にアプリを再構築してデプロイするときは、その新しいデフォルトバージョンが使用されます。
デフォルトの Ruby バージョンに依存せずに、Gemfile で Ruby バージョンを指定することを強くお勧めします。アプリケーションの Gemfile.lock
にこの値がない場合は、Gemfile
に ruby
宣言があることを確認してから以下を実行します。
$ bundle update --ruby
デフォルトの Ruby バージョンはスティッキーではありません。デフォルトバージョンの変更後にデプロイするときに不安定になることを防ぐため、アプリケーションに Ruby バージョンを指定することを強くお勧めします。
Ruby バージョンを指定する
Gemfile.lock
で指定した Ruby バージョンがインストールされます。次に例を示します。
RUBY VERSION
ruby 3.3.5p100
Heroku では多数の異なる Ruby 実装を使用できます。特定のバージョンを選択するようアプリを設定できます。手順については「Ruby バージョンの指定」を参照してください。
アプリが使用するバージョンはビルドアーティファクトに含まれています。
Ruby バージョンサポートポリシー
Ruby バージョンのサポートは、Ruby Core Support ポリシーに従います。サポートされている Ruby バージョンの最新のパッチリリースを実行することをお勧めします。Ruby バージョンが Ruby Core からサポート終了 (EOL) になる前にアップグレードしてください。
アップグレードは一度に 1 つのバージョン (1 つの Ruby バージョン、Rails バージョン、Heroku ビルダーバージョンなど) のみ行うことをお勧めします。この段階的なプロセスにより、ビルドまたはランタイムの不整合が単一の変更に分離されるため、問題をより迅速に分離して修正できます。Cloud Native Buildpack アプリでは、pack build
と Docker 経由で Ruby アプリケーションをローカルでデバッグすることもできます。
サポートされている Ruby バージョン
Ruby には実装が何種類かありますが、これは ruby-lang 経由で提供されるソースから構築されています。これは「ruby/ruby」、「CRuby」、「MRI」とも呼ばれます。JRuby 実装もサポートしています。
Heroku では、次の Ruby バージョンおよび関連する Rubygem がサポートされています。サポートされているバージョンとは、Heroku のツールおよびプラットフォームが所定のバージョンと連動することを期待できることを意味します。また、技術サポートを受けられることも意味します。サポートされている Ruby のバージョンは次のとおりです。
Ruby バージョン
3.2.8
、Rubygems: 3.4.19
3.3.8
、Rubygems: 3.5.22
3.4.3
、Rubygems: 3.6.7
ある Ruby のバージョンがサポート終了を迎えると、セキュリティパッチを入手できなくなります。Ruby のコアによって積極的にサポートされている Ruby のバージョンを実行することを強くお勧めします。
サポートされていない Ruby バージョン
以下に、スタックごとに存在する廃止予定のランタイムバージョンの一覧を示します。EOL バージョンは Ruby Core から更新を受け取らなくなったため、Heroku Ruby サポートポリシーの対象外です。
Rails などのライブラリのバージョンが、サポートされている Ruby バージョンで機能しない場合、Rails LTS などのサービスを使用できます。Rails LTS は、古いリリースの維持管理されたバージョンを有料で提供します。Rails LTS プロジェクトは Heroku や Rails Core と提携していません。
Cedar でサポートされていないバージョン
heroku-20
スタック上:- 2.5.x (EOL):
2.5.7
~2.5.9
- 2.6.x (EOL):
2.6.6
~2.6.9
- 2.7.x (EOL):
2.7.1
~2.7.8
- 3.0.x (EOL):
3.0.0
~3.0.7
- 3.1.x:
3.1.0
~3.1.7
- 3.2.x:
3.2.0
~3.2.7
- 3.3.x:
3.3.0
~3.3.7
- 3.4.x:
3.4.0
~3.4.2
- 2.5.x (EOL):
heroku-22
スタック上:- 3.1.x:
3.1.0
~3.1.7
- 3.2.x:
3.2.0
~3.2.7
- 3.3.x:
3.3.0
~3.3.7
- 3.4.x:
3.4.0
~3.4.2
- 3.1.x:
heroku-24
スタック上:- 3.1.x:
3.1.0
~3.1.7
- 3.2.x:
3.2.0
~3.2.7
- 3.3.x:
3.3.0
~3.3.7
- 3.4.x:
3.4.0
~3.4.2
- 3.1.x:
たとえば、2.5.9 は Heroku-20 スタックでは「サポート対象外」ですが、ご自身の責任で引き続き使用できることを意味します。Heroku では、サポートされている Ruby バージョンを使用することを常にお勧めします。
Fir でサポートされていないバージョン
特定のビルダーで構築された以前の Ruby バージョン (heroku-24
など) は、そのビルダーを利用できる限りアクセス可能です。利用可能なこれらの EOL Ruby バージョンを使用してアプリケーションを段階的にアップグレードし、サポートされているバージョンに移行できるようにすることをお勧めします。
利用可能な (ただしサポートされていない) Ruby バージョン:
heroku-24
ビルダー上:- 3.1.x:
3.1.0
~3.1.5
- 3.2.x:
3.2.0
~3.2.3
- 3.3.x:
3.3.0
~3.3.4
- 3.1.x:
JRuby バージョン設定
アプリケーションが Gemfile.lock,
で JRuby エンジンを指定すると、要求された JRuby バージョンとともに Java 仮想マシン (JVM) のバージョンがインストールされます。次に例を示します。
RUBY VERSION
ruby 2.6.8p001 (jruby 9.3.6.0)
Gemfile.lock
でバージョンが指定されていない場合、アプリケーションは JRuby ではなくデフォルトバージョンの Ruby を使用してデプロイを試行します。
JRuby バージョンの指定
JRuby バージョンは、以下のテーブルの一覧で示す複数の Ruby バージョンをサポートしています。Gemfile
でバージョンを指定する必要があります。JRuby は、JRuby と一緒にインストールされている JVM 上で実行します。サポートされている Java バージョンの一覧および特定のバージョンを設定する方法については、Java サポート記事を参照してください。
JVM 環境および使用可能な JVM オプション (JAVA_TOOL_OPTIONS
など) について詳しくは、Heroku の Dev Center の Java サポートを参照してください。
Zulu JDK の使用や jmap
の実行などの高度な JDK オプションについては、アプリの最初の buildpack として heroku/jvm
buildpack を追加する必要があります。
JRuby バージョンポリシー
JRuby のサポートは、JRuby Core のバージョンサポートに従います。
サポートされている JRuby バージョン
JRuby は Heroku プラットフォームにデプロイできる Ruby 言語の Java 仮想マシン (JVM) 実装です。
JRuby バージョン
9.1.17.0
、Ruby バージョン: [2.3.3
]9.2.21.0
、Ruby バージョン: [2.5.8
]9.3.15.0
、Ruby バージョン: [2.6.8
]9.4.11.0
、Ruby バージョン: [3.1.4
]
Bundler バージョン設定
Heroku プラットフォームでは、Ruby アプリケーションの管理と実行に特定のライブラリセットを使用します。
Cedar での Bundler バージョン設定
Ruby buildpack は、Gemfile.lock
の BUNDLED WITH
キーに記載されたメジャーバージョンとマイナーバージョンに基づいて Bundler のバージョンをインストールします。
BUNDLED WITH 1.x.
はbundler 1.17.3
をインストール (警告: このバージョンは廃止予定であり、サポートは 2025 年 4 月 30 日に削除されます)BUNDLED WITH 2.0.x to 2.3.x
はbundler 2.3.25
をインストールBUNDLED WITH 2.4.x
はbundler 2.4.22
をインストールBUNDLED WITH 2.5.x
はbundler 2.5.23
をインストールBUNDLED WITH 2.6.x
はbundler 2.6.2
をインストール
特定のバージョンのみをサポートする理由の詳細については、「Bundler のバージョン」を参照してください。使用可能な設定について詳しくは、Bundler 設定を参照してください。
Fir での Bundler バージョン設定
以下のフォーマットに従っている限り、Gemfile.lock
で指定した正確な Bundler バージョンがインストールされます。
BUNDLED WITH
2.5.6
bundle install
を実行して依存関係をインストールします。この呼び出しは、CLI 引数と環境変数を使用して設定します。
デフォルトの Bundler バージョン
Gemfile.lock
に BUNDLED WITH
キーがない場合は、以下のデフォルトバージョンを使用します。
Gemfile.lock
に RUBY VERSION
と BUNDLED WITH
の両方のバージョンをリストアップすることを強くお勧めします。これらの値がない場合は、値を生成して Git にコミットできます。
$ bundle update --ruby
$ git add Gemfile.lock
$ git commit -m "Update Gemfile.lock"
Gemfile.lock
でこれらの値が指定されていないアプリケーションは、デフォルトが変更されると予期せず停止する可能性があります。
Bundler バージョンポリシー
Cedar 向けの Bundler バージョンポリシー
Cedar アプリ向けに Bundler の特定のバージョンをサポートしています。
Fir 向けの Bundler バージョンポリシー
Fir アプリの場合、Gemfile.lock
フォーマットと bundle install
設定オプションのサポートには、Bundler のメンテナンスポリシーが反映されています。使用された元のビルダーがサポートされている限り、Bundler バージョン固有のコードを引き続き使用できます。
サポートされている Bundler バージョン
Cedar でサポートされている Bundler バージョン
「Bundler バージョン設定」に一覧表示されている特定のバージョンのみをサポートしています。特定のバージョンのみをサポートする理由の詳細については、「Bundler のバージョン」を参照してください。
Fir でサポートされている Bundler バージョン
Bundler バージョンのサポートには、RubyGems のメンテナーポリシーが反映されています。アプリケーション開発者には、デプロイ時に発生したバグが、同じ Bundler コマンドで実行するときにローカルに存在しないことを確認する責任があります。
Rails バージョン設定とサポートポリシー
アプリケーションの Rails バージョンを指定するには、Gemfile
で指定します。詳細については、「Rails バージョンのサポート」を参照してください。
Ruby JIT のサポート
JIT は「Just in Time (実行時)」コンパイラの略です。JIT インプリの目的は、より効率的なコードを提供してプログラムの実行を高速化することです。通常は Ruby コードをマシンコードにコンパイルします。JIT を使用するとメモリ消費量が増加しますが、すべてのプログラムが必ず高速化するわけではありません。使用する JIT インプリがアプリコードに適していない場合、JIT を使用するとアプリケーションの速度が低下する可能性があります。
YJIT
YJIT のほうがアプリケーションを高速化できる可能性が高くなっています。Ruby アプリケーションで YJIT を有効にするには、次のコマンドを実行します。
$ heroku config:set RUBYOPT="--enable-yjit"
次に、以下を実行して機能したことを確認します。
$ heroku run bash
~ $ irb
irb(main):001:0> puts RubyVM::YJIT.runtime_stats
{:inline_code_size=>488880, :outlined_code_size=>404622}
MJIT
Ruby では、Ruby 2.6 で MJIT が導入され、Ruby 3.1 で YJIT が導入されました。MJIT は実際のアプリケーションの多くを高速化しないため、推奨されません。MJIT では実行時に gcc が必要ですが、すべての Heroku スタックで使用できるとは限りません。
インストールされるバイナリ
Ruby バイナリとそれに付属するデフォルトのツール (rubygems
や bundler
など) に加えて、一部のアプリケーションでは、アプリケーションを実行するために追加のバイナリが必要です。Heroku ではこのような依存関係をインストールするには明示的な buildpack を使用することを強く推奨していますが、heroku/ruby
buildpack が追加のバイナリをインストールする場合もあります。このセクションでは、インストールされるバイナリとその条件を紹介します。
アプリケーションのルートに package.json
があり、過去の node
バイナリがパス上に見つからない場合、Ruby buildpack は Node.js のデフォルトバージョンと NPM をインストールします。アプリケーションのルートに yarn.lock
ファイルがあり、過去の yarn
バイナリがパス上に見つからない場合は、Yarn のバージョンをインストールします。
“`
Node.js Support
Many Ruby applications use Node ecosystem tools to generate frontend assets. The heroku/ruby
buildpack will install a default version of Node to support these applications. However, we highly recommend using the heroku/nodejs
buildpack and specifying versions via package.json
. For example:
{
"engines": {
"node": "20.9.0",
"yarn": "1.22.19"
}
}
詳細は、「Node.js サポート」を参照してください。
Cedar でのデフォルトの Node.js と Yarn のバージョン
Cedar 世代のアプリに過去の buildpack からインストールされた node
バイナリ (heroku/nodejs
など) がなく、以下の検出条件を 1 つ以上満たす場合は、デフォルトバージョンの node
や yarn
がインストールされます。
- アプリケーションのルートディレクトリに
package.json
ファイルがある execjs
からGemfile.lock
gem が検出されたwebpacker
からGemfile.lock
gem が検出されたyarn.lock
ファイル
これらの検出条件を 1 つ以上満たすと、heroku/ruby
buildpack は次のデフォルトをインストールします。
- Node:
22.11.0
- Yarn:
1.22.22
> warning > デフォルトのバージョンは時間と共に変わるため、この動作に長期的に頼ることはお勧めしません。アプリケーションの Node または Yarn のバージョンを制御するには、heroku/nodejs
buildpack をproject.toml
ファイルに追加する必要があります。package.json
で 依存するエンジンのバージョンを指定します。詳細は、「複数のビルドパックの使用」を参照してください。
Fir でのデフォルトの Node.js と Yarn のバージョン
Fir 世代のアプリで、アプリケーションのルートに package.json
が含まれる場合は、heroku/nodejs-engine buildpack が必要になります。これは、heroku/nodejs
CNB から受け取るのと同じデフォルトバージョンの node
をインストールします。
詳細は、「Node.js サポート」を参照してください。
デフォルトのバージョンは時間と共に変わるため、この動作に長期的に頼ることはお勧めしません。アプリケーションの Node または Yarn のバージョンを制御するには、heroku/nodejs
buildpack を project.toml
ファイルに追加する必要があります。package.json
で 依存するエンジンのバージョンを指定します。詳細は、「複数のビルドパックの使用」を参照してください。
動作
動作についての詳細は、次の記事を参照してください。
- Heroku での Ruby の動作
- Heroku での Ruby アプリケーションの動作
- Heroku での Rack アプリケーションの動作
- Heroku での Rails アプリケーションの動作
- Ruby Behavior category (Ruby の動作カテゴリ)
トラブルシューティング
その他の問題のヘルプについては、「デバッガ gem のインストールの失敗の解決」または「Troubleshooting Ruby Apps category」(Ruby アプリのトラブルシューティングのカテゴリ) を参照してください。
カスタマーサポート
Heroku サポートチャネルのいずれかを通じて問題を報告できます。
その他の資料
- Ruby バージョンの指定
- Ruby の使用のカテゴリ
- Rails のサポートのカテゴリ
- Bundler の使用のカテゴリ
- Troubleshooting Ruby Apps category (Ruby アプリのトラブルシューティングのカテゴリ)