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
#merpay_techtalk Feature branchを使わないFeature開発
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
@ku KUMAGAI
March 18, 2021
Technology
3
690
#merpay_techtalk Feature branchを使わないFeature開発
@ku KUMAGAI
March 18, 2021
Tweet
Share
More Decks by @ku KUMAGAI
See All by @ku KUMAGAI
GraphQLとスキーマファーストで切り開く ライドシェアの未来
ku0522a
1
1.9k
Other Decks in Technology
See All in Technology
Claude Codeの進化と各機能の活かし方
oikon48
10
2.9k
ソフトウェアアーキテクトのための意思決定術: Create Decision Readiness—The Real Skill Behind Architectural Decision
snoozer05
PRO
30
9k
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
95k
入門DBSC
ynojima
0
130
Datadog Cloud Cost Management で実現するFinOps
taiponrock
PRO
0
140
トップマネジメントとコンピテンシーから考えるエンジニアリングマネジメント
zigorou
3
540
Master Dataグループ紹介資料
sansan33
PRO
1
4.4k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.1k
AI時代にエンジニアはどう成長すれば良いのか?
recruitengineers
PRO
1
140
マルチロールEMが実践する「組織のレジリエンス」を高めるための組織構造と人材配置戦略
coconala_engineer
2
420
「ヒットする」+「近い」を同時にかなえるスマートサジェストの作り方.pdf
nakasho
0
110
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
980
Joys of Absence: A Defence of Solitary Play
codingconduct
1
300
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
130
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
30 Presentation Tips
portentint
PRO
1
250
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
290
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
770
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Transcript
1 Feature branchを使わないFeature開発 merpay Tech Talk 2021/03/18 Kentaro Kumagai @ku
2 • メルペイの開発手順のご紹介 • コンフリクトで困っていた • ブランチを作るのをやめてみた • 結果 本日の内容
3 1. Feature frameworkを生成する ./bin/init_framework.sh MerpayFooKit 2. Feature branchを作る git
checkout -b feature/foo 3. デイリーでmainブランチをマージしつつ開発 4. feature/foo ブランチでメルカリアプリをビルドしてQA メルペイでの新機能開発
4 Featureってなに? ひとつの機能のこと ひとつのFeature = ひとつのモジュール = ひとつのframework = ひとつのブランチで開発
5 Featureってなに? ひとつの機能のこと ひとつのFeature = ひとつのモジュール = ひとつのframework = ひとつのブランチで開発
6 各feature frameworkごとにそのfeatureのみ が動く単体のサンプルアプリFooKitSampleを用 意して開発 • 動作確認に必要最低限の依存framework をリンク • ビルド時間が短いので快適
FeatureごとのSampleアプリ
7
8 • コンフリクト ◦ なぜ起きるのか ▪ 共通のenumやLocalizable.stringsへの追加 ▪ 共通のコンポーネントへの機能追加 ◦
30分もかからないが毎日起きるとばかにならない (1日の5% * 開発期間) • リリース時のマージ ◦ Featureのリリースが重なるとコンフリクトの解決が大変 (になる可能性) ◦ 本来はすべてのコードがマージされている状態で QAすべき 問題
9 • 開発中featureのコードもmainのブランチにマージ • リリースビルドにはfeatureのコードを含めない ◦ バイナリサイズ ◦ 機密保持 理想
10 • コンパイル時のフラグ #if ◦ 各featureの #if がたくさんあるとコードが読めなくなりそう ◦ リリース後に取り除くのもめんどくさい
• 実行時のフラグ ◦ 上記の問題+ ◦ リリースの何ヶ月も前からバイナリに featureが含まれてしまう ◦ バイナリサイズ ブランチが嫌ならフラグを使えばいいじゃない
11 GUIのフロントエンドがありプロダクトマネージャー が管理 • Draft作成 → review → 反映 •
中身はgit
12 今回試してみた方法 リンクしなければよくないですか by yusuke0518 • Featureのコードもmainにマージしていく • リリースビルドではfeatureのframeworkをリンクしない ◦
開発はSampleアプリで進められるのでメルカリアプリにリンクしなくて も問題なし
13 1. Foo frameworkがないのを確認 2. strings Mercari 3. nm Mercari
バイナリの検証
14 バイナリ(Mach-O)の文字列定数部分にある文字列を表示 strings
15 バイナリ(Mach-O)のシンボルテーブルを表示 nm
16 Activityの定義上enumに新機能のcaseを追加する必要がある enum Activity { enum Foo { case signup
} case FooActivity } → raw valueがStringでなければ名前自体はバイナリに含まれない merpay固有の事情
17 共通のコンポーネントへの変更が必要にならない限り問題なし • 既存機能に影響が出ない拡張が大半 ◦ 影響がある変更だけこれまでどおりの branch運用 • 既存機能を意図せず変更しないようにスクリプトでチェック https://github.com/ku/warn-if-outside-of
運用してみて
18 ★ 新機能もmainのブランチにマージできてコンフリクトを最小化 ★ リリースビルドにはfeatureのコードは含まれない ◦ バイナリサイズも増えない ◦ 機密も漏れない Frameworkを分離していると可能なのでおすすめです
まとめ