Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
トランクベース開発のすすめ
Search
Taiga Sakaguchi
January 30, 2023
Programming
0
100
トランクベース開発のすすめ
Taiga Sakaguchi
January 30, 2023
Tweet
Share
More Decks by Taiga Sakaguchi
See All by Taiga Sakaguchi
gRPC入門
taigaskg
0
180
クリーンアーキテクチャのすすめ
taigaskg
0
270
Other Decks in Programming
See All in Programming
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
testcontainers のススメ
sgash708
1
120
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
4
160
プロダクトの品質に コミットする / Commit to Product Quality
pekepek
2
760
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
730
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
0
160
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
190
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
350
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
120
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
920
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
Featured
See All Featured
RailsConf 2023
tenderlove
29
940
Product Roadmaps are Hard
iamctodd
PRO
49
11k
A Philosophy of Restraint
colly
203
16k
Typedesign – Prime Four
hannesfritz
40
2.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
KATA
mclloyd
29
14k
Transcript
トランクベース開発のすすめ Taiga Sakaguchi 1
Taiga 教員→Web エンジニア 歴3 年 バックエンドエンジニア 都内メガベンチャーに勤務 2
みなさん爆速開発できていますか? 3
テーマ : 『変更点を小さくする』 4
こんな辛みありませんか? PR の差分が大きくコンフリクトしてしまう 変更点が多くレビューアーの負担が大きい main ブランチへのマージの変更が大きくリリースが怖い ブランチのパターンが複雑で運用が辛い バグが起きた際の原因特定に時間がかかってしまう レビュー待ちが長い 5
そう、「トランクベース開発」ならね 6
トランクベース開発とは、変更点を小 さくすることで生産性を高める手法 7
機能ブランチを使った手法 機能ごとにブランチを作成し実装完了後トランク (*1) にマージする手 法 例えば、 git-flow github-flow 実装完了しマージできるまでに数日から数週間かかる *(1)
トランクとは、いわゆるmain ブランチのことです 8
機能ブランチの例 出典: https://trunkbaseddevelopment.com 9
トランクベース開発 小さな単位に分割して実装し、1 日に1 回以上トランクにマージする 手法 実装は数時間から数日以内で完了し個々の変更を頻繁にトランクに マージする。 1 日に複数回のリリース 10
トランクベース開発のブランチ 11
Four Keys ソフトウェア開発チームのパフォーマンスを示す4 つの指標 デプロイの頻度 組織による正常な本番環境へのリリースの頻度 変更のリードタイム commit から本番環境稼働までの所要時間 変更障害率
デプロイが原因で本番環境で障害が発生する割合(% ) サービス復元時間 組織が本番環境での障害から回復するのにかかる時間 12
出典: https://cloud.google.com/blog/ja/products/gcp/using-the-four-keys-to-measure-your-devops-performance 13
実現するためのポイント コードレビュー プロセスを簡略化 同期的なレビュー コーディングルール テスト&ビルド 自動テストの実行 ビルドを迅速に行う 14
トランクベース開発の Pros & Cons Pros 新機能をいち早く提供できる レビュアーの負担が軽くなる コンフリクトを抑えられる コードフリーズのような統合期 間が不要
バグの原因を特定しやすい Cons デプロイ可能な単位に作業を分 割する必要がある CI/CD 環境の整備が必要(自動 テスト・ビルド) 15
生産性 vs. 信頼性 16
生産性 with 信頼性 17
とは言っても本番に出したくないときもある 18
フィーチャーフラグ コードを書き換えることなく、動的に機能のON/OFF を切り替えシス テムの振る舞いを変更することができる手法 if featureFlg { // Do something
} else { // Do something else } 19
トランクベース開発が向いていないケ ース 明確にバージョンごとにリリースしたい場合 20
おまけ 21
Progressive Delivery Canary Release に加えて、SLO などのメトリクスを閾値として分析 しデプロイする手法 分析に通らなければ自動でロールバック 22
出典: https://static.sched.com/hosted_files/kccncna19/f2/Progressive Delivery %26 Argo Rollouts.pdf 23
出典: https://static.sched.com/hosted_files/kccncna19/f2/Progressive Delivery %26 Argo Rollouts.pdf 24
Four Keys デプロイの頻度 組織による正常な本番環境へのリリースの頻度 変更のリードタイム commit から本番環境稼働までの所要時間 変更障害率 デプロイが原因で本番環境で障害が発生する割合(% )
サービス復元時間 組織が本番環境での障害から回復するのにかかる時間 25
出典: https://cloud.google.com/blog/ja/products/gcp/using-the-four-keys-to-measure-your-devops-performance 26
参考 https://cloud.google.com/architecture/devops/devops-tech-trunk- based-development?hl=ja https://cloud.google.com/blog/ja/products/gcp/using-the-four- keys-to-measure-your-devops-performance https://ca-base-next.cyberagent.co.jp/2022/sessions/developer- productivity/ https://rheb.hatenablog.com/entry/2021/08/24/ トランクベース開 発について
27