LoginSignup
0
0

Rails6.0系からRail7.0系へのアップデート準備

Posted at

はじめに

本記事は錆びかけたRailsの知識を頑張ってアップデートするアドベントカレンダー20日目です。

今開発しているアプリがRails6系なので、これを7系にアップデートするにあたり必要な情報を集めます。

前提

テストコード必須

アプリケーションのコアとなるロジックを中心に、挙動がおかしくならないかを自動で確認するテストを書いておく。
テストがないと、アプリの挙動全てを手動で確認しなければならない。普段から行っていなければ漏れが出るし、アプリの機能の規模が大きくなれば全て手動でやるのはコストがかかる。

実施手順

公式のアップグレードガイドに目を通し、確認が必要そうなところに目星をつけておく

ブランチを作成する

Railsのバージョンアップの際は、以下のような命名規則にするとよさそう。

ブランチ
develop ━ feature/rails_update_6.x ┳ feature/rails_6-x_update_xxx
                                   ┣ feature/rails_6-x_update_rails
                                   ┗ feature/rails_6-x_fix_xxx

Rails以外のGemのアップデート

影響の小さそうなものから順番に行っていく。
bundle outdatedを使うと必要なGemを炙り出せる。最近は結構見やすい形で出してくれるらしい。

Rails以外をbundle update --conservative <gem名>でバージョンアップ--conservativeオプションにより、指定したgemと指定したgemが直接依存しているgemのみバージョンアップするようになる。

deviseは影響が大きそうなので、CHANGE LOGを確認するなどして慎重に行うこと。

あとは、bundle updateでまとめてやる。もう一回bundle outdatedで確認.

Railsのパッチバージョンを最新にする

いきなり6.xxから7に上げるのではなく、パッチバージョンを最新に上げる。テストを実行してきちんと動くことを確認。

Railsのメジャーバージョンを上げる

GemfileのRailsのバージョンを指定し、bundle updateを実行。

rails app:updateを実行

バージョンアップにあたり、必要なファイル作成やファイル更新を対話的に行える。

検討事項

参考:
https://railsdiff.org/

先にRubyのバージョンをアップデートするか

今回はRubyはすでに3系を利用している。Rails7にすることができるバージョンなので、このタイミングでは必要ないかも。ただし、Railsのバージョンが上げ終わったらすぐにRubyのバージョンも上げておきたい。こまめにアップデートすることが無用なトラブル回避に繋がる。

importmapsを使うか

結論、使わないでよさそう。その場合は一旦bin/devの実行で凌ぐが、Procfile周りの取り扱いについて調べる必要がある。

デプロイはどうなるか

現状、PaaSに直接プッシュしてデプロイしている状態。Rails7に上げることで、そのプロセスに何か変化があるか。

必要そうな対応

アップデート前

オートローダー設定
以下を参考にオートローダーを変更しておく
https://railsguides.jp/classic_to_zeitwerk_howto.html

アップデート後

Sprokets
Sproketsを使っているので、Gemsprokets-railsをGemffileに追記する必要がある。

外部ページへのリダイレクトの挙動

外部ページへのリダイレクトが最初から無効になっている。

§3.10.16 config.action_controller.raise_on_open_redirects -- Configuring Rails Applications — Ruby on Rails Guides

以下のように書くことでリダイレクトを一時的に有効にできる。

redirect_to authorize_uri, allow_other_host: true unless sign_in?

参考にする記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0