🛤️

rails8のupdate手順

2024/11/11に公開

rails8.0がリリースされました。

既存のrailsサービスをアップデートしたので、その手順を残しておきます。

環境

  • docker
  • ruby3.3.4
  • rails7.2.1 APIモード
  • rspecカバレッジ90%

前提

rails8にする前にやっておくべきことは以下です。

  • rails7.2にしておく
  • DEPRECATION WARNINGを全部解消しておく
  • テストを充実させておく

1. railsを7.2.1から7.2.2にupdate

まずはrailsを8.0前の最新にします。

私の場合は

rails7.2.1から7.2.2にupdateしました。

bundle update --conservative rails

2. テスト

rspecを実行します。

bundle exec rspec spec --backtrace

全てのテストが通って、DEPRECATION WARNINGも発生しなければOKです。

3. Gemfile修正

Gemfileのrailsを8.0.0に書き換えます。

- gem "rails", "~> 7.2.1"
+ gem "rails", "~> 8.0.0"

4. railsを8.0.0にupdate

bundle update --conservative rails

依存gemが8.0.0に未対応の場合は、updateできない場合もあります。

5. rails app update

設定ファイルを最新にします。

bundle exec rails app:update

コマンド実行前にgitで保存しておいて、全部Yを選択して全てのファイルを更新します。

その後、gitのdiffで差分を確認しながらファイルを修正していくと良いでしょう。

私の環境ではほとんど修正点はありませんでした。

今回変更したのは

filter_parameter_logging.rb
 :passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn, :cvv, :cvc

上記は:cvv, :cvcを追加しました。

track/config/puma.rb
# Run the Solid Queue supervisor inside of Puma for single-server deployments
plugin :solid_queue if ENV["SOLID_QUEUE_IN_PUMA"]

こちらはsolid_queueを追加しました。

6. 追加migrateファイル

使うかわからないので、ひとまずファイル名の拡張子をbkにして残しました。

7. application.rb

最後はapplication.rbの

config.load_defaults 7.2を8.0に変更します。

確認

8.0になっていることを確認します。

bundle exec rails about
About your application's environment
Rails version             8.0.0
Ruby version              ruby 3.3.4 (2024-07-09 revision be1089c8ec) +YJIT [x86_64-linux]
RubyGems version          3.5.11
Rack version              3.1.7

rspecを実行します。

bundle exec rspec spec --backtrace

問題がなければ、サーバーを起動していつもどおりであることを確認して終了です。

まとめ

rails7.2からであれば、rails8のupdateで問題になる点はありませんでした。

railsのupdateをうまくやるコツは

  • メンテナンスはこまめにやっておく
  • 依存gemは最小限にする

であることは今後も変わらないでしょう。

railsの生産性の高さを享受するには、

こまめなメンテナンス

が欠かせないことが今回のupdateでより確信しました。

今後の学習

rails8では色々新規の機能が入っていたので、今後以下の機能の実用性を調査しようと思います。

  • Thruster
  • Solid Queue
  • Solid Cache
  • Kamal 2

rails8.1でもActive Record SearchやAction Notifierなどの機能が搭載されるので、今後はしばらく新しくなったrailsの学習が必要になりそうです。

Discussion