私の歴史と今

振り返ると恥ずかしくなるのが私の歴史。だけどそのときは真面目に書いていた訳でね。そんな今の私を書いていく。

JRuby on Railsを3.2.8から5.2.1にバージョンアップした

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互換)に留めた。