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
@ku KUMAGAI
March 18, 2021
Technology
3
580
#merpay_techtalk Feature branchを使わないFeature開発
@ku KUMAGAI
March 18, 2021
Tweet
Share
More Decks by @ku KUMAGAI
See All by @ku KUMAGAI
GraphQLとスキーマファーストで切り開く ライドシェアの未来
ku0522a
0
700
Other Decks in Technology
See All in Technology
Next.js のページ遷移を全力で止める
ypresto
3
1.6k
o1のAPIで実験してみたが 制限きつすぎて辛かった話
pharma_x_tech
0
120
AI でアップデートする既存テクノロジーと、クラウドエンジニアの生きる道
soracom
PRO
2
550
なにもしてないのにNew Relicのデータ転送量が増えていたときに確認したこと
tk3fftk
2
220
ついに出た!OpenAIの最新モデル「o1」って何がすごいの?
minorun365
PRO
3
730
Analytics-Backed App Widget Development - Served with Jetpack Glance
miyabigouji
0
550
スタッフエンジニアの道: The Staff Engineer’s Path
snoozer05
PRO
44
14k
四国クラウドお遍路 2024 in 高知 オープニング
yukataoka
0
200
AWS SAW を広めたい @四国クラウドお遍路
kazzpapa3
0
230
Privacy Sandbox on Android / DroidKaigi 2024
7pairs
1
240
DuckDB雑紹介(1.1対応版)@DuckDB座談会
ktz
6
1.4k
エンジニア視点で見る、 組織で運用されるデザインシステムにするには
shunya078
1
300
Featured
See All Featured
A Tale of Four Properties
chriscoyier
155
22k
Practical Orchestrator
shlominoach
185
10k
A designer walks into a library…
pauljervisheath
201
24k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
230
17k
Speed Design
sergeychernyshev
22
430
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
28
1.6k
Raft: Consensus for Rubyists
vanstee
135
6.5k
How to train your dragon (web standard)
notwaldorf
85
5.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
354
29k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
326
21k
Facilitating Awesome Meetings
lara
49
5.9k
BBQ
matthewcrist
83
9.2k
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を分離していると可能なのでおすすめです
まとめ