こんにちは、かつコーチです。
チームでブランチを運用していると、「featureブランチはいつ作るのか」「本番反映のタイミングは」といった疑問が必ず出てきます。
そこで役立つのが、Git FlowやGitHub Flowといった、ブランチ運用のルールをあらかじめ決めておく考え方です。
この記事では、代表的な2つの運用モデルの違いと、どちらを選ぶべきかの判断軸を解説します。
読み終える頃には、自分のチームに合ったブランチ運用ルールを選べるようになります。
Git Flow・GitHub Flowとは?
ブランチ運用ルール=工事現場の役割分担ルール
Git Flow・GitHub Flowとは、どちらもチームでブランチをどう使い分けるかを定めた「運用ルール」のことです。
たとえるなら、これらは「工事現場の役割分担ルール」のようなものだとイメージしてください。
工事現場では、「この作業は仮設の足場で行う」「完成した部分は本体に組み込む」といった手順が、あらかじめルール化されています。
ルールがないまま各自が好き勝手に作業を進めると、どこまで工事が終わっているのか、どの部分が検査済みなのかがわからなくなってしまいます。
Git FlowやGitHub Flowは、この「どのブランチで何をするか」というルールを、あらかじめチームで統一しておくための考え方です。
なぜブランチ運用ルールが必要なのか
ルールを決めずにブランチを使っていると、「このブランチは何のために作られたのか」がわからなくなったり、リリースのタイミングが人によってバラバラになったりします。
あらかじめ運用ルールを決めておくことで、チームメンバー全員が同じ前提で作業を進められ、レビューやリリースの手順も迷わず判断できるようになります。
Git FlowとGitHub Flowの違い
Git Flow:リリース管理を厳密に行う工事計画
Git Flowは、main(本番用)・develop(開発統合用)・feature(機能開発用)・release(リリース準備用)・hotfix(緊急修正用)という、複数の役割を持つブランチを使い分ける運用モデルです。
# developから機能ブランチを作成
git switch develop
git switch -c feature/payment-integration
# 機能が完成したらdevelopにマージ
git switch develop
git merge feature/payment-integration
# リリース準備用ブランチを作成
git switch -c release/1.2.0
工事現場でいえば、「基礎工事」「配管工事」「内装工事」など、工程ごとに担当エリアと完了検査のタイミングが細かく決められているイメージです。
計画的な検査工程がある分、リリースサイクルがゆっくりなプロジェクトや、複数バージョンを並行して保守する必要があるプロジェクトに向いています。
GitHub Flow:継続的にリリースするシンプルな工事計画
GitHub Flowは、mainブランチと、そこから作るfeatureブランチだけを使う、よりシンプルな運用モデルです。
# mainから直接、機能ブランチを作成
git switch main
git switch -c feature/payment-integration
# 完成したらPull Requestを作成し、レビュー後にmainへマージ
git push -u origin feature/payment-integration
gh pr create --base main --head feature/payment-integration
工事現場でいえば、「完成した部分から順次、検査してすぐ本体に組み込んでいく」ような、スピード重視の進め方に近いイメージです。
Webサービスのように、1日に何度もリリースを行うプロジェクトや、シンプルな運用を好むチームに向いています。
比較表:どちらを選ぶべきか
| 比較項目 | Git Flow | GitHub Flow |
|---|---|---|
| ブランチの種類 | main・develop・feature・release・hotfixなど多数 | mainとfeatureのみとシンプル |
| リリース頻度 | 計画的・定期的なリリースに向く | 継続的・高頻度なリリースに向く |
| 学習コスト | ルールが多く、慣れるまで時間がかかる | ルールが少なく、すぐに始めやすい |
| 向いているプロジェクト | 複数バージョンを並行保守するソフトウェア | Webサービスなど常に最新版を提供するプロジェクト |
判断軸としては、「リリースを計画的に管理したいか」「できるだけシンプルに運用したいか」で選ぶとよいでしょう。
迷ったら、まずはシンプルなGitHub Flowから始め、複数バージョンの保守が必要になった段階でGit Flowへの移行を検討するのがおすすめです。
よくあるつまずきポイント・エラー対処
developブランチの運用ルールが曖昧なまま進めてしまった話
私が実際にGit Flowを採用したチームで経験した混乱が、これでした。
❌ Before
「Git Flowを使おう」と決めたものの、「featureはdevelopから作る」というルールをチーム内で徹底できておらず、あるメンバーがmainから直接featureブランチを作ってしまいました。
工事現場でいえば、仮設の足場(develop)を経由せず、いきなり本体(main)から作業を始めてしまったような状態です。
結果として、developとmainの間で内容がずれてしまい、どちらが最新なのか混乱してしまいました。
✅ After
改めて、ブランチ作成のルールをリポジトリのCONTRIBUTING.mdに明文化し、常にdevelopからfeatureブランチを切ることを徹底しました。
# 必ずdevelopを最新化してからブランチを作る
git switch develop
git pull origin develop
git switch -c feature/new-feature
この経験から、Git Flowのようにブランチの種類が多い運用モデルほど、ルールを文章として明文化しておくことが欠かせないと学びました。
応用・一歩先の使い方
GitHub Flowにリリースタグを組み合わせる
GitHub Flowはシンプルな分、リリースバージョンの管理機能を持たないため、mainにマージされたタイミングでタグを打ち、バージョンを記録する運用がよく併用されます。
git switch main
git pull origin main
git tag -a v1.2.0 -m "決済機能を追加"
git push origin v1.2.0
これは、工事の各工程が完了するたびに「この時点で検査完了」という記録を残しておくようなイメージです。
シンプルな運用のまま、リリース履歴だけはしっかり追跡できるようになります。
まとめ
この記事のポイント
- Git Flow・GitHub Flowとは、チームのブランチ運用を統一する「工事現場の役割分担ルール」のようなもの
- Git Flowは複数ブランチで計画的にリリース管理する運用モデル
- GitHub Flowはmainとfeatureのみのシンプルな運用モデル
- 迷ったらシンプルなGitHub Flowから始め、必要に応じてGit Flowへ移行を検討する
次に読むべき記事
ブランチ運用の考え方が身についたら、次は実際の開発でよく発生するPull Requestのコンフリクト解消を学びましょう。
「Pull Requestでのコンフリクト解消の流れ」で、複数人での編集がぶつかったときの対処法を解説しています。