Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
#merpay_techtalk Feature branchを使わないFeature開発
Search
@ku KUMAGAI
March 18, 2021
Technology
3
670
#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
「図面」から「法則」へ 〜メタ視点で読み解く現代のソフトウェアアーキテクチャ〜
scova0731
0
340
AI時代の新規LLMプロダクト開発: Findy Insightsを3ヶ月で立ち上げた舞台裏と振り返り
dakuon
0
210
AWS re:Invent 2025~初参加の成果と学び~
kubomasataka
0
120
子育てで想像してなかった「見えないダメージ」 / Unforeseen "hidden burdens" of raising children.
pauli
2
280
Database イノベーショントークを振り返る/reinvent-2025-database-innovation-talk-recap
emiki
0
230
コンテキスト情報を活用し個社最適化されたAI Agentを実現する4つのポイント
kworkdev
PRO
1
1.6k
5分で知るMicrosoft Ignite
taiponrock
PRO
0
390
日本Rubyの会: これまでとこれから
snoozer05
PRO
3
100
AWSを使う上で最低限知っておきたいセキュリティ研修を社内で実施した話 ~みんなでやるセキュリティ~
maimyyym
2
1.7k
AI-DLCを現場にインストールしてみた:プロトタイプ開発で分かったこと・やめたこと
recruitengineers
PRO
2
160
20251218_AIを活用した開発生産性向上の全社的な取り組みの進め方について / How to proceed with company-wide initiatives to improve development productivity using AI
yayoi_dd
0
130
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
1
630
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.6k
KATA
mclloyd
PRO
33
15k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
How STYLIGHT went responsive
nonsquared
100
6k
Context Engineering - Making Every Token Count
addyosmani
9
530
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
980
YesSQL, Process and Tooling at Scale
rocio
174
15k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
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を分離していると可能なのでおすすめです
まとめ