Railsのバージョンアップの案件があり、JRuby, Java, Rails, DBをコツコツバージョンアップしていった。なおかつ、OSもWin->Linuxに変え、APサーバも変更した。
非互換を確認したのは、ログイン操作、画面一つの中のAjaxを含むCRUD操作、CSV/PDF出力。他の画面の非互換は未確認。
非互換は、以下のような結果として現れた。
- Railsサーバ(rails s)がそもそも起動しない
- その他のRails/Gem専用コマンドで例外が発生する
- 警告がログ出力される
- ブラウザ操作中に例外が発生する
- 例外は発生しないけど結果異常になる
発生した非互換の数は約70個。一人で半月ちょいかかった。
注意が必要なのは、最後の非互換。例外が発生しないからテストコードない場合は大変だと思う。
横展開が大変なのは、ActiveRecordの書き方を変更しなければならないこと。ほぼ全てを修正する必要がある。
面倒だったのは、メンテナンスが滞っているgemの対応。今回は2つのgemがRails5に対応していなくて、モンキーパッチを当てる羽目になった。
悩ましかったのは、Railsに追加された新しい機能を使うべきか否か、という点。元々リクエストパラメータのプロテクトをしていなかったので、既に標準的な機能であるStrong Parameterを採用するには工数がかかりすぎる。新機能を使わない方が工数を減らせるので、その方向に進みがちになるとも思うけど、安易に捨てるべきでは無いとは思う。バージョンアップした意味が薄れてしまうので。
今後のバージョンアップで大変になるだろうなと思うことは、Strong Parameterが強制された場合の対応と、routes.rbでワイルドカードが非推奨から非互換に変わった場合の対応。どちらも一つ一つ確認していかなければならないので地道な作業。
なお、全てを最新バージョンにしたが、JRubyのみ一つ前の9.1.7(Ruby2.3.3互換)に留めた。