Rails4系からRails5へのアプデ

sqale.yoseba.org

以前リリースしたサービスですが、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出来るように準備を忘れずに...