アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

rails5へのアップデート作業の途中経過報告

こんにちは、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_requirementhttpsの判定をしております。

ただ、このgemでDeprecationが出ているので、http/httpsの判定をnginx側に全部寄せようとしています。

今まではアプリケーションコードで書く方が柔軟でしたが、現状はhttps化になっているので、アプリケーション側で設定するよりはnginx側に任せるよう方が役割がハッキリします。

一部httpの接続を許可する場所もありますが、複雑になりそうな気配もないので、これをきっかけに変更します。

そして、gemの役割を終えてもらいます。

総括

想像しているよりやること多いなって感じたのが本音です。

ただ、gemのアップデート作業によって不具合が修正されたり、いらないgemを消したりできるので、こういうのは嬉しいですね。

この作業終わったら、常にgemを最新の状態に保てるような体制を構築したいと思います。

以上です。