Upgrade Forkwell to Rails5 the faster 🎉

Ruby on Rails Tech Meetup
https://cw-meetup.doorkeeper.jp/events/52879

の発表資料です。

---

## 自己紹介

名前: 正徳 巧
会社: 株式会社grooves
職種: サーバーサイドエンジニア
github: [sinsoku](https://github.com/sinsoku)
twitter: [@sinsoku_listy](https://twitter.com/sinsoku_listy)

---

https://jobs.forkwell.com/

![jobs.png](https://qiita-image-store.s3.amazonaws.com/0/30459/256462b2-6e92-721d-5dcb-f6deca2499cc.png)

---

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

![quick.png](https://qiita-image-store.s3.amazonaws.com/0/30459/6c180d3f-137e-df62-c9f9-119c9cfdec28.png)

---

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

---

## :relieved:

---

## アジェンダ

- アップグレード手順
  - gem のアップグレード
  - プルリクを出す
  - RC で動かしてみる
- 5.0.0 のリリースまで
- 最速リリースを目指した理由

---

## アップグレード手順

---

## gem のアップグレード

- gem を最新にする
- rails5 対応のバージョンに上げる
- [Rails guide](http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#upgrading-from-rails-4-2-to-rails-5-0) を読んで対応
- 落ちたテストの修正

---

## gem を最新にする

[sanemat/tachikoma](https://github.com/sanemat/tachikoma), [sinsoku/tachikoma_ai](https://github.com/sinsoku/tachikoma_ai) で毎週アップデート

![tachikoma_ai.png](https://qiita-image-store.s3.amazonaws.com/0/30459/143ad12b-4e15-bf23-9b43-665a13ae4715.png)

---

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

1. beta, pre のバージョンがないか確認
  - gem 'rspec', '>= 3.5.0.beta3' など
1. master ブランチを確認する
  - gem 'sinatra', github: 'sinatra/sinatra' など
1. Pull Request で対応されていないか確認する
  - fork されたリポジトリを使用する
1. ソースコード読んで自分で直す

---

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

![active_decorator-rspec.png](https://qiita-image-store.s3.amazonaws.com/0/30459/05086e93-9b0a-ab1a-8a20-f5154b99353f.png)

---

## Rails guide を読んで対応

![guide.png](https://qiita-image-store.s3.amazonaws.com/0/30459/4ce1e9ae-2fad-d17e-afbb-eba7f5543945.png)

---

## 落ちたテストの修正

頑張る。


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

---

## プルリクを出す

---

## プルリクを出す

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

![rails5.png](https://qiita-image-store.s3.amazonaws.com/0/30459/c4f44dc2-f3e4-9e58-dc5d-e07651d1e71f.png)

---

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

- `s/ActiveRecord::Base/ApplicationRecord/`
- `s/env/request.env/`
- `alias_method_chain` を `Module#prepend` に修正
- ...etc

---

4.2 で変更可能なコミット

![rails5-1_mark.png](https://qiita-image-store.s3.amazonaws.com/0/30459/8520db4c-ef47-53cd-cc3a-9503c5d3991c.png)

---

cherry-pick

![rails5-1.png](https://qiita-image-store.s3.amazonaws.com/0/30459/b065dc09-d31f-7967-6e11-d25af36720ca.png)

---

マージ

![rails5-1_merged.png](https://qiita-image-store.s3.amazonaws.com/0/30459/92badc61-22af-7a12-bf90-e173e85f4e91.png)

---

残りコミット

![rails5-2_mark.png](https://qiita-image-store.s3.amazonaws.com/0/30459/cc9b1a2f-d0c7-1a70-d4dc-ca0fa21d74c8.png)

---

リベース

![rails5-2_rebased.png](https://qiita-image-store.s3.amazonaws.com/0/30459/34222adb-c23b-c03a-c232-4903052bf33d.png)

---

![rc1.png](https://qiita-image-store.s3.amazonaws.com/0/30459/03caf5a6-d38d-6af8-2446-307864687a79.png)

---

## 小さいプルリクの利点

- 各プルリクがレビューしやすい
- コンフリクトを避けられる
- 業務の合間に少しずつ進められる

---

## RC で動かしてみる

---

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

![rc1_apr.png](https://qiita-image-store.s3.amazonaws.com/0/30459/5835c498-317e-da1b-d13e-ae85c63a28e1.png)

---

## rc1 で動作確認が完了

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

---

## 社内で相談

- 大きな変更が少ない
  - API モード未使用
  - ActionCable 未使用
  - puma 未使用
- [rails](https://github.com/rails/rails) にヤバそうな issue がなかった
- 変な事が起きたらバージョン戻そう

---

![rc1_merged.png](https://qiita-image-store.s3.amazonaws.com/0/30459/7d1b661f-f3a7-6dd9-4015-477240dfdaf0.png)

---

## マージしちゃった :laughing:

---

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

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

---

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

![or_method.png](https://qiita-image-store.s3.amazonaws.com/0/30459/6e7b3c0c-2354-f41e-2cda-aff43c7e8e01.png)

---

## 5.0.0 のリリースまで

---

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

![rc2.png](https://qiita-image-store.s3.amazonaws.com/0/30459/6a02c547-88c6-dd30-d997-33a62b8ef305.png)

---

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

![watch_5_0_stable.png](https://qiita-image-store.s3.amazonaws.com/0/30459/6561767d-7e5b-3e24-1bd8-2e73a7dcc40d.png)

---

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

![5_0_0_release.png](https://qiita-image-store.s3.amazonaws.com/0/30459/a5457ebd-4e10-4cc1-89d5-e4cceea6ba35.png)

---

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

![turbolinks_bomb.png](https://qiita-image-store.s3.amazonaws.com/0/30459/9a0dd4ef-c0af-fa43-571d-13542b113cb0.png)

---

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

![merged.png](https://qiita-image-store.s3.amazonaws.com/0/30459/44c0154a-049a-67b2-2f5f-468b77beeff3.png)

---

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

---

## その方が面白いから！ :satisfied:

---

## 真面目な理由

- OSS に貢献できるチャンス
- 他の Rails エンジニアのアップグレードのため
- 会社のブランディング
  - 採用、PV に繋がるかも？

---

## まとめ

---

## まとめ

- Rails5 は少しずつ対応できる
  - 弊社の技術ブログをご活用ください
- OSS に貢献できるチャンス
- Rails6 は、会場の誰か頼む

---

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