Contents
Rails6→7移行の準備と全体像
Rails6から7への移行は、技術チームにとって重要なタスクですが、非互換性のある変更点や依存関係の再調整など、手順を誤ると深刻な障害につながる可能性があります。本記事ではチェックリスト形式で現場対応型ガイドとして、実務での移行ステップと落とし穴を解説します。特に「テスト環境での検証」を意識した手順が重要であり、本番環境への移行前の検証は必須です。
非互換性のある変更点の確認方法
Rails6→7への移行では、非互換性のある変更点を把握する必要があります。特にRuby 3.0以降の互換性やAPI変更の影響範囲を事前に調査することで、移行後の不具合を最小限に抑えられます。
Ruby 3.0以降の互換性チェック
Rails7ではRuby 3.0以降が推奨されますが、既存ライブラリとの相性を確認する必要があります。
- 公式ドキュメントやライブラリのGitHubリポジトリで、使用しているGemがRuby 3.0以上に対応しているかをチェック
rails consoleやrspecでサンプルコードを実行し、バージョン変更による挙動の違いを確認- RuboCopなどの静的解析ツールでRuby 3.0準拠性を自動検出
blockquote
Rails6→7移行においては、「RubyバージョンアップとRailsアップグレードの同時実施」を避けるべきです。公式ガイドでは、Rubyのバージョンアップを先行させることを推奨しています(Zenn)。
API変更の影響範囲調査
Rails7では、Active RecordやAction ControllerなどのAPIが変更されています。代表的な変更点を以下に示します。
| モジュール | 変更内容 | 対応策 |
|---|---|---|
| Active Record | belongs_to_required_by_defaultのデフォルト値変更 |
モデル定義で明示的に指定が必要 |
| Action Controller | prepend_before_actionの動作変更 |
before_actionの記述順を確認 |
| Asset Pipeline | Sprocketsの廃止 | Webpackerなどに代替 |
依存関係(Gemfile)の再調整手順
GemfileとGemfile.lockの管理は、移行成功の鍵です。古いGemや不要な依存関係を見直すことで、移行後の安定性を高められます。
Gemfile.lockの更新とバージョン確認
Rails7では多くのGemが最新版に対応していますが、以下のような具体的な手順で更新を行います。
bundle update railsを実行し、Rails依存関係を更新- Gemfile内で
gem 'rails', '~> 7.0'と指定し、バージョン制限を明示 bundle outdatedでバージョンが古く、 Rails7との互換性に疑問があるGemを確認- 非推奨Gemのリスト(例:
rails-html-sanitizer)を削除し、bundle checkで依存関係を再検証
古いGemの見直し
以下のようなGemは、Rails7では不要または代替手段が存在するため見直しましょう。
jquery-rails: Rails7ではJavaScriptのユーティリティライブラリが標準で利用可能coffee-rails: ES6以降のサポートに移行を推奨sass-rails: Sass 1.0以降はnode-sassまたはdart-sassに置き換える
blockquote
Gemfileは、Rails7の公式ドキュメントやコミュニティでの議論(Qiita)を参照しながら見直しましょう。移行後の不具合は、依存関係の整合性が原因であることが多いです。
オートローダーClassicモード→Zeitwerkモード移行
Rails7ではZeitwerkモードがデフォルトとなりました。この変更に伴い、ファイル構造を再構成する必要があります。
ファイル構造の再構成チェックリスト
Zeitwerkモードでは、以下のようなルールがあります(技術的正確性の向上のため補足)。
- 名前空間とディレクトリ構造が一致(例:
app/models/user.rb→Userクラス) - ファイル拡張子は
.rbのみ(.erb,.hamlなどはエラーの原因。ただし、特定拡張子を許容する設定が可能:config.autoload_paths << Rails.root.join("app", "views")など) lib/以下のモジュールをconfig.autoload_pathsに追加
エラーの早期検出方法
移行後は以下のようなテストでエラーを発見しやすくしましょう。
rails app:templateを使って自動生成されたファイル構造を確認rails consoleで各クラスが正しくロードされるかテスト- リファクタリングツール(例:
rubocop-rails)で名前空間の不一致を自動検出
blockquote
Zeitwerkモードへの移行は、ファイル構造変更無視により発生するエラーを防ぐため、テスト環境での実装検証が不可欠です(エンジニア術)。
config/application.rbでのRails7設定反映とRubyバージョンアップ順序
Rails7の特有設定をapplication.rbに追加し、 Rubyバージョンアップのタイミングを明確化することで、移行リスクを軽減できます。
Rails 7特有の設定項目
以下のコードをconfig/application.rbに追記します(既存設定との整合性を確保)。
|
1 2 3 4 5 6 |
# config.load_defaults 7.0を指定(Rails6.1以降でも有効) config.load_defaults 7.0 # Zeitwerkモードの明示的な切り替え(必要に応じて) config.autoloader = :zeitwerk |
Rubyバージョンの段階的なアップグレード
Rubyバージョンは、Railsアップグレード前に更新する必要があります。手順は以下の通りです。
- 現行プロジェクトのRubyバージョンを確認:
ruby -vで現在のバージョンをチェック - Ruby 3.x以上へのアップグレード:
rbenv install 3.0.4やrvm install ruby-3.0.4を使用し、テスト環境で動作確認.ruby-versionファイルに3.0.4を追記(必要に応じて)- GemfileとGemfile.lockの更新:
bundle update rails後に、bundle lock --add-platform rubyで再ロック
blockquote
RubyバージョンとRailsアップグレードは分離して実施することを推奨します(Zenn)。同時に実施すると、依存関係の不整合やエラーが発生する可能性があります。
公式ドキュメントとの整合性確認と最終チェックリスト
移行後の動作を確実に保つためには、公式ドキュメントとの整合性を定期的に確認することが重要です。
バージョン固有のガイドライン確認
Rails7では、以下のようなバージョン特有のガイドラインがあります(具体的な例と対応策を記述)。
- Hotwire/Turboフレームワークの導入検討: 既存のJavaScriptライブラリを置き換える場合に有効
- Active Recordの最適化:
belongs_to_required_by_defaultのデフォルト値変更に注意 - Rails7特有の設定ファイル更新:
config/environments/production.rbなどでキャッシュやセキュリティ設定を再確認
移行後の検証手順
以下のチェックリストで移行完了を確認してください(テスト環境での操作と本番環境との比較が必要)。
- すべてのテストケースが通過すること(
rspec,test/unitなど) - 本番環境と同様の設定で動作確認(DB構成やエラーロギングを再現)
- 公式ドキュメントと自身のコード比較し、非互換性が解消されているか確認
blockquote
公式ドキュメントは移行手順の最終チェックとして活用しましょう(app-tatsujin)。特にHotwireやActive Recordの変更点を再確認することで、移行後の不具合リスクを最小限に抑えられます。
要点まとめ
- 非互換性のある変更点は、Rubyバージョンアップと分離して確認する
- Gemfileの依存関係見直しで不具合を防止
- Zeitwerkモード移行時はファイル構造再構成が不可欠
- RubyバージョンアップとRailsアップグレードは別々に実施すること
- 公式ドキュメントと整合性確認し、テスト環境での検証を必ず行う