Ruby On Rails のアップデート手順

2024.07.31

16

こんにちは!原です!

Ruby on Rails もリリースされてから長いですね。

今回、業務で Ruby on Rails のバージョンアップ対応をすることがあったので、

備忘録的にまとめておきます。

前提として、自動テストが実施されていることがあります。

また、自動テストは rspec を利用しております。

参考にさせていただいたサイト様:

https://qiita.com/jnchito/items/0ee47108972a0e302caf

https://railsguides.jp/upgrading_ruby_on_rails.html

Ruby on Rails アップデート手順

gem の状態を確認する

今使っている gem のバージョンと最新の gem のバージョンがどれくらい異なっているか確認します。

下記コマンドで、最新でない gem のリストが取得できますので、確認してみましょう。

bundle outdated

コードの状態を最新に保つ

rubocop を使って、記述に問題がないかを確認します。

また、 rspec を使って自動テストがすべて通ることを確認します。

繰り返し実施

develop, test の gem をアップデートする

下記コマンドで、 develop, test の gem をアップデートします。

bundle update -g development -g test

gem のアップデートをする

bundle outdatedの結果を見て、メジャーバージョン番号が変わっているgemを1つずつ慎重にアップデートします。

bundle update [gem]

bundle update [gem] の実行結果が依存関係でエラーになる場合、

最新バージョンではなく、古いバージョンを指定するなどして、

エラーが発生しないようにします。

どうしても依存関係エラーが発生する場合は、

バージョンアップをスキップすることも選択肢にいれましょう。

動作確認

rubocop で記述に問題ないか確認したり、rspec で自動テストを実行したり、

実際に画面を操作したりして、今まで通り使えているかどうかを確認します。


rails gem 最新のパッチバージョンに更新する

Ruby on Rails のマイナーバージョン、またはメジャーバージョンを上げる前に、パッチバージョンを最新に上げます。

たとえば、Rails 6.0.5.9 を Rails 6.1 に上げる前に、Rails 6.0.6.1 に上げます。

Gemfile
 # Railsのパッチバージョンを上げる
-gem 'rails', '6.0.5.9'
+gem 'rails', '6.0.6'


bundle update rails

rails gem メジャーバージョン、もしくはマイナーバージョンを更新する

rails gem メジャーバージョン、もしくはマイナーバージョンを更新します。

Gemfile
 # Railsのパッチバージョンを上げる
-gem 'rails', '6.0.6'
+gem 'rails', '6.1.7.8'


bundle update rails


エラーが発生する場合は、エラーメッセージをよく見て、

依存関係に問題がないかよく確認します。

~> がついている部分など、バージョンを手動で上げないと

エラーになったりします。

rails app:update の実行

rails app:update を実行します。

rails app:update


上書き更新されるファイルは次のように対応方法を質問されるので、
Y/n/a/q/d/hのいずれかのキーを入力します。
Overwrite /myapp/config/application.rb? (enter "h" for help) [Ynaqdh]


各キーの意味は次の通りです。
Y - Yes。上書き実行
n - No。上書きしない
a - All。このファイル以降の全ファイルを上書き
q - Quit。処理中断
d - Diff。新旧ファイルのdiffを表示
h - Help。入力する各キーの意味を表示

重要な設定を元に戻す

rails app:update にて、Y で上書き実行すると、それまで使っていた重要な設定が失われることがあります。
その場合は git の diff をチェックしながら、上書きされて消えてしまった設定を自力で戻していきます。


フレームワークのデフォルトを設定する

新しいバージョンの Ruby on Rails では、前のバージョンとデフォルト設定が異なるものがあります。
app:updateタスクでは、アプリケーションを新しいデフォルト設定に1つずつアップグレードできるように、
config/initializers/newframeworkdefaults_X.Y.rbファイルが作成されます。
このファイル内のコメントを解除して、新しいデフォルト設定を有効にする必要があります。
アプリケーションを新しいデフォルト設定で動かせる準備が整ったら、
このファイルを削除してconfig.load_defaultsの値を反映させてやります。


新しく追加された gem を確認する

app:updateコマンドを実行しても、Gemfile のようにまったく更新されないファイルもあります。
ですが、rails newした直後の Gemfile を比較すると、デフォルトでインストールされる gem の種類やバージョンには違いがあります。
Ruby on Railsのバージョンを上げたのであれば、こういった部分も新しいRailsに合わせておく方が安心です。


https://railsdiff.org/6.0.6.1/6.1.7.8

動作確認

rubocop で記述に問題ないか確認したり、rspec で自動テストを実行したり、

実際に画面を操作したりして、今まで通り使えているかどうかを確認します。



最新バージョンに上げるまで、"繰り返し実施"を実施する

ruby のバージョンを上げる

繰り返し実施しているなかで、Ruby on Rails アプリで使用している Ruby のバージョンが古い場合は、最新にする必要があります。

Rubyは後方互換性をかなり重視しているので、バージョンを上げてもトラブルが起きる可能性は低いはずです。
ですが、それでもゼロとは言えないので、Rubyのバージョンを上げたらテストがすべてパスすることを確認してください。


最後に

バージョンアップはこまめに行おう

伊藤さんも言われておりますが、バージョンアップをしないと技術的な負債が溜まっていきます。

こまめなバージョンアップを心がけて、心理的安全性もアップしていきましょう!

この記事をシェアする