Findyの爆速開発を支えるPull requestの粒度
by
starfish719
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
© Findy Inc. Findyの爆速開発を⽀える Pull requestの粒度の話 1
Slide 2
Slide 2 text
© Findy Inc. 弊社の開発⽣産性 2
Slide 3
Slide 3 text
© Findy Inc. 3
Slide 4
Slide 4 text
© Findy Inc. ⼤きなPull request 4
Slide 5
Slide 5 text
© Findy Inc. 5 ⼤きなPull requestのデメリット ● topic branchの⽣存期間が⻑くなり、結果的にbase branchとの差分が⼤きくる ○ conflictの発⽣確率が⾼くなる ● 変更内容が多岐に渡るため、問題発⽣時の原因特定に時間が掛かってしまう ● revert時に余計な内容までrevertされてしまう ● レビューの質が落ちる ○ レビュワーが⾒るべき範囲が広くなるため、認知負荷が⼤きくなる ■ あとで⾒とこ、、、となりがち ● 結果的にtopic branchの⽣存期間が⻑くなる ● base branchとの差分が⼤きくなる ● conflictの発⽣確率が⾼くなる ○ 指摘内容が増え、結果的に⼿戻りが増える ● etc
Slide 6
Slide 6 text
© Findy Inc. 適切な粒度とは 6
Slide 7
Slide 7 text
© Findy Inc. 7 サイズと粒度の違い ● 関数名を変更して⼀括置換した場合 ○ 変更ファイル数は多くなるが、変更内容は⼀意になる ○ 変更内容を全て確認せずとも変更後の関数名をレビューし、CIが通ればマージしてOK ● 変更ファイル数が少ないが、データ取得‧加⼯‧描画を同じPull requestで対応した場合 ○ それぞれの処理は全く異なる内容 ○ 同じPull request内で対応してしまったため、変更内容全てを⼀度にレビューする必要がある ○ レビュワーに対する認知負荷が⼤きくなってしまう ● 変更⾏数が20⾏程度の不具合修正の際に、ついでにリファクタした内容が含まれていた場合 ○ 不具合修正に失敗していてrevertしようとした際に、ついでにリファクタした内容もrevertされて しまう ● 本質はコードの変更⾏数や変更ファイル数ではなく、変更内容そのものにある ○ 粒度が適切であれば、1⾏だけの修正でも、1万⾏の修正でも問題ない ○ 10のプルリクを1回レビューするよりも、1のプルリクを10回レビューする⽅が負担が少ない
Slide 8
Slide 8 text
© Findy Inc. 適切な粒度を維持するためのTips集 8
Slide 9
Slide 9 text
© Findy Inc. 9 タスク分解 ● コードを書く前の準備が重要 ● メリット ○ ⼯数⾒積もりの精度が上がる ○ 対応⽅針の認識を他メンバーと合わせやすくなる ○ 対応漏れに気づきやすくなり、⼿戻りの発⽣が少なくなる ○ Pull requestの粒度を適切に保つことができる ○ 他メンバーへの引き継ぎをしやすくなる ● 最初から完璧なタスクリストを作ろうとしないことがコツ ● 詳細は弊社テックブログを参照 ○ https://tech.findy.co.jp/entry/2024/05/27/090000 ○ Findyの爆速開発を⽀えるテクニック
Slide 10
Slide 10 text
© Findy Inc. 10 迷ったら⼩さく ● 最初のうちは粒度に対して悩むことが出てくる ○ もっと作り込んでからレビュー依頼を出す? ○ それとも今の段階で出す? ○ でも修正内容が⼩さすぎないか? ● 迷った時は⼩さい粒度の段階でレビュー依頼を出したほうが良い ○ Pull requestを⼤きく作って後から分解するより、⼩さく作って後から修正内容を追加する⽅が 圧倒的に楽 ● 最初は⼩さすぎても良いので、そこから⾁付けしていくようなイメージでPull requestを作成していく
Slide 11
Slide 11 text
© Findy Inc. 11 レビュー最優先 ● Pull requestの粒度が⼩さくなった場合、レビュー依頼に対して最優先で取り組む必要がある ○ レビューがボトルネックになり、結果的に開発スピードが遅くなってしまう ● 粒度が適切であれば、レビュワーが確認する内容も⼩さくなる ○ レビューに掛かる時間が短縮される ○ ⾃分の作業を⼀時中断することになったとしても、すぐまた⾃分の作業に戻ることができる ● 粒度が適切なPull requestが当たり前となれば、レビューを最優先にする習慣、⽂化が組織に根付く
Slide 12
Slide 12 text
© Findy Inc. 12 CI⾼速化 ● 粒度が⼩さくなってくると、当然ながら作成されるPull requestの数が増える ○ CIの実⾏回数も⽐例して増える ● CIの実⾏回数が増えた状態で実⾏速度が遅いと、逆に開発効率が落ちる ○ CIが遅いからPull requestの粒度も⼤きくなってしまうといったケースも⾒たことがある ● CIの⾼速化も同時に進めた⽅が良い ○ 10分切りが⽬安 ○ 5分を超えたら遅いと思ったほうがいい ● 詳細は弊社テックブログで ○ https://tech.findy.co.jp/entry/2024/09/17/090000 ○ ファインディでのGitHub Actions⾼速化の事例
Slide 13
Slide 13 text
© Findy Inc. 13 feature flag ● Pull requestの粒度は適切にしたいが、本番環境に影響を出したくないパターン ○ feature flagを使う ● ローカル環境でのみ実⾏されるようなコードにしておく ○ その状態を維持しつつbase branchにマージし続ける ○ 本番公開OKのタイミングでfeature flagを解除し、本番環境に反映 ● SaaSやライブラリを使うなどの⽅法がある ○ 今回は⼀番カンタンに導⼊できる⽅法の、コード上にフラグを埋め込んで切り替える⼿法を紹介
Slide 14
Slide 14 text
© Findy Inc. 14 feature flagのコード例 export const SampleComponent = () => { const isEnabledNewLabel = process.env.FEATURE_NEW_LABEL === 'true'; return (
{isEnabledNewLabel &&
NEW
}
Sample
); };
Slide 15
Slide 15 text
© Findy Inc. 15 topic branch base branch topic branch develop branch develop branch develop branch topic branch を作成 base branch の変更取込 base branch へmerge
Slide 16
Slide 16 text
© Findy Inc. まとめ 16
Slide 17
Slide 17 text
© Findy Inc. 17 まとめ ● Pull requestの粒度を適切に維持し続けましょう ○ レビュワー、レビュイーの両者に対して優しいPull requestを作成し続けることができるように なる ● 弊社では最重要テクニックの1つとしている ● ⽐較的カンタンに覚えることができ、コツさえ掴めば誰でも実践できる内容 ● Pull requestをサクサク作って、速攻でmergeするリズムを覚えることが重要 ● 是⾮、皆さんも試してみてください。