こんにちは、endoです。
アドベントカレンダー2日目の記事です。
現在、rails5へのアップデート作業をしており、その途中経過報告です。
1 rails4系の最新版にする
2 rails5を動かす
→gemをrails5対応するものにあげる
3 rails4で変更できるDeprecationコードを書き直していく
→Deprecationコードを地道に修正する
4 rails5でしか変更できないもので一気にリリースする
ざっくりと、こんな感じで動いております。
現在は、3の作業の途中です。
体感でいうと、3の入り口で全体の10%ぐらいの気がしています。
では、1の状況から振り返ります。
rails4系の最新版にする
rails4.2.10に上げました。
nokogiriが1.8.1に上がり、確認漏れがあり不具合が出ました。
CMSのDOMのParseをnokogiriで行っていますが、Parseに修正が入っており、今までの書き方では動かない場所がありました。
これは気づきにくいよ・・・(´・ω・`)
rails5を動かす
いきなりgemをrails5に切り替えると、悲しいぐらいすんなり動いてくれません。
その理由は、gemがrails5(actionpack/railtieなど)に対応していないからです。
ここは地道に上げていきましょう。
- acts-as-taggable-on 3.5.0 → acts-as-taggable-on 5.0.0
- coffee-rails 4.0.1 → coffee-rails 4.2.2
- delayed_job_active_record 4.1.1 → delayed_job_active_record 4.1.3
- capistrano 2.15.5 → capistarano2.15.9(sprocketsのdeploy対応)
- slim-rails 3.0.1 → slim-rails 3.1.3
- sass-rails 4.0.3 → sass-rails 5.0.6
- sprockets 2.11.0 → sprockets 3.7.1
- rspec-rails 3.4.0 → rspec-rails 3.7.0
- jbuilder 2.2.5 → jbuilder 2.7.0
- will_paginate 3.0.7 → will_paginate 3.1.6
使用しているgemで最低限上のものを上げないとrails5が動きませんでした。
気持ちにはiphone5からiphone8にアップデートするぐらいのアップデートでした。
gem updateによる副産物
今までバグがたまに出ていた箇所の修正がされており、わざわざバグ対応する手間が省けました。
https://github.com/mbleigh/acts-as-taggable-on/pull/809
上のプルリクによって、たまにいこーよ内で起きていた問題も解消されました。
gemをアップデートすることは大事ですね。
rails4で変更できるDeprecationコードを書き直していく
rails5が動いたからといって、今までの上記のgem以外が動かないとは限りません。
pry-railsは動いてくれなかったので、アップデートしました。
DEPRECATION : alias_method_chain is deprecated. Please, use Module#prepend instead. From module, you can access the original method using super.
rails console
を叩くだけで、簡単にDeprecationが出てくれるので、本当に助かります。
ここでDeprecationで出ているものは、gemの場合もあります。
gem側が修正していないなら、forkして直すか、捨てるしかありません。
時代とともにソースコードは変化する
話は変わりますが、いこーよはhttps化が完了しております。
https://github.com/actindi/ssl_requirementでhttpsの判定をしております。
ただ、このgemでDeprecationが出ているので、http/httpsの判定をnginx
側に全部寄せようとしています。
今まではアプリケーションコードで書く方が柔軟でしたが、現状はhttps化になっているので、アプリケーション側で設定するよりはnginx側に任せるよう方が役割がハッキリします。
一部httpの接続を許可する場所もありますが、複雑になりそうな気配もないので、これをきっかけに変更します。
そして、gemの役割を終えてもらいます。
総括
想像しているよりやること多いなって感じたのが本音です。
ただ、gemのアップデート作業によって不具合が修正されたり、いらないgemを消したりできるので、こういうのは嬉しいですね。
この作業終わったら、常にgemを最新の状態に保てるような体制を構築したいと思います。
以上です。