コンテンツにスキップ

ブランチ戦略

この章では、チーム開発で使われる代表的なブランチ戦略と、プロジェクトに合った戦略の選び方を学びます。

ブランチ戦略は、チームがどのようにブランチを作成・管理・マージするかのルールです。適切な戦略を選ぶことで、開発の効率化とコードの品質維持が可能になります。

  1. 混乱の防止: 誰が何をしているか明確に
  2. 品質の維持: 適切なレビューとテストの確保
  3. リリース管理: 計画的なデプロイが可能に
  4. トラブル対応: 問題発生時の対処が明確に

2010年にVincent Driessenが提唱した、最も有名なブランチモデルです。

main(本番)
└─ develop(開発統合)
├─ feature/xxx(機能開発)
├─ release/v1.0(リリース準備)
└─ hotfix/xxx(緊急修正)
ブランチ役割ライフサイクル
main本番環境と同期永続
develop開発の統合ブランチ永続
feature/*機能開発短期(PR後削除)
release/*リリース準備短期(リリース後削除)
hotfix/*緊急バグ修正短期(修正後削除)
1. feature ブランチを develop から作成
2. 機能を開発してコミット
3. develop にPR → レビュー → マージ
4. リリース時に release ブランチを作成
5. テスト・バグ修正
6. main と develop にマージ
7. main にタグを付けてデプロイ
メリットデメリット
厳格なリリース管理複雑で学習コストが高い
本番環境の安定性ブランチが多くなりがち
緊急対応のフローが明確CI/CDとの相性がやや悪い
  • 定期リリース(月1回など)のソフトウェア
  • 複数バージョンの並行サポート
  • 大規模チームでの開発

GitHubが提唱する、シンプルなブランチモデルです。

main(本番)
├─ feature-a
├─ feature-b
└─ bugfix-c
  1. main は常にデプロイ可能な状態
  2. 新しい作業は main からブランチを作成
  3. 定期的にリモートにプッシュ
  4. フィードバックが欲しいときにPRを作成
  5. マージは必ずPRレビュー後
  6. マージ後すぐにデプロイ
1. main からブランチを作成
2. 作業してコミット・プッシュ
3. PRを作成
4. レビュー・修正
5. マージ
6. 自動デプロイ
メリットデメリット
シンプルで理解しやすい複雑なリリース管理には不向き
CI/CDとの相性が良い大規模チームでは混乱の可能性
素早いデリバリーが可能本番の安定性に注意が必要
  • Webサービス(継続的デプロイ)
  • 小〜中規模チーム
  • アジャイル開発

Google や Facebook が採用する、main(trunk)を中心としたモデルです。

main(trunk)
├─ short-lived-branch-a(数時間〜数日)
└─ short-lived-branch-b
  1. 短命ブランチ: 1〜2日以内にマージ
  2. 小さなPR: レビューしやすいサイズ
  3. フィーチャーフラグ: 未完成機能を本番に含める
  4. 頻繁なマージ: 1日に何度もマージ
1. main から短命ブランチを作成
2. 小さな単位で開発
3. 1〜2日以内にPR・マージ
4. フィーチャーフラグで機能を制御
5. 完成したらフラグを有効化
// 未完成機能を隠す
if (featureFlags.newCheckout) {
showNewCheckout();
} else {
showOldCheckout();
}
メリットデメリット
マージコンフリクトが少ないフィーチャーフラグの管理が必要
継続的インテグレーションチームの成熟度が求められる
素早いフィードバック自動テストの充実が前提
  • 大規模Webサービス
  • 成熟したエンジニアリング組織
  • 高頻度デプロイ環境
項目Git FlowGitHub FlowTrunk Based
複雑さ
ブランチ数多い少ない最小限
リリース頻度低〜中非常に高
チームサイズ大規模向け小〜中規模成熟チーム
学習コスト高い低い中程度
Q: リリースは定期的?(週1回以下)
├─ Yes
│ Q: 複数バージョンのサポートが必要?
│ ├─ Yes → Git Flow
│ └─ No → GitHub Flow(release ブランチ付き)
└─ No(継続的デプロイ)
Q: チームの成熟度は?
├─ 高い(自動テスト充実、経験豊富)→ Trunk Based
└─ これから → GitHub Flow

GitHub Flow をベースに、リリース用ブランチを追加:

main
├─ feature/xxx
└─ release/v1.0(リリース前の最終調整)

develop ブランチを省略:

main
├─ feature/xxx
├─ release/v1.0
└─ hotfix/xxx

チームの CONTRIBUTING.md や Wiki に記載:

# ブランチ戦略
## ブランチ命名規則
- feature/ISSUE-123-add-login
- bugfix/ISSUE-456-fix-validation
- hotfix/critical-security-fix
## ワークフロー
1. Issue を確認
2. main からブランチを作成
3. 実装・テスト
4. PR を作成(テンプレート使用)
5. レビュー後マージ

戦略に合わせて保護ルールを設定:

Git Flow:
- main: 厳格(release/hotfix からのみマージ可)
- develop: レビュー必須
GitHub Flow:
- main: レビュー必須、ステータスチェック必須

Git Flow から GitHub Flow への移行例:

Terminal window
# 1. develop の変更を main にマージ
git checkout main
git merge develop
# 2. develop ブランチを削除
git branch -d develop
git push origin --delete develop
# 3. ブランチ保護ルールを更新
# 4. チームに周知

戦略特徴向いている組織
Git Flow厳格なリリース管理定期リリース、大規模
GitHub Flowシンプル、CI/CD向き継続的デプロイ、小〜中規模
Trunk Based超短命ブランチ成熟チーム、高頻度デプロイ
  1. シンプルに始める: 迷ったら GitHub Flow から
  2. チームに合わせる: 成熟度と規模を考慮
  3. 進化させる: 必要に応じて戦略を調整
  4. 文書化する: ルールを明文化して共有

次の章では、ブランチ命名規則について学びます。

Q1. Git Flowの永続ブランチはどれですか?

Q2. GitHub Flowの6つのルールに含まれないものはどれですか?

Q3. Trunk Based Developmentの特徴として正しいものはどれですか?