原
2024.07.31
121
こんにちは!原です!
Ruby on Rails もリリースされてから長いですね。
今回、業務で Ruby on Rails のバージョンアップ対応をすることがあったので、
備忘録的にまとめておきます。
前提として、自動テストが実施されていることがあります。
また、自動テストは rspec を利用しております。
参考にさせていただいたサイト様:
https://qiita.com/jnchito/items/0ee47108972a0e302caf
https://railsguides.jp/upgrading_ruby_on_rails.html
今使っている gem のバージョンと最新の gem のバージョンがどれくらい異なっているか確認します。
下記コマンドで、最新でない gem のリストが取得できますので、確認してみましょう。
bundle outdated
rubocop を使って、記述に問題がないかを確認します。
また、 rspec を使って自動テストがすべて通ることを確認します。
下記コマンドで、 develop, test の gem をアップデートします。
bundle update -g development -g test
bundle outdated
の結果を見て、メジャーバージョン番号が変わっているgemを1つずつ慎重にアップデートします。
bundle update [gem]
bundle update [gem]
の実行結果が依存関係でエラーになる場合、
最新バージョンではなく、古いバージョンを指定するなどして、
エラーが発生しないようにします。
どうしても依存関係エラーが発生する場合は、
バージョンアップをスキップすることも選択肢にいれましょう。
rubocop で記述に問題ないか確認したり、rspec で自動テストを実行したり、
実際に画面を操作したりして、今まで通り使えているかどうかを確認します。
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 メジャーバージョン、もしくはマイナーバージョンを更新します。
Gemfile
# Railsのパッチバージョンを上げる
-gem 'rails', '6.0.6'
+gem 'rails', '6.1.7.8'
bundle update rails
エラーが発生する場合は、エラーメッセージをよく見て、
依存関係に問題がないかよく確認します。
~>
がついている部分など、バージョンを手動で上げないと
エラーになったりします。
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
の値を反映させてやります。
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 on Rails アプリで使用している Ruby のバージョンが古い場合は、最新にする必要があります。
Rubyは後方互換性をかなり重視しているので、バージョンを上げてもトラブルが起きる可能性は低いはずです。
ですが、それでもゼロとは言えないので、Rubyのバージョンを上げたらテストがすべてパスすることを確認してください。
伊藤さんも言われておりますが、バージョンアップをしないと技術的な負債が溜まっていきます。
こまめなバージョンアップを心がけて、心理的安全性もアップしていきましょう!
29
原
2024.08.01
64
原
2024.07.31