- Git
- 技術 💻
Gitのブランチ戦略|Git Flow・GitHub Flowの違いと選び方
Gitのブランチ戦略とは、チームで「どんなブランチを作り、どのように統合し、どこからリリースするか」を決めたルールです。代表的なものに、Git Flow・GitHub Flow・GitLab Flow・トランクベース開発の4つがあります。
どれが正解というものではなく、リリースの頻度と、同時に管理するバージョンの数で向き不向きが決まります。この記事では、4つの戦略の違いを整理したうえで、チームに合った戦略の選び方、ブランチの保護ルールや命名規則、フィーチャーフラグなど、どの戦略でも役立つ運用の工夫を解説します。
4つのブランチ戦略の比較
| Git Flow | GitHub Flow | GitLab Flow | トランクベース開発 | |
|---|---|---|---|---|
| 主なブランチ | main・develop・feature・release・hotfix | main・feature | main・feature・環境ごとのブランチ(staging・productionなど) | main(trunk)と、ごく短命のブランチ |
| 複雑さ | 高い | 低い | 中 | 低い(ただし運用の成熟度が必要) |
| リリースの頻度 | 数週間〜数か月に1回 | 1日に何回でも | 環境ごとに段階的 | 1日に何回でも |
| 向いている製品 | パッケージソフト、スマホアプリ、複数バージョンを保守する製品 | Webサービス | 検証環境を経てリリースする業務システム | 大規模な継続的デプロイ |
| 前提 | リリースの準備期間がある | mainが常にリリースできる状態 | 環境ごとの確認の手順がある | 自動テストとフィーチャーフラグ |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Gitのブランチ戦略|Git Flow・GitHub Flowの違いと選び方」
Git Flow
main ●──────────────●──────────● (リリースされたバージョン)
\ / \ /
release \ ●───● \ /
\ / \ /
develop ●───●──●───●───●───●──● (開発の最新)
\ /
feature ●───● (機能ごとのブランチ)
| ブランチ | 役割 | 作成元 → 統合先 |
|---|---|---|
| main | リリースされたコード。タグでバージョンを管理 | ― |
| develop | 次のリリースに向けた開発の本流 | ― |
feature/* |
機能の開発 | develop → develop |
release/* |
リリースの準備(最終確認・軽微な修正) | develop → main と develop |
hotfix/* |
本番の緊急修正 | main → main と develop |
向いている場面:スマホアプリのようにストアの審査があるもの、パッケージソフト、複数のバージョンを並行して保守する製品など、リリースに準備期間が必要な開発です。
注意点:ブランチの種類が多く、統合の手順も複雑です。Webサービスのように頻繁にリリースする開発では、手間が大きすぎることがあります。Git Flowを提唱した作者自身も、継続的にデリバリーするWebアプリには、よりシンプルな方式を勧めています。
GitHub Flow
main ●────●────●────●────● (常にリリースできる状態)
\ / \ /
feature ●──●──● ●──●──● (プルリクエストでレビューして統合)
- mainからブランチを作る
- 作業してコミットし、pushする
- プルリクエストを作り、レビューを受ける
- CI(自動テスト)が通り、承認されたらmainに統合する
- mainに統合したら、すぐにデプロイする
ルールは「mainは常にリリースできる状態に保つ」の1つだけ、と言えるほどシンプルです。
向いている場面:Webサービスや社内ツールなど、いつでもデプロイでき、1つのバージョンだけを運用する開発です。小規模なチームや、個人開発にも向いています。
注意点:mainに統合したものがすぐにリリースされるため、自動テストとレビューの質が前提になります。検証環境で確認してからリリースしたい場合は、次のGitLab Flowの考え方を組み合わせます。
GitLab Flow
GitHub Flowに、環境(検証・本番)ごとのブランチを加えた方式です。
main ●───●───●───● (開発の最新・開発環境)
\ \
staging ●───────● (検証環境)
\ \
production ●───────● (本番環境)
mainに統合したものを、検証環境 → 本番環境の順に、ブランチを進めてリリースします。
向いている場面:業務システムのように、お客様の検証やリリースの承認の手順がある開発です。GitHub Flowの手軽さを保ちながら、段階的なリリースができます。
トランクベース開発
全員が、main(trunk)に、少なくとも1日1回以上、小さな単位で統合する方式です。ブランチを作る場合も、数時間〜1日程度のごく短命なものにします。
未完成の機能は、フィーチャーフラグで隠したままmainに統合します。これにより、長期間のブランチが生まれず、大きなコンフリクトや、統合の直前の混乱を避けられます。
向いている場面:頻繁にデプロイする大規模な開発です。ただし、充実した自動テスト、フィーチャーフラグの仕組み、小さく分けて統合する習慣が前提になるため、導入の難易度は高めです。
チームに合った戦略の選び方
| 質問 | はい → | いいえ → |
|---|---|---|
| 複数のバージョンを並行して保守する必要があるか | Git Flow | 次へ |
| ストアの審査など、リリースに準備期間が必要か | Git Flow(またはrelease ブランチを追加) | 次へ |
| 検証環境でのお客様の確認を経てリリースするか | GitLab Flow | 次へ |
| 自動テストとフィーチャーフラグが整っているか | トランクベース開発 | GitHub Flow |
迷ったら、GitHub Flowから始めるのがおすすめです。最もシンプルで、必要になったときに、releaseブランチや環境ブランチを追加していけます。最初から複雑な戦略を選ぶと、ルールを守ること自体が負担になりがちです。
どの戦略でも役立つ運用のルール
ブランチの命名規則
| 種類 | 例 |
|---|---|
| 機能の追加 | feature/123-order-csv-export |
| 不具合の修正 | fix/456-login-redirect |
| 緊急の修正 | hotfix/789-payment-timeout |
| ドキュメント | docs/update-readme |
種類/チケット番号-内容の形にすると、ブランチの一覧から、目的と関連するチケットがすぐにわかります。コミットメッセージのプレフィックス(feat・fixなど)と揃えると、さらに統一感が出ます。
ブランチの保護ルール
GitHubやGitLabでは、mainなど重要なブランチに保護ルールを設定できます。
| 設定 | 効果 |
|---|---|
| 直接のpushを禁止 | プルリクエストを経由しないと統合できない |
| レビューの承認を必須にする | 最低1人の承認が必要になる |
| CIの成功を必須にする | テストが失敗したものは統合できない |
| 強制pushを禁止 | 共有の履歴が書き換えられない |
| 削除を禁止 | 誤ってブランチを消せない |
ルールを人の注意だけで守るのではなく、仕組みで守るのがポイントです。
ブランチは短命に保つ
どの戦略でも、機能ブランチが長く生きるほど、mainとの差が開き、統合時のコンフリクトとレビューの負担が大きくなります。
- 1つのブランチは、数日以内に統合できる大きさに分ける
- 大きな機能は、「DBの変更」「API」「画面」のように段階に分けて統合する
- 長くかかる場合は、mainの変更をこまめに取り込む
フィーチャーフラグ
未完成の機能や、段階的に公開したい機能を、設定で表示・非表示を切り替えられるようにする仕組みです。
if (featureFlags.isEnabled("new-checkout")) {
showNewCheckout();
} else {
showOldCheckout();
}
- 未完成の機能を、隠したままmainに統合できる
- 一部の利用者だけに先に公開し、問題がなければ全体に広げられる
- 問題が起きたら、デプロイし直さずにすぐに元に戻せる
使い終わったフラグは、コードから削除することを忘れないようにします。残し続けると、条件分岐が増え、コードが読みにくくなります。
緊急の修正(ホットフィックス)
| 戦略 | 緊急の修正の流れ |
|---|---|
| Git Flow | mainからhotfixブランチを作り、修正後にmainとdevelopの両方に統合する |
| GitHub Flow | 通常と同じく、mainからブランチを作り、レビューを経て統合・デプロイする |
| GitLab Flow | mainで修正し、検証・本番のブランチに順に反映する(急ぐ場合は本番へ直接適用する手順も決めておく) |
緊急時の手順を、平常時に決めておくことが大切です。慌てているときほど、手順を省いて新たな問題を起こしやすくなります。
AIと一緒に開発するときの運用のコツ
AIのコーディング支援を使うと、短時間で大量のコードが生成されるため、ブランチの運用にも工夫が必要です。
- 1つの作業を、1つの小さなブランチ・プルリクエストに:AIにまとめて大きな変更をさせると、レビューが追いつかない
- AIの作業用のブランチを分ける:試行錯誤の結果は、整理してから統合する
- 保護ルールとCIを必ず設定する:AIが生成したコードも、人のコードと同じくレビューとテストを通す
- 複数のAIエージェントが並行して作業する場合は、ブランチ(またはgitの作業ディレクトリ)を分け、同じファイルを同時に変更しないように作業を割り振る
よくある質問
Q. developブランチは必要ですか? A. Git Flowでは必要ですが、GitHub Flowでは使いません。頻繁にリリースするWebサービスでは、developとmainの二重管理が負担になることが多く、GitHub Flowの方がシンプルです。
Q. 小規模なチームや個人開発では、どれを使えばいいですか? A. GitHub Flowがおすすめです。個人開発でも、mainを常に動く状態に保ち、作業はブランチで行う習慣をつけておくと、失敗したときに簡単に元に戻せます。
Q. プルリクエストの統合方法(マージ・スカッシュ・リベース)はどれがいいですか? A. チームで1つに統一することが大切です。履歴を1プルリクエスト1コミットに整理したいならスカッシュ、コミットを丁寧に分けて残したいならリベースやマージコミットが向いています。詳しくは、mergeとrebaseの違いの記事で解説しています。
Q. ブランチ戦略を途中で変えてもいいですか? A. 変えて構いません。チームの人数やリリースの方法が変われば、合う戦略も変わります。変更するときは、移行のタイミングと新しいルールをチーム全員で共有します。
まとめ
- ブランチ戦略は、ブランチの作り方・統合の仕方・リリースの仕方のルール
- Git Flow:リリースに準備期間がある・複数バージョンを保守する製品向け
- GitHub Flow:mainを常にリリース可能に保つ、シンプルな方式。迷ったらここから
- GitLab Flow:環境ごとのブランチで、検証を経て段階的にリリース
- トランクベース開発:小さく頻繁に統合。自動テストとフィーチャーフラグが前提
- どの戦略でも、命名規則・保護ルール・短命なブランチが効く
- AIと開発するときは、小さなプルリクエストとCIで品質を保つ
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Gitのブランチ戦略|Git Flow・GitHub Flowの違いと選び方」
株式会社RJCでは、Gitのようなチーム開発の基本を、実際に手を動かしながら仲間と教え合っています。こうした知識を共有しながら、一緒に成長を楽しんでいます。
株式会社RJC ― SI事業・SES事業・AI駆動開発。未経験からエンジニアに育てるのが得意な会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。