はじめに
Railsのバージョンアップを担当したので、気をつけたポイントと反省点をまとめました。
背景
これまでRails 7系を使っていましたが、セキュリティサポートが終了していました。昨今セキュリティ関連のニュースも増えていることから、Rails 8系へ移行することになり、その対応を私が担当しました。
ざっくり何をしたか
セキュリティ上のリスクを早く解消したかったため、作業を大きく2回に分けて進めました。ただ、途中でバージョンアップが必要なGemの漏れが見つかり(詳しくは「反省点」で触れます)、結果的に3日かかりました。
- 前準備
- load_defaults のバージョンを、現在のRailsのバージョンに合わせる
- Gemの整理とバージョンアップ
- Rails本体のバージョンアップ
気をつけたポイント
気をつけたポイントは次の4つです。
- 他部署と開発チームが協力し、ステージング環境で手動のE2Eテストを念入りに行う
- 他の変更と一緒にデプロイしない
- 切り戻し(Revert)しやすいように、デプロイ後は同じファイルを変更する別の修正をデプロイしない
- デプロイ後にログやサーバーのパフォーマンスを監視する
- Sentryでエラーが発生していないか
- Sidekiqでdeadジョブが出ていないか
- サーバーのレスポンスタイムが遅くなっていないか
- CPU使用率がスパイクしていないか
特に力を入れたのは1つ目です。普段からシステムを使っているカスタマーサポートチームに協力をお願いしました。事前に次の観点を整理して渡し、確認していただきました。
- 特に確認してほしい機能
- どの操作をしたときに、どの挙動になるのが正しいか
- いつもと比べて変わっている点がないか
開発チームも同じ観点で動作を確認しつつ、ログもチェックしました。
反省点
業務委託で参画しているエンジニアの方から「Railsのアップグレードガイドを AI に渡すとよい」と助言をいただき、そこで初めて公式の「Railsアップグレードガイド」の存在を知りました。実際にガイドを AI に渡して確認させたところ、バージョンアップが必要なGemに漏れがあることに気付けました。
大きな問題にはなりませんでしたが、この漏れの対応で作業が1日延びました。本来は、AIに作業計画を立てさせる前に、こうした公式ドキュメントがないかを調べさせるべきでした。
最後に
普段は意識せずに使っていたGemが何をしているのかを知る機会になり、バージョンアップで何に気をつけるべきかも学べました。貴重な経験だったと感じています。
