Upgrade Forkwell to Rails5 the faster 🎉

  • 12
    いいね
  • 0
    コメント

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 は、会場の誰か頼む

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