Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

毎日gemをアップグレードする生活

551 views

Published on

表参道.rb #40

Published in: Internet
  • Be the first to comment

  • Be the first to like this

毎日gemをアップグレードする生活

  1. 1. 毎日gemをアップグレードする生活 2018/11/08(木) 表参道.rb #40
  2. 2. 表参道.rb #40 🎉
  3. 3. 自己紹介 ● Twitter: 神速(@sinsoku_listy) ● GitHub: sinsoku (@sinsoku) ● 会社: 六本木の某社 ● 副業: 株式会社grooves @sinsoku_listy @sinsoku
  4. 4. Railsのアップグレードの手順 1. テストをちゃんと書いておく 2. まずは他gemをアップグレードする 3. 本命の “rails” gemをアップグレードする 4. 動作確認する 5. 「たぶん動くと思うから、リリースしようぜ」
  5. 5. Railsのアップグレードの手順 1. テストをちゃんと書いておく 2. まずは他gemをアップグレードする ← これ 3. 本命の “rails” gemをアップグレードする 4. 動作確認する 5. 「たぶん動くと思うから、リリースしようぜ」
  6. 6. 残念ながら... ● 泥臭いアップグレードの知見 ● 即効性のあるアップグレードの知見 ● 4.2 => 5.0 は昔ブログに書いたので参考に ○ 最速で Forkwell を Rails 5 にアップグレードしてみました ○ https://tech.grooves.com/entry/2016/07/01/184458 4.2 => 5.0 はv5.0.0のリリース日に終わってるので...
  7. 7. bundle updateのやりかた ● bundle updateでgemをアップグレードする ● だいたいテストが落ちる ● 理由を突き止める ○ gemの変更範囲を調べる ○ コードのdiffを読む ○ テストが通るように修正する ● 動作確認する ● テストで見つからなかった問題を調べる ○ gemの変更範囲をまた調べる ○ コードのdiffを(ry 月1だと更新されるgemは30個くらい?
  8. 8. すごく大変😥
  9. 9. 戦略的なアップグレードが必要🔨
  10. 10. メドピアさん 1. 毎月1日に自動的にbundle updateプルリクを作る 2. bundle updateの担当者を3名割り当てる 3. 全員で集まって1〜2時間で差分を全てチェック 4. 修正が必要なら修正 5. テスト環境で1週間漬ける 6. リリース https://tech.medpeer.co.jp/entry/2018/09/26/090000 の「メドピアにおけるライブラリアップデート 」から引 用。 masutaka/circleci-bundle-update-pr でプルリク作成を自動化
  11. 11. MoneyForwardさん 1. bundle updateはシェルスクリプトで実装 2. kyanny/compare_linkerでgemの比較URLを生成 3. packsaddle/ruby-saddlerでプルリクを作成 https://moneyforward.com/engineers_blog/2017/08/31/bye-tachikoma-gem/ に詳細が書かれています。 bundle update部分を色々と弄りやすくするため、あえてシェルスクリプトを使ってい るっぽい? アップグレード頻度や作業時間に関する記載は無かったので詳細は不明。
  12. 12. grooves 1. 毎日自動的にbundle updateプルリクを作る 2. 定時になって、まずレビューする ○ 定時にプルリクが作られているようにcronを設定してる 3. 他プルリクと同じようにレビューする ○ テストが通っているか? ○ CHANGELOGに変なのが無いか? ○ 関連する機能が壊れていないか? 4. マージすると自動デプロイされる sinsoku/bundler-diffを使って比較URLとプルリク作成を自動化
  13. 13. bundler-diffを使ったプルリクのイメージ
  14. 14. 毎日のアップグレードをする利点 ● 差分を調べる範囲が小さく、短時間で終わる ● 落ちたテストの原因究明が楽 ● 危険なgemが分かるようになる ○ 頻繁に変わるaws-sdkとかはあまり注意しなくても良い ○ テスト通っていればdevelopment, testは基本的にOK ○ OAuth系は危険(minorでログイン不可になったのは忘れない) ● gemの機能、実装を覚える ○ gemの用途を少しずつ把握できる ○ 知らなかったオプションを発見できる ○ 実装を知っているとgemにパッチを当てやすくなる
  15. 15. モチベーション的な話 ● gemもプロダクトの一部 ● 世界中の人がgem(プロダクト)を直してくれる ○ しかも無償で💰 ● gemの改善も早くレビュー&マージして顧客に届けたい ● 微妙な変更はバージョン固定すればいい ● 最新verを使うとパッチ送るチャンスが増える ○ 転職するときのアピールになるかも? ○ ぜひForkwellで
  16. 16. sinsoku/bundler-diffは簡単に試せるので是非 $ gem install bundler-diff $ cd <proj_dir> $ bundle update $ bundle diff
  17. 17. 完全に忘れていた... ● ActiveRecord.pick ● ActiveRecord.create_or_finad_by ● pgのchange_table(bulk: true) でcommentに対応 は便利なので、興味ある人は検索してみると良いかも。
  18. 18. ご清聴ありがとうございました。

×