10個あるRails プロダクトのバージョンを 一晩で3.2.21 から4.2.xx にあげた話
こんにちは!@Kotaroです。
本エントリーは、前回のエントリーに引き続き、プロダクト開発G内の勉強会で発表した資料の再編になります。
前職時代に行なった、Rails プロダクトのバージョンアップについて当時のことを思い出しながら書いています(尚、詳細なバージョンアップの方法等は書かれていません、ただの備忘録です)。
Rails の歴史
本日(2019/09/30 現在)までに、Rails はバージョン6 までリリースされています。
私は、大学生の時初めてRails に触れ、現在でもバリバリコードを書いています。バージョンでいうと、ver3 ~ ver5 の間です。
そんな感じで結構な時間Rails と付き合ってきているのですが、振り返ってみると、バージョンの追従が大変さ をとても強く感じます。
理由を考えると色々出てきそうですが、私が思う大きな理由をまとめると以下の通りです。
この中でも一番の理由となるのが、3番目の Rails の規約に則ってない実装をすると、途端にバージョンアップの難易度が上がる ことだと思っています。後述しますが、実際にバージョンアップを行なった際、これが大きなハードルになりました。Rail に乗らない実装が大きな負債になりうることを身を以て感じる出来事でした。
当時の状況
Rails にある程度慣れてきた時の話でした。
当時は、プロダクトの数に対してもらった期間で終えられるのか、直感的に危機感を覚えていたように思います。
タスク整理してリソース相談
タスクボリュームに対する作業期間が少ないのか多いのか適正なのか分からなかったので、具体的な細かいタスクへの落とし込みとそれにかかる時間をざっくり算出しました。
作業工程の線引きとリソース管理は、普段の開発業務からだと中々経験できないので、良い経験だったと思います。
テストコードを書く
バージョンアップにテストコードは必須です。これがないと大きな不安を感じながら作業することになります。
テストのカバレッジはプロダクトによってまちまちでしたが、だいたい50% ~ 80% だったかと記憶しています。それら全てをover 90% にすることを目標に、コツコツとテストコードを書いていきました。
ローカルでバージョンアップ
Rails 4.2.xx を目指してひたすらバージョンアップを行いました。ゴールはRails 4.2.xx の状態で、テストコードが全て通ることです。
Rails 本体のバージョンアップが大変というより、依存Gem がうまくバージョンアップできなかったり、そもそも使っているGem がRails 4.2.xx をサポートしていないことの方が大変です。頑張ってパッチを当てたり、一から実装を作り直したりしました。
また、前述した規約に則ってない実装 があり、大きく実装を変更せざる負えず、大きなコストがかかりました。
STG 環境にデプロイ
ここにくるとアプリケーションの問題ではなく、デプロイする環境の問題になります。サーバー内のソフトウェアのバージョンや共有ライブラリのリンク切れが主な原因で、事前の対応も難しいので踏み抜いたら即時対応で切り抜けました。
本番デプロイ
深夜にサービスを止めて対応しました。
手順はSTG 環境でやったこととほぼ同じなのですが、STG 環境とは別のGem インストールが通る/通らないが発生します。朝にはサービスが動いてないと行けないので、時間と戦いながら復旧作業を行いました。
そんな感じで出たとこ勝負でしたが、なんとか時間内に終えることができました!時間的には本当にギリギリだったと思います。
まとめ
テストがあれば精神的に安定します。必須です。
また、STG と本番で同じ環境になっていればいいですが、そうなっていない場合が多いし、そもそも同じなのかどうか知る由がないので、サーバー内の透明化はすごく大事です。
また、バージョンアップとの向き合い方を学ぶことも重要ですので、こちらを読んでいただければと思います。
以上です。読んでいただきありがとうございました!!