Ruby
Rails

Upgrade Forkwell to Rails5 the faster 🎉

More than 1 year has passed since last update.

Ruby on Rails Tech Meetup

https://cw-meetup.doorkeeper.jp/events/52879

の発表資料です。



自己紹介

名前: 正徳 巧

会社: 株式会社grooves

職種: サーバーサイドエンジニア

github: sinsoku

twitter: @sinsoku_listy


https://jobs.forkwell.com/

jobs.png


http://tech.grooves.com/entry/2016/07/01/184458

quick.png



Rails5 アップグレードの進捗どうですか?



:relieved:



アジェンダ


  • アップグレード手順


    • gem のアップグレード

    • プルリクを出す

    • RC で動かしてみる



  • 5.0.0 のリリースまで

  • 最速リリースを目指した理由



アップグレード手順



gem のアップグレード


  • gem を最新にする

  • rails5 対応のバージョンに上げる


  • Rails guide を読んで対応

  • 落ちたテストの修正



gem を最新にする

sanemat/tachikoma, sinsoku/tachikoma_ai で毎週アップデート

tachikoma_ai.png



rails5 対応のバージョンに上げる


  1. beta, pre のバージョンがないか確認


    • gem 'rspec', '>= 3.5.0.beta3' など



  2. master ブランチを確認する


    • gem 'sinatra', github: 'sinatra/sinatra' など



  3. Pull Request で対応されていないか確認する


    • fork されたリポジトリを使用する



  4. ソースコード読んで自分で直す


active_decorator-rspec は自分で対応しました。

active_decorator-rspec.png



Rails guide を読んで対応

guide.png



落ちたテストの修正

頑張る。

参考: http://tech.grooves.com/entry/2016/07/01/184458



プルリクを出す



プルリクを出す

rails5 ブランチを作って、対応を進めていきます。

rails5.png


Rails 4.2 の状態でも変更が可能なもの


  • s/ActiveRecord::Base/ApplicationRecord/

  • s/env/request.env/


  • alias_method_chain を Module#prepend に修正

  • ...etc


4.2 で変更可能なコミット

rails5-1_mark.png


cherry-pick

rails5-1.png


マージ

rails5-1_merged.png


残りコミット

rails5-2_mark.png


リベース

rails5-2_rebased.png


rc1.png



小さいプルリクの利点


  • 各プルリクがレビューしやすい

  • コンフリクトを避けられる

  • 業務の合間に少しずつ進められる



RC で動かしてみる


弊社で Rails5 対応を始めたのは 4月の beta3 から

rc1_apr.png



rc1 で動作確認が完了

業務の合間に少しずつ対応を進め、 5月末に staging で一通りの機能の動作確認が完了してしまった。



社内で相談


  • 大きな変更が少ない


    • API モード未使用

    • ActionCable 未使用

    • puma 未使用




  • rails にヤバそうな issue がなかった

  • 変な事が起きたらバージョン戻そう


rc1_merged.png



マージしちゃった :laughing:



RCで1ヶ月の間、問題なく稼働

5月末〜7月1日まで prodcution で RC が動いていました。


or メソッドを使ったりしていました

or_method.png



5.0.0 のリリースまで


6/23: RC2 が出たら、すぐにアップグレード

rc2.png


6/24: 5.0-stable ブランチの監視

watch_5_0_stable.png


7/1(6:20): 5.0.0 のリリースを確認

5_0_0_release.png


7/1(10:30): RC2 → 5.0.0 で一部のテストが落ちる :ghost:

turbolinks_bomb.png


7/1(16:20): Rails5 のアップグレード完了 :shipit:

merged.png



最速リリースを目指した理由



その方が面白いから! :laughing:



真面目な理由


  • OSS に貢献できるチャンス

  • 他の Rails エンジニアのアップグレードのため

  • 会社のブランディング


    • 採用、PV に繋がるかも?





まとめ



まとめ


  • Rails5 は少しずつ対応できる


    • 弊社の技術ブログをご活用ください



  • OSS に貢献できるチャンス

  • Rails6 は、会場の誰か頼む



ご清聴ありがとうございます。