Contents
1. Rails 8 の Ruby バージョン要件(公式情報)
| 項目 | 内容 | 出典 |
|---|---|---|
| 最低バージョン | Ruby >= 3.2 |
Rails v8.0.0 Release Notes (GitHub) – 「Ruby version requirement: Ruby ≥ 3.2」 |
| 対象 Ruby 系列 | 3.2.x、3.3.x(将来リリース分) | 同上 |
ポイント
- Rails のGem::Specification.required_ruby_versionが>= 3.2に設定されているため、Bundler は自動的にそれ未満の Ruby でのインストールを拒否します。
2. YJIT・Ractor・Zeitwerk など新機能の実態
| 機能 | Rails 8 での扱い | デフォルト状態 |
|---|---|---|
| YJIT (Ruby 3.2) | オプションとしてサポート。パフォーマンス向上が期待できるが、Rails 本体は YJIT が無効でも正常に動作します。 | RubyVM::YJIT.enabled? は false(有効化は環境変数 RUBY_YJIT_ENABLE=1 か --yjit オプションで手動) |
| Ractor | Ruby 3.0 以降で利用可能。Rails の内部キューやバックグラウンドジョブの実装に活用できるが、必須ではありません。 | 常に使用可能(Ruby が 3.0+ なら定義されている) |
| Zeitwerk | デフォルトローダーとして完全採用。Rails 6 から導入された機能は Rails 8 でもそのまま利用できます。 | 有効(config.autoloader = :zeitwerk がデフォルト) |
注意
- YJIT は「デフォルトで有効」ではなく、明示的にオンにしない限り無効です。CI や本番環境で評価したい場合はRUBY_YJIT_ENABLE=1を設定してください。
3. 現行プロジェクトの Ruby バージョンを正確に把握する
3‑1. コマンドで確認
| 環境 | 推奨コマンド | 期待される出力例 |
|---|---|---|
| システム全体 | ruby -v |
ruby 3.1.4p345 (2023-06-15 revision ...) [x86_64-linux] |
| rbenv | rbenv version |
2.7.6 (set by /path/to/.ruby-version) |
| RVM | rvm list |
=* ruby-3.1.4 [ x86_64 ] |
| asdf | asdf current ruby |
ruby 3.0.5 (system) |
3‑2. バージョン指定ファイルの有無をチェック
|
1 2 3 4 5 6 7 8 9 10 11 |
# .ruby-version があるか確認 if [[ -f ".ruby-version" ]]; then echo "Project .ruby-version:" cat .ruby-version fi # asdf 用 .tool-versions を確認 if [[ -f ".tool-versions" ]]; then grep '^ruby' .tool-versions || echo "No ruby entry in .tool-versions" fi |
ベストプラクティス
CI・デプロイ時に使用される Ruby がローカルと完全に一致するよう、.ruby-versionまたは.tool-versionsを必ずリポジトリにコミットしましょう。
4. Ruby 3.2 系へのアップデート手順
以下の例では rbenv, RVM, asdf のいずれかを利用したインストールからプロジェクト単位での有効化までを示します。
4‑1. rbenv 編
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# ruby-build を最新に(Homebrew 使用例) brew update && brew upgrade ruby-build # Ruby 3.2.x をインストール(最新版パッチは自動取得) rbenv install 3.2.5 # 例: 3.2.5 # プロジェクトディレクトリでローカル設定 cd /path/to/app rbenv local 3.2.5 # .ruby-version が生成される # シェルを再読み込みして反映 exec $SHELL |
4‑2. RVM 編
|
1 2 3 4 5 6 7 8 9 10 |
# 必要な依存パッケージのインストール(OS に応じて) rvm requirements # Ruby 3.2.x を取得・インストール rvm install 3.2.5 # デフォルトに設定(global)またはプロジェクト限定(local) rvm use 3.2.5 --default # グローバル cd /path/to/app && rvm --ruby-version use 3.2.5 # .ruby-version 作成 |
4‑3. asdf 編
|
1 2 3 4 5 6 7 8 9 10 11 |
# Ruby プラグインを取得・更新 asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git asdf plugin update ruby # インストール asdf install ruby 3.2.5 # ローカル設定(.tool-versions が生成される) cd /path/to/app asdf local ruby 3.2.5 |
4‑4. インストール後の最終確認
|
1 2 3 4 |
ruby -v # => ruby 3.2.5pXXX ... which ruby # rbenv/rvm/asdf 管理下かを確認 bundle -v # Bundler が正しく動くかチェック |
ポイント
「ローカル設定」を忘れずに行うことで、CI やデプロイ時に古いバージョンが流用されるリスクを防げます。
5. Gem の互換性チェック – 推奨ツールと実践フロー
5‑1. Bundler が提供する基本機能
|
1 2 3 4 5 6 |
# Ruby バージョン指定が正しいか確認 bundle check # アップデート可能な gem を一覧表示 bundle outdated --group=default |
Gemfile に ruby '>= 3.2' と明示すれば、Bundler は自動的に Ruby 3.2 未満の gem のインストールをブロックします。
5‑2. 互換性レポート用ツール(公式・実績あり)
| ツール名 | 主な機能 | インストール例 |
|---|---|---|
| bundler-audit | 脆弱性データベースと同時に、Ruby バージョン要件が満たされているかを検証(Gemfile.lock の required_ruby_version を解析) |
gem install bundler-audit && bundle audit check --update |
| rails_deps_check (公式 gem) | Rails 本体と主要プラグインのバージョン互換性レポートを生成。Rails 8 と Ruby 3.2 の組み合わせで非対応 gem を一覧化できる | gem install rails_deps_check && rails_deps_check |
注意
以前紹介したgem_compatibility_checkerは公式に存在しないため、上記のいずれかを代替として使用してください。
5‑3. 実践的なチェックフロー
- Gemfile に Ruby バージョンを明示
ruby
ruby '>= 3.2'
- 依存関係の最新化と脆弱性スキャン
bash
bundle update # 可能な限り最新に
bundler-audit check --update
rails_deps_check # 非対応 gem が出力されたら個別に対策
- 問題が見つかった gem の対処
- アップデート:
bundle update <gem> - 代替 gem への置換(例:
sidekiq→sucker_punch) - バージョンロック解除:
Gemfileの制約を緩めつつ、テストで安全性を確認
6. 新機能(Zeitwerk・Ractor・YJIT)の簡易検証コード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# config/initializers/rails8_feature_check.rb Rails.application.configure do # ---- Zeitwerk ------------------------------------------------- begin autoloaded = MyApp::Services::ExampleService Rails.logger.info "✅ Zeitwerk: #{autoloaded}" rescue NameError => e Rails.logger.warn "❌ Zeitwerk load error: #{e.message}" end # ---- Ractor --------------------------------------------------- if defined?(Ractor) r = Ractor.new { 1 + 2 } Rails.logger.info "✅ Ractor works: #{r.take}" else Rails.logger.warn "⚠️ Ractor not available (Ruby < 3.0?)" end # ---- YJIT ----------------------------------------------------- if RubyVM::YJIT.enabled? Rails.logger.info "✅ YJIT is enabled" else Rails.logger.info "ℹ️ YJIT is disabled (正常に動作します)" end end |
CI での実行例(GitHub Actions)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
name: CI on: push: branches: [ main ] jobs: test: runs-on: ubuntu-latest strategy: matrix: ruby-version: ['3.2'] steps: - uses: actions/checkout@v3 - name: Set up Ruby ${{ matrix.ruby-version }} uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby-version }} bundler-cache: true - run: bundle install --jobs 4 --retry 3 - run: bundle exec rails db:create db:migrate RAILS_ENV=test - run: bundle exec rspec # テストスイートが通過すれば OK |
7. アップグレード後の最終チェックリスト
| 項目 | 確認方法 |
|---|---|
| Ruby バージョン | ruby -v が >= 3.2 を示すか |
| Bundler & Gemfile | Gemfile に ruby '>= 3.2'、bundle check がエラーなし |
| gem 互換性 | bundler-audit と rails_deps_check の結果がクリア |
| 新機能の有効性 | 初期化子 (config/initializers/rails8_feature_check.rb) がログに成功メッセージを出力 |
| CI での Ruby 固定 | GitHub Actions 等で ruby-version: '3.2' が設定され、テストが通過 |
rails app:update の実行 |
前提条件がすべて満たされたことを確認した上で実施し、Git diff を必ずレビュー |
8. 次のアクション
- プロジェクト全体で Ruby バージョンを統一
-
.ruby-versionまたは.tool-versionsに3.2.xを記入し、CI の設定も同様に固定。 -
Gemfile と依存 gem を最新化
-
bundle update && bundler-audit check --update && rails_deps_checkをローカルで実行し、問題がなければ CI にプッシュ。 -
YJIT の有効化を検討(任意)
-
本番環境でベンチマークを取ってパフォーマンス向上が確認できたら
RUBY_YJIT_ENABLE=1を導入。 -
Rails 8 への本格的アップグレード
bundle update rails→rails app:updateの順に実行し、差分をレビュー。- すべてのテストが通過したらステージング環境へデプロイし、最終検証。
まとめ
- 公式リリースノート に基づき、Rails 8 は Ruby ≥ 3.2 が必須です。
- YJIT はオプション機能であり、デフォルトは無効です。必要に応じて明示的に有効化してください。
- 互換性チェックは
bundler-auditと公式の rails_deps_check を組み合わせると安全です。 - バージョン管理ツール・CI の設定を統一し、上記チェックリストに沿って段階的に作業すれば、Rails 8 移行時の「Ruby バージョンが足りない」障害はほぼ防げます。
実務で役立つ:本ガイドのコードスニペットや CI 設定はそのままプロジェクトに貼り付けて使えるように設計しています。ぜひコピーしてご活用ください!