Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Trying to upgrade Rails

948c23c57a850629ff283f2a83088173?s=47 yotuba088
February 17, 2021

Trying to upgrade Rails

Trying to upgrade Rails
Railsバージョンアップをしてみて

【iCARE Dev Meetup #18】技術顧問が語る、Ruby on Rails実践開発
https://icare.connpass.com/event/201662/
でLTした資料です。

948c23c57a850629ff283f2a83088173?s=128

yotuba088

February 17, 2021
Tweet

Transcript

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

  2. ©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
  3. ©iCARE Co., Ltd All rights reserved ・iCAREの現状と取り組んだ内容 ・iCAREの課題とテストの重要性 ・Railsバージョンアップがなぜ必要か? ・具体的にどう取り組んだか

    ・gemのアップデートの仕方 ・Rails 5.0→5.2 バージョンアップの注意点 ・感想 今日のもくじ 3
  4. ©iCARE Co., Ltd All rights reserved サービスのユーザーが増加
 機能開発をしなければいけない
 
 ↓


    
 バージョンアップが後回しになっていた
 gemのアップデートが3年ほどできていない
 
 ↓
 
 人員の増加・テストのカバレッジ向上
 技術顧問前島さんと協力してバージョンアップに取り組んだ
 
 
 
 
 iCAREの現状と取り組んだ内容 4
  5. ©iCARE Co., Ltd All rights reserved Railsのバージョンアップだけでは済まない
 gemのバージョンアップも必要
 
 ↓


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


    ↓
 
 
 
 安定的な稼働・バグを潰す・開発者のサポートを受ける為
 
 新しく入った機能やgemを使うことができない
 
 サービスの信用性や採用力も非常に落ちる
 
 
 
 なぜRailsのバージョンアップをしないといけないか? 6
  7. ©iCARE Co., Ltd All rights reserved 具体的にどう取り組んだか バージョンアップでの追加・変更を確認
 
 


    dependabotの導入
 
 
 バージョンアップしたブランチでCIを通す
 
 
 gemをアップデート
 
 
 テスト環境にデプロイして動作確認
 
 7
  8. ©iCARE Co., Ltd All rights reserved 
 設定により更新があるgemのPRを作ってくれる
 
 更新が多すぎると手動で確認していく方が良いかも


    
 
 
 
 
 
 
 dependabotは便利 8
  9. ©iCARE Co., Ltd All rights reserved bundle outdatedで確認
 プロダクトで使っているgemの導入の背景から確認
 いらないものは消しつつアップデートしていく


    
 bundle update rails→依存関係で上がらない場合
 
 
 
 
 
 
 
 gemのアップデートの仕方 9
  10. ©iCARE Co., Ltd All rights reserved 
 影響範囲を見極めながらデプロイしていく
 が量が量なのでいやになることも。。。
 


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


    Ransackの例
 
 
 
 
 
 
 
 gemのアップデートの仕方 11
  12. ©iCARE Co., Ltd All rights reserved Railsガイドやコミットを確認
 
 
 


    
 
 
 
 
 
 
 
 Railsのバージョンアップによって動かなくなるコード 12
  13. ©iCARE Co., Ltd All rights reserved qiita書きました
 
 
 Railsバージョンアップ備忘録

    5.0→5.1編
 Railsバージョンアップ備忘録 5.1→5.2編
 
 
 今日は抜粋して難しかった点のみ
 
 
 
 
 
 
 
 
 Railsのバージョンアップによって動かなくなるコード 13
  14. ©iCARE Co., Ltd All rights reserved こちらのブログで紹介されているtrimのコードが
 内部APIを使っているため動かなくなる
 
 ↓


    
 内部に削除されたコードを移植
 
 
 
 
 
 
 
 Railsのバージョンアップによって動かなくなるコード(5.1) 14
  15. ©iCARE Co., Ltd All rights reserved 
 
 idがint型からbigint型に変更に
 


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


    参考・抜粋
 
 
 
 
 
 
 Railsのバージョンアップによって動かなくなるコード(5.2) 16
  17. ©iCARE Co., Ltd All rights reserved テストはとにかく大事
 
 書かないというのは後に変更する(書いた本人含)
 人間に変更する度に手作業で確認しろと言うようなもの


    リファクタリング・機能追加・バージョンアップ
 などコードが変更される機会は多い
 
 gemに詳しくなった
 
 不要なgemはいれない
 使わなくなったgemは削除
 メンテナンスされているgemを使う
 
 
 
 
 感想 17
  18. ©iCARE Co., Ltd All rights reserved Rails自体への興味が湧く→下記2冊もおすすめです
 
 
 


    
 
 
 
 
 
 
 
 
 今後のRailsがどうなるかはトリの前島さんのLTをお楽しみに
 
 終わりに 18