★★ 中級

09. ブランチ戦略

「どのブランチから・どのブランチへ・どのタイミングでマージするか」のチーム合意。IaC では シンプルなフロー が有利です。代表的な 3 つを比較。

3 つの代表戦略

GitHub FlowTrunk-BasedGit Flow
ブランチmain + 短命 featuremain 中心、超短命 featuremain + develop + release + hotfix + feature
リリースmain = いつでもデプロイ可main から日次デプロイrelease ブランチで安定化
長寿命ブランチmain のみmain のみmain / develop
適性SaaS / Web / 多くの場合小さなチーム高頻度デプロイパッケージ製品・固定リリース
IaC との相性△ 過剰

GitHub Flow(推奨)

GitHub 公式が提唱するシンプル戦略。ほとんどの Web サービスと IaC リポジトリはこれで足りる

main ─────────────●─────────●─────────●─→
                  ↑         ↑         ↑
       feature/A ─┘  feature/B─┘  feature/C─┘
  1. main から feature ブランチを切る
  2. commit して push、Pull Request を出す
  3. CI 通過 + レビュー承認 → main にマージ
  4. main へのマージ = リリース(CI が apply)

長所

短所

Trunk-Based Development

GitHub Flow よりさらに先進的。ブランチを 1〜2 日で消す、main へ高頻度マージ。Google や Facebook が採用。

main ─●─●─●─●─●─●─●─→ (1日に何回もマージ)
        feature/A は 1〜2日で消える

IaC でも有効。「巨大な変更を 1 PR で」より「小さく毎日 apply」の方が事故が少ない。

Git Flow(多くの IaC には過剰)

2010 年代に流行った戦略。複数の長寿命ブランチを持つ。

main      ─────●─────────●─────────●  (タグ付きリリース)
develop   ──●──┴──●──●──●┴──●──●──●┴
feature   ─┘   ┘  ┘ ┘   ┘  ┘ ┘ ┘
release         └──────●           (安定化)
hotfix              └──●           (本番修正)

IaC で何を選ぶか

結論: GitHub Flow が第一候補。Trunk-Based は熟練したチームで、Git Flow は基本選ばない。

シナリオ推奨戦略
1〜10 名のチームで継続的に運用GitHub Flow
10 名超、1 日 10+ PRTrunk-Based
OSS / 公開 moduleGitHub Flow + semver タグ
顧客環境向けに「v1.0」「v1.1」と固定リリースGit Flow(やむなく)

環境ブランチ vs 環境ディレクトリ

「dev / stg / prd ごとにブランチを作る」誘惑があるが、強く非推奨

# NG: ブランチで環境分離
main         ───────────────●──→  (これが prd)
stg          ───────●─●─●─●─→
dev          ───●─●─●─●─●─●─→

# OK: ディレクトリで環境分離(02 章)
main ─────●─●─●─●─●─→
        envs/
        ├── dev/
        ├── stg/
        └── prd/

理由:

ディレクトリ分離なら 1 PR で「dev で試 → stg → prd」を順に同じ main で apply できる。02 章参照。

推奨フロー(GitHub Flow + envs/) ① main から feature ブランチを切る → ② envs/dev/ を編集 → ③ PR で plan 確認 → ④ main にマージ → CI が dev に apply → ⑤ 同じ feature ブランチを切り直して envs/stg/ 更新 → ⑥ ⑤ と同様にマージ後 stg apply → ⑦ prd も同様。1 つの PR で 1 つの環境