新卒1年目がRailsのバージョンアップをやってみた

# はじめに イタンジ株式会社でITANDI BBの開発をしているVO HUU DUC(ボ ヒュ ドゥック)です。

背景

ITANDI BBプロダクトは主にRailsを使って開発しています。ITANDI BBはRails 6.0でしたが、バージョンのEOLに伴ってRails 6.1まで上げました。

やったこと

やったRailsバージョンアップの手順

  • テストのカバレッジを確認しました。カバレッジが約94%で、必要なテストはあると判断できたため、バージョンアップに際してはテストを追加しませんでした。
  • developmentグループとtestグループのgemのバージョンを先に更新しました。
  • その後、developmentグループとtestグループのgem以外、全てのgemのバージョンを更新しました。
  • 「6.0系」のrailsバージョンの最新のバッチバージョンに更新しました。
  • Railsバージョンを「6.1.7.6」に更新しました。6.1.7.6バージョンはアップグレードをした時点でのRails 6.1の最新のバッチバージョンです。
  • 最後に、rails app:updateを実行して、Railsのバージョンに依存する設定の更新をします。ここで注意することは、Railsのバージョンの変更により上書きされる設定があるので、差分を確認して必要に応じて設定をデフォルトから変えることです。

Railsバージョンアップの後にやったこと

発生したトラブルとその解決

  • トラブル1: Bullet gemが更新され、テストが落ちました。

    • 原因:preloadやincludesを使う箇所にRemove from your query: .includesのようなエラーを発生しました。
    • 解決:コードを確認した上で、該当のテストでBulletをdisableすることにしました。本番環境のデータ量を考慮すると、includesなどを使う必要がある判断したので、該当のテストでBulletをdisableすることにしました。
  • トラブル2: carrierwaveを2.1.0から 3.0.3に更新して、extension_whitelistが非推奨になって、テストを実行するときに、警告メッセージが出ました。

    • 原因:extension_whitelistが非推奨になりました。
    • 解決: 非推奨警告に従って、extension_whitelistをextension_allowlistに変更し、警告メッセージを解消しました。
  • トラブル3: faraday gemが2.7.2から2.7.10に更新され, 以下のようにいくつかのwarningが発生しました。

  • トラブル4:rails 6.0.6.1に更新して、テストを実行するとDEPRECATION WARNING: Initialization autoloaded the constants ActionText::ContentHelper and ActionText::TagHelper.が発生しました。

    • 原因:テスト環境には、config.cache_classes = trueに設定されていることが原因です。
    • 解決:テスト環境で、config.cache_classes = false を設定して、解決できました。その理由は、config.cache_classesは、アプリにアクセスするたびにアプリケーションのクラスやモジュールをリクエストごとに再読み込みするか(=キャッシュしないかどうか)どうかを指定します。テスト環境では、キャッシュする必要がないからです。
    • 参考:
  • トラブル5: rails 6.1.7.6に更新すると, DEPRECATION WARNING: Rendering actions with '.' in the name is deprecatedが発生しました。

    • 原因:コントローラのテンプレート指定に拡張子をつけることが推奨されなくなりました。
    • 解決:テンプレート指定の箇所から.html.erbの部分を消すことで解決できました。

他の参考記事:

最後に

今回のRailsバージョンのアップデートをまとめました。