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

Contenu connexe

Plus de sinsoku listy

バージョン管理とGit
バージョン管理とGitバージョン管理とGit
バージョン管理とGit
sinsoku listy
 
Git天空闘技場_ハンズオン
Git天空闘技場_ハンズオンGit天空闘技場_ハンズオン
Git天空闘技場_ハンズオン
sinsoku listy
 
20101001 5分でわかるtrac pluginの作り方_slideshare
20101001 5分でわかるtrac pluginの作り方_slideshare20101001 5分でわかるtrac pluginの作り方_slideshare
20101001 5分でわかるtrac pluginの作り方_slideshare
sinsoku listy
 

Plus de sinsoku listy (18)

Search Form for Rails
Search Form for RailsSearch Form for Rails
Search Form for Rails
 
ENGINEER WORK!!
ENGINEER WORK!!ENGINEER WORK!!
ENGINEER WORK!!
 
自己修復的なインフラ -Self-Healing Infrastructure-
自己修復的なインフラ -Self-Healing Infrastructure-自己修復的なインフラ -Self-Healing Infrastructure-
自己修復的なインフラ -Self-Healing Infrastructure-
 
Rails 5.2: credentials
Rails 5.2: credentialsRails 5.2: credentials
Rails 5.2: credentials
 
Randomly Failing Specs
Randomly Failing SpecsRandomly Failing Specs
Randomly Failing Specs
 
技術的負債とリファクタリング
技術的負債とリファクタリング技術的負債とリファクタリング
技術的負債とリファクタリング
 
Git 初心者講座 by forkwell
Git 初心者講座 by forkwellGit 初心者講座 by forkwell
Git 初心者講座 by forkwell
 
Swift on Docker
Swift on DockerSwift on Docker
Swift on Docker
 
ES2015のカバレッジ計測
ES2015のカバレッジ計測ES2015のカバレッジ計測
ES2015のカバレッジ計測
 
CSSのカバレッジツール
CSSのカバレッジツールCSSのカバレッジツール
CSSのカバレッジツール
 
本当にあった怖い話 7つの幽霊 7つの成仏
本当にあった怖い話 7つの幽霊 7つの成仏本当にあった怖い話 7つの幽霊 7つの成仏
本当にあった怖い話 7つの幽霊 7つの成仏
 
Awsでwindowsゲームを動かす
Awsでwindowsゲームを動かすAwsでwindowsゲームを動かす
Awsでwindowsゲームを動かす
 
Action pack variantsの話
Action pack variantsの話Action pack variantsの話
Action pack variantsの話
 
LT_Gitのfast fowardと継続的デリバリー
LT_Gitのfast fowardと継続的デリバリーLT_Gitのfast fowardと継続的デリバリー
LT_Gitのfast fowardと継続的デリバリー
 
バージョン管理とGit
バージョン管理とGitバージョン管理とGit
バージョン管理とGit
 
Git天空闘技場_ハンズオン
Git天空闘技場_ハンズオンGit天空闘技場_ハンズオン
Git天空闘技場_ハンズオン
 
DVCSとGitの基礎
DVCSとGitの基礎DVCSとGitの基礎
DVCSとGitの基礎
 
20101001 5分でわかるtrac pluginの作り方_slideshare
20101001 5分でわかるtrac pluginの作り方_slideshare20101001 5分でわかるtrac pluginの作り方_slideshare
20101001 5分でわかるtrac pluginの作り方_slideshare
 

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