Slide 1

Slide 1 text

©iCARE Co., Ltd All rights reserved Railsバージョンアップを実践してみて 1 https://twitter.com/yotuba_eng

Slide 2

Slide 2 text

©iCARE Co., Ltd All rights reserved 株式会社iCARE:正社員・バックエンドエンジニア →主にRuby on Railsに関する開発やGraphQLを使用しています。 →直近だとRailsバージョンアップ・公開APIのGraphQLでの開発 既存機能のGraphQL/Vue.jsリプレイスや新機能開発を行っています 207株式会社 :副業でお手伝いしてます →既存管理画面のGraphQL/React/TypeScriptのリプレイスを担当 文系大学卒業後、総合職で働いていましたが、プログラミングスクール に通った後、Ruby on Railsエンジニアを2年弱しております 自己紹介(2021年2月現在) 2

Slide 3

Slide 3 text

©iCARE Co., Ltd All rights reserved ・iCAREの現状と取り組んだ内容 ・iCAREの課題とテストの重要性 ・Railsバージョンアップがなぜ必要か? ・具体的にどう取り組んだか ・gemのアップデートの仕方 ・Rails 5.0→5.2 バージョンアップの注意点 ・感想 今日のもくじ 3

Slide 4

Slide 4 text

©iCARE Co., Ltd All rights reserved サービスのユーザーが増加
 機能開発をしなければいけない
 
 ↓
 
 バージョンアップが後回しになっていた
 gemのアップデートが3年ほどできていない
 
 ↓
 
 人員の増加・テストのカバレッジ向上
 技術顧問前島さんと協力してバージョンアップに取り組んだ
 
 
 
 
 iCAREの現状と取り組んだ内容 4

Slide 5

Slide 5 text

©iCARE Co., Ltd All rights reserved Railsのバージョンアップだけでは済まない
 gemのバージョンアップも必要
 
 ↓
 
 その度に人力でポチポチ、テストはできない
 Carelyだと150以上のgemを使っている
 
 ↓
 
 重要機能からランク分けして管理
 フィーチャースペックも必須
 管理画面側はテストが少なく人力で確認しないといけない
 
 
 テストの重要性とiCAREの課題 5

Slide 6

Slide 6 text

©iCARE Co., Ltd All rights reserved バージョンアップしても機能が増えるわけではない
 売り上げには繋がらない
 
 
 ↓
 
 
 
 安定的な稼働・バグを潰す・開発者のサポートを受ける為
 
 新しく入った機能やgemを使うことができない
 
 サービスの信用性や採用力も非常に落ちる
 
 
 
 なぜRailsのバージョンアップをしないといけないか? 6

Slide 7

Slide 7 text

©iCARE Co., Ltd All rights reserved 具体的にどう取り組んだか バージョンアップでの追加・変更を確認
 
 
 dependabotの導入
 
 
 バージョンアップしたブランチでCIを通す
 
 
 gemをアップデート
 
 
 テスト環境にデプロイして動作確認
 
 7

Slide 8

Slide 8 text

©iCARE Co., Ltd All rights reserved 
 設定により更新があるgemのPRを作ってくれる
 
 更新が多すぎると手動で確認していく方が良いかも
 
 
 
 
 
 
 
 dependabotは便利 8

Slide 9

Slide 9 text

©iCARE Co., Ltd All rights reserved bundle outdatedで確認
 プロダクトで使っているgemの導入の背景から確認
 いらないものは消しつつアップデートしていく
 
 bundle update rails→依存関係で上がらない場合
 
 
 
 
 
 
 
 gemのアップデートの仕方 9

Slide 10

Slide 10 text

©iCARE Co., Ltd All rights reserved 
 影響範囲を見極めながらデプロイしていく
 が量が量なのでいやになることも。。。
 
 
 
 
 
 
 
 
 gemのアップデートの仕方 10

Slide 11

Slide 11 text

©iCARE Co., Ltd All rights reserved changelogを確認
 Railsバージョン対応や破壊的な変更がないか確認する
 テスト環境にデプロイして該当部分を確認
 
 Ransackの例
 
 
 
 
 
 
 
 gemのアップデートの仕方 11

Slide 12

Slide 12 text

©iCARE Co., Ltd All rights reserved Railsガイドやコミットを確認
 
 
 
 
 
 
 
 
 
 
 
 Railsのバージョンアップによって動かなくなるコード 12

Slide 13

Slide 13 text

©iCARE Co., Ltd All rights reserved qiita書きました
 
 
 Railsバージョンアップ備忘録 5.0→5.1編
 Railsバージョンアップ備忘録 5.1→5.2編
 
 
 今日は抜粋して難しかった点のみ
 
 
 
 
 
 
 
 
 Railsのバージョンアップによって動かなくなるコード 13

Slide 14

Slide 14 text

©iCARE Co., Ltd All rights reserved こちらのブログで紹介されているtrimのコードが
 内部APIを使っているため動かなくなる
 
 ↓
 
 内部に削除されたコードを移植
 
 
 
 
 
 
 
 Railsのバージョンアップによって動かなくなるコード(5.1) 14

Slide 15

Slide 15 text

©iCARE Co., Ltd All rights reserved 
 
 idがint型からbigint型に変更に
 
 混在してしまうとFOREIGN KEY制約が貼れなくなる
 
 ↓
 
 migrationファイルを[5.0]で作成しid型のまま維持
 
 (サービス的にBtBのためidの枯渇の恐れは少ない)
 
 
 
 
 
 Railsのバージョンアップによって動かなくなるコード(5.1) 15

Slide 16

Slide 16 text

©iCARE Co., Ltd All rights reserved 昨日リリースできました!
 
 ActiveModel::Dirtyのメソッドが変更
 
 参考・抜粋
 
 
 
 
 
 
 Railsのバージョンアップによって動かなくなるコード(5.2) 16

Slide 17

Slide 17 text

©iCARE Co., Ltd All rights reserved テストはとにかく大事
 
 書かないというのは後に変更する(書いた本人含)
 人間に変更する度に手作業で確認しろと言うようなもの
 リファクタリング・機能追加・バージョンアップ
 などコードが変更される機会は多い
 
 gemに詳しくなった
 
 不要なgemはいれない
 使わなくなったgemは削除
 メンテナンスされているgemを使う
 
 
 
 
 感想 17

Slide 18

Slide 18 text

©iCARE Co., Ltd All rights reserved Rails自体への興味が湧く→下記2冊もおすすめです
 
 
 
 
 
 
 
 
 
 
 
 
 今後のRailsがどうなるかはトリの前島さんのLTをお楽しみに
 
 終わりに 18