Gitフロー

英語名 Gitflow
読み方 ギットフロー
難易度
所要時間 導入に1〜2日
提唱者 ヴィンセント・ドリーセン
目次

ひとことで言うと
#

main、develop、feature、release、hotfixの5種類のブランチを使い分けて、機能開発からリリースまでの流れを体系的に管理するGitのブランチ戦略。リリースサイクルが明確なプロジェクトで特に効果的。

押さえておきたい用語
#

押さえておきたい用語
developブランチ
次のリリースに向けた開発統合ブランチのこと。すべてのfeatureブランチはここから分岐し、ここにマージされる。
featureブランチ
1つの機能を開発するためにdevelopから分岐する短命のブランチのこと。完了後はdevelopにマージして削除する。
releaseブランチ
リリース前のバグ修正やバージョン番号更新を行うリリース準備用ブランチのこと。developから分岐し、完了後はmainとdevelopの両方にマージする。
hotfixブランチ
本番環境の緊急バグを修正するためにmainから直接分岐するブランチのこと。修正後はmainとdevelopの両方にマージし、バージョンタグを付与する。

Gitフローの全体像
#

Gitflow:5種類のブランチによるリリース管理
長期ブランチmain本番リリース済みコードdevelop次リリースの統合ブランチ常に存在し続ける直接コミット禁止短命ブランチ(開発)feature/*develop → develop1機能1ブランチrelease/*develop → main + developバグ修正のみ・新機能禁止短命ブランチ(緊急)hotfix/*main → main + develop本番の緊急バグ修正専用修正後バージョンタグ付与「本番が壊れている」時のみ使用Gitflowが向くプロジェクトリリースサイクルが週〜月単位で明確複数バージョンの並行サポートが必要モバイルアプリ・パッケージソフトなど日次デプロイのWebアプリにはトランクベース開発を検討
Gitflowの開発〜リリースフロー
1
feature作成
developから分岐し機能開発
2
developにマージ
レビュー後に統合しfeature削除
3
release作成
リリース準備・バグ修正のみ
4
mainにマージ
タグ付与・developにも反映
hotfixは即対応
mainから分岐→修正→main+developへ

こんな悩みに効く
#

  • ブランチの運用ルールがなく、マージの混乱が頻発する
  • リリース準備中に新機能の開発と混ざってしまう
  • 本番で緊急バグが見つかったとき、修正の手順が定まっていない

基本の使い方
#

ステップ1: main と develop ブランチを用意する

長期的に存在する2つのブランチを設定する

  • main: 本番リリースされたコードのみが入る。常にデプロイ可能
  • develop: 次のリリースに向けた開発の統合ブランチ
  • mainには直接コミットしない

ポイント: mainのすべてのコミットにはバージョンタグを付ける。

ステップ2: feature ブランチで機能開発する

新機能はdevelopから分岐したfeatureブランチで開発する

  • 命名規則: feature/ユーザー認証 feature/検索機能 など
  • developから分岐し、完了したらdevelopにマージ
  • 1機能1ブランチ。完了後はブランチを削除

ポイント: featureブランチが長期化するとマージが困難になる。できるだけ短く保つ。

ステップ3: release ブランチでリリース準備する

リリース前のバグ修正やバージョン番号更新はreleaseブランチで行う

  • developから分岐: release/v1.2.0
  • バグ修正のみ行い、新機能は入れない
  • 完了したらmainとdevelopの両方にマージ

ポイント: releaseブランチが存在する間も、developでは次のリリースの開発を続けられる。

ステップ4: hotfix ブランチで緊急修正する

本番の緊急バグはmainから直接hotfixブランチを切って対応する

  • mainから分岐: hotfix/ログインバグ修正
  • 修正完了後、mainとdevelopの両方にマージ
  • mainにバージョンタグを付ける

ポイント: hotfixは「本番が壊れている」緊急時のみ使う。通常のバグ修正はfeatureブランチで。

具体例
#

例1:8人チームのモバイルアプリ開発でリリース事故をゼロにする

Before: ブランチ運用ルールがなく、全員がmainに直接プッシュ。月1回のリリース前に「どのコミットまでがリリース対象か」が分からず、リリース延期が年4回発生。未完成の機能がストアに出てしまい、1つ星レビューが急増

Gitflow導入: developを統合ブランチとし、featureブランチでの開発を必須化。リリース2週間前にreleaseブランチを作成し、バグ修正のみ許可。

After: リリース対象が明確になり、リリース延期が年4回→0回に。未完成機能の混入事故もゼロ。releaseブランチで安定化に専念できるため、リリース後の緊急パッチが月2回→月0.3回に激減。

例2:並行開発中のhotfixで本番クラッシュを30分で復旧する

状況: v2.0のrelease準備中(releaseブランチ存在)に、本番v1.9で決済処理のクラッシュバグが発覚。同時にv2.1向けのfeatureも3本開発中。

hotfixフロー: mainからhotfix/payment-crashを作成→原因特定→修正→テスト→mainにマージしてv1.9.1をリリース→developにもマージ。所要時間30分

効果: releaseブランチの作業は中断不要。3本のfeature開発にも影響なし。以前はhotfixの手順がなく、mainへの直接コミットでさらなるバグを生んでいた(年3回の二次障害)。Gitflow導入後は二次障害ゼロ

例3:releaseブランチ運用で品質ゲートの通過率を95%に上げる

Before: developから直接mainにマージしてリリースしていたため、QAチームのテスト期間が確保できず、リリース後のバグ報告が月平均12件

release運用導入: リリース1週間前にdevelopからreleaseブランチを作成。QAチームがreleaseブランチでテスト→バグ修正→再テストのサイクルを回す。その間developでは次の開発を継続。

After: リリース前に平均8件のバグを事前に検出・修正。リリース後のバグ報告が月12件→月2件に減少。品質ゲートの通過率が60%→95%に向上。QAチームの残業時間も月30時間→月8時間に削減。

やりがちな失敗パターン
#

  1. featureブランチが長期化する — 2週間以上developとマージしないと、マージコンフリクトが地獄になる。最低でも1日1回developを取り込む(rebaseまたはmerge)
  2. releaseブランチで新機能を入れてしまう — 「ついでにこの機能も」とreleaseに混ぜるとリリースが遅延する。releaseではバグ修正のみ。新機能はdevelopで
  3. hotfixをdevelopにマージし忘れる — mainだけに反映し、developに入れ忘れて次のリリースで同じバグが復活する。hotfixは必ずmainとdevelopの両方にマージする
  4. 日次デプロイのWebアプリにGitflowを適用する — リリースサイクルが短いプロジェクトではreleaseブランチが形骸化し、無駄なオーバーヘッドになる。日次デプロイならトランクベース開発を検討する

まとめ
#

Gitflowはリリースサイクルが明確なプロジェクト(モバイルアプリ、パッケージソフト等)に適したブランチ戦略。5種類のブランチの使い分けを覚えれば、並行開発とリリース管理がスムーズになる。ただし、継続的デリバリーを重視するWebアプリではトランクベース開発の方が向いている場合もある。プロジェクトの特性に合わせて選ぼう