こんにちはこんばんは。株式会社ネクスウェイ所属のHERUESTAです。
今回、私が初めてRailsのバージョンアップを経験させてもらったので、本記事で振り返りを行おうと思います。
初めてのバージョンアップで何をすればいいかわからない方や、Rails 8へのアップグレードを検討している方の参考になれば幸いです。
行ったバージョンの差分
バージョンは以下の通り7.2.2.2 ~> 8.1.2.1に行いました
| バージョンアップ前 | バージョンアップ後 |
|---|---|
| 7.2.2.2 | 8.1.2.1 |
バージョンアップの方法
-
基本的にはRails公式でアップグレードガイドというアップデートする方法を教えてくれているので、そちらに従います
-
具体的には
-
bundle update railsをしてRailsのみをアップデートする - アップデートして出てきた差分について1つ1つ取り込むのか取り込まないかをコメントに記載する
- 実際に取り込んだPRを出して、レビュー
- 取り込む
- dependabotのセキュリティ指摘に関してすでに該当のバージョンにあがっているものに関してはcloseする
- dependabotの個々のPRのgemのバージョンに関してリリースノートを見て上げるか判断
-
-
といったような手順で進めていきます
遭遇したエラー
annotate gemが廃止された
- annotate gemが7.2までのサポートとなっており、Rails8にした場合でエラー落ちしていました
- annotate gemを廃止して、annotaterbに切り替えました
- 切り替え方法自体は、
MIGRATION_GUIDE.mdを出してくれているのでそちらに従えば問題なく移行できました
学びポイント
1. プロジェクトの全体的な知識を得ることができる
pumaやapplication.rbの設定など、アップデート作業をしないとほとんど触れることができないので、プロジェクトとしてどういった設定になっているのか、なぜその設定にしているのかといった知識を得ることができました。
2. Railsの設定関連の体系的な知識を得ることができる
Active StorageなどをはじめとしたRailsの基本的な設定関連の体系的な知識を得ることができました。
例えば、config.cache_store = :memory_storeという記載があった場合にcache_storeというのがそもそもなんなのかというのをRailsガイドで見て「なるほど、キャッシュデータを保持するための設定なのね。memory_storeにするとプロセス間でキャッシュが共有されないようになるのね。」といった知識を得ることができました。(公式のドキュメントって読みにくいイメージがあったんですけど、とてもわかりやすく感動しました😂)
プロジェクトではそもそもキャッシュ自体は使用していなかったので、コメントアウトして適用はしない判断にしました。
3. 影響判断の力を養うことができる
「セキュリティ対応で、メソッドの変更はないから問題ないな」、「メソッド名が変更になったけどこのメソッドは使用していないから問題ないな」といった影響の問題有無の力もつけられるようになりました。
作業において意識してほしいこと
⚠️Railsのアップデートが終わった後に、gemのアップデートを行う
同じようなコマンドでbundle updateというコマンドがありますが、こちらのコマンドはRailsだけでなく全てのgemのupdateをおこなってしまいます。そのため、dependabotであげるバージョン以外も上がってしまい、問題の切り分けや問題の有無がわからなくなってしまいます。
元のバージョンアップ前に戻す作業は煩雑で、他のエンジニアの方の作業時間を奪ってしまうので、コマンドを理解した上で打つようにしましょう(1敗)
終わりに
今回のアップデート作業では、Railsの様々な知見を得ることができた貴重な経験をさせていただきました。
私のようなジュニアの若造にアップデート作業を担当させていただいたリーダーと、ペアプロ形式でアップデート作業を一緒におこなっていただいたベテランエンジニアの方々に感謝の念を込めながら終わりとさせていただきます🙏
-
もっと他の記事も読んでみたい方
-
当社に興味がある方はこちら👀
-
当社のサービスに興味がある方はこちら👀