Gitフロー vs. トランクベース開発
Table of Contents
概要
| Gitフロー | トランクベース開発 | |
|---|---|---|
| ブランチモデル | main、develop、feature、release、hotfix | 単一のmainブランチ(trunk)と短命のfeatureブランチ |
| 統合の頻度 | 低頻度、多くの場合featureやリリースの終わりに実施 | 継続的インテグレーション、1日に複数回 |
| 複雑さ | 複数のブランチとマージにより複雑さが高い傾向 | ブランチが少なくマージがシンプルなため複雑さは低い |
| リリースプロセス | 複数のブランチにより複雑になる可能性あり | 単一のブランチでシンプル |
| 共同作業 | 長命なブランチとマージコンフリクトの可能性につながる | シンプルなためマージコンフリクトを削減 |
| 使用例 | 明確に定義されたリリースサイクルを持つ大規模チームとプロジェクト | 迅速な開発とデプロイが必要な小規模チームとプロジェクト |
| 長所 | 開発ステージの明確な分離、リリース管理が容易 | より速い開発サイクル、マージコンフリクトの削減、継続的インテグレーションの促進 |
| 短所 | マージコンフリクトにつながる可能性、遅い開発サイクル、より複雑なブランチ戦略 | 大規模チームにとっては合わない場合がある、短命なブランチを維持するためのルールが必要 |
Gitフロー
GitフローはVincent Driessenによって作成されたGitのブランチモデルです。プロジェクトリリースを中心に設計された厳格なブランチ戦略を定義しています。Gitフローの主要なブランチは以下の通りです:
main: 常に最新のプロダクションリリース状態を反映するメインブランチ。develop: 最新の開発状況が反映されるブランチ。featureの統合ブランチとして機能します。feature/*: 新機能を開発するためにdevelopから作成されるブランチ。featureが完成すると、developにマージされます。release/*: 新しいリリースを準備する際にdevelopから作成されるブランチ。最終的なバグ修正やリリースノートの準備を可能にします。準備ができると、mainとdevelopの両方にマージされます。hotfix/*: プロダクションリリース後の重要な問題に迅速に対処するためにmainから作成されるブランチ。hotfixが完了すると、mainとdevelopの両方にマージされます。
トランクベース開発
トランクベース開発は、すべての開発者が単一のブランチで作業するソフトウェア開発戦略で、そのブランチは多くの場合"trunk"または"main"と呼ばれます。このモデルでは、開発者は短命のfeatureブランチを作成し、それを頻繁に(多くの場合1日に複数回)trunkにマージします。トランクベース開発の主要な原則には以下が含まれます:
- 単一ブランチ: すべての開発が単一のブランチで行われ、複数のブランチを管理する複雑さが軽減されます。
- 継続的インテグレーション: 開発者は頻繁にtrunk (main)に変更を統合し、コンフリクトを早期に特定して解決するのに役立ちます。
- 短命のFeatureブランチ: featureブランチが使用される場合、それらは短命であり、分岐を最小限に抑えるためにできるだけ早くtrunkにマージされます。
- 自動テスト: 継続的インテグレーションは、変更がビルドを壊したりバグを導入したりしないことを保証するために、自動テストと組み合わせられることがよくあります。
- リリースプロセス: リリースは通常trunkから行われ、feature flagを使用して新機能がプロダクション準備完了になるまでその可視性を制御することができます。