Rails4系からRails5へのアプデ
以前リリースしたサービスですが、Rails4.2.6からRails5.0.0へのアップデートを行いましたので手順を残しておこうかと思います。
ちなみに、仕事でも現在アップデート作業を頑張っていますが、こっちは規模が違うので色々大変で難航しています。
# テストコード
可能な限りテストコードは用意しておきましょう。
サービスが大きくなればなるほどアップデート作業が大変になります。
こまめに、無理のない範囲で用意しましょう。
まったくテストコードがない場合は、重要な部分、テストコードが簡単に用意できる部分、RailsであればModelのように下位レイヤーあたりから始めるのがおすすめです。
テストコードが1つもないより、1つだけでもあるプロジェクトの方が安心感がぐっと上がります。
# Rubyのアップデート
最近のRubyでは互換性が無い修正はまずありません。
可能な限りRubyのアップデートから始めましょう。
アップデート前と後でテスト結果に変化が無いことも試しましょう。
もし、問題が発生するとすればRubyのバージョンとGemのバージョンの依存関係が多いと思います。
Gemは普段からアップデートしておき、開発が停止している場合は乗り換え先を探しましょう。
可能ならば、Gemを使わなくて済む方法を探しましょう。ちょっとした機能であれば自前で開発するのが良いです。
# Rails4系の最新版へのアップデート
自分のサービスは小さいので定期的にアップデートを行っていますが、最新になっていない場合はまずメジャーバージョンは固定しつつ最新にしましょう。
ここでもGemの依存関係に悩まされるはずです。Gemは少ないほうがバージョンアップ時に苦しまなくても済みます。
テストはもちろんテストコードを利用しましょう。
# Rails4系からRails5系へアップデート
いよいよ本題です。
私の場合は次のような手順を踏むことが多いです。
- アップデート作業開始は大体ベータ版がリリースされたタイミング
- リリースノートやリリース情報をチェックする
- 新しいRails5のプロジェクトを作成する
- 仕入れた情報と合わせつつ、現在のプロジェクトとRails5のプロジェクトを見比べる
- 例えばbin/以下に違いが出てないか? config/以下は? Gemfileは? などなど
- 現在のプロジェクトが大きい場合はRails4系の新規プロジェクトを作成して比較すれば分かりやすい
- 違いが分かれば適時Rails5に合わせていく
- リリースノートやRailsのログを見つつ使われなくなる機能や各種警告に対応する
- Gemの整理
今回の追加、修正の目ぼしい箇所をいくつか上げておきます
- app/models/application_record.rb、app/controllers/application_controller.rbがデフォルトで追加された
- bin/以下に修正が入っている
- config/application.rbの書き方が一部変更になっている
- config/cable.yml、app/channels/、app/jobs/等新しい機能に対応するファイル/ディレクトリが増えている
- 他にもpublic/apple-touch-icon*.png等の追加ファイルもある
- Gemfileには追加や削除されたものがあるので、適時追加、削除、修正を行う
これらを試しつつ'rails s'が動けば最低限の山は超えたと言ってよいでしょう
もちろん、テストコードの結果、rakeタスクのようにテストコードが書きにくい機能の手動テスト、デザインやJSなどUI/UX周り、等など確認する部分は多々有ります。
最終的に納得する部分まで来たら、最後は覚悟を決めてリリースです。
いつでもrollback出来るように準備を忘れずに...