ひとことで言うと#
全員が1つのメインブランチ(trunk/main)に頻繁にコミットし、長寿命のブランチを作らないブランチ戦略。フィーチャーフラグと自動テストを組み合わせて、常にデプロイ可能な状態を保つ。
押さえておきたい用語#
- トランク(Trunk)
- すべての開発者がコミットする1つのメインブランチのこと。Git では
mainやmasterに相当する。常にデプロイ可能な状態を維持する。 - フィーチャーフラグ(Feature Flag)
- 未完成の機能をmainにマージしてもユーザーには見せないようにするスイッチを指す。コード内のif文やLaunchDarkly等のツールで実装する。
- 短命ブランチ(Short-Lived Branch)
- mainから分岐して1〜2日以内にマージされるブランチのこと。トランクベース開発ではブランチの寿命を極力短くする。
- CI/CD
- コードの変更を自動でビルド・テスト・デプロイする継続的インテグレーション / 継続的デリバリーである。トランクベース開発の成否を左右する前提条件。
トランクベース開発の全体像#
こんな悩みに効く#
- featureブランチが長期化して、マージのたびに大量のコンフリクトが発生する
- リリースまでのリードタイムが長く、フィードバックループが遅い
- Gitflowの運用が複雑すぎて、チームが混乱している
基本の使い方#
ブランチの寿命を1〜2日に制限する。
- mainから分岐し、短いPRで頻繁にマージする
- 1つのPRは数時間〜1日で完了するサイズにする
- 大きな機能は小さなPRに分割して段階的にマージする
ポイント: 「PRが小さすぎる」ことはほぼない。大きすぎることが問題。
未完成の機能をmainにマージしても、ユーザーには見せない仕組みを作る。
- フィーチャーフラグで機能の有効/無効を切り替える
- 完成したらフラグをONにして全ユーザーに公開
- 段階的ロールアウト(カナリアリリース)にも使える
ポイント: フィーチャーフラグはコードのif文で実装するか、LaunchDarkly等のツールを使う。
mainにマージするたびに自動でテスト・デプロイが走る環境を作る。
- すべてのPRでCI(ビルド+テスト)が必須
- mainへのマージをトリガーにステージング→本番へ自動デプロイ
- テストカバレッジを高く保つ(mainが常にデプロイ可能であるために必須)
ポイント: CI/CDの品質がトランクベース開発の成否を分ける。
具体例#
状況: 従業員60名のBtoB SaaS企業、エンジニア18名。Gitflow運用でfeatureブランチの平均寿命が12日。マージコンフリクトの解消に週あたりチーム合計15時間を消費。リリースは月1回。
移行ステップ:
- フィーチャーフラグ基盤(LaunchDarkly)を導入
- 「ダッシュボード刷新」をフィーチャーフラグ付きで開発
- 日々のPR: 「新しいグラフコンポーネントの追加」(フラグOFFでmainにマージ)
- 翌日のPR: 「データ取得APIの追加」(フラグOFFでmainにマージ)
- 全パーツが揃ったら、フィーチャーフラグをONにして公開
| 指標 | Before(Gitflow) | After(トランクベース) |
|---|---|---|
| ブランチ平均寿命 | 12日 | 0.8日 |
| マージコンフリクト解消 | 週15時間 | 週0.5時間 |
| リリース頻度 | 月1回 | 日次 |
| リリースリードタイム | 6週間 | 2日 |
コンフリクト解消に費やす時間、週15時間→0.5時間。ブランチ寿命を12日から0.8日に縮めただけでこの差がつく。リリース頻度も月1回から日次に変わった。
状況: MAU 500万人のWebサービス。エンジニア100名、15チーム。各チームが独自のfeatureブランチを持ち、「インテグレーション地獄」(全チームのブランチをマージする週末作業)が常態化。リリースは隔週。
導入の3段階:
- Phase 1: CIパイプラインを強化(テスト実行時間を45分→8分に短縮)
- Phase 2: フィーチャーフラグ運用ルールを標準化
- Phase 3: 全チームのブランチ寿命を段階的に短縮(2週間→3日→1日)
| 指標 | Before | After(6ヶ月後) |
|---|---|---|
| ブランチ平均寿命 | 14日 | 1.2日 |
| 週末インテグレーション作業 | 毎回8時間 | 廃止 |
| リリース頻度 | 隔週 | 1日平均4.2回 |
| リリース起因障害 | 月8件 | 月2.1件 |
| デプロイから問題検知まで | 平均3日 | 平均35分 |
リリース起因障害、月8件→2.1件。問題検知まで3日→35分。100人規模でもトランクベース開発は機能する——ただしCI/CDの高速化とフィーチャーフラグの標準化が前提。
状況: 従業員35名の地方SIer。受託開発でクライアント向けの業務システムを構築。エンジニア10名がGitflowで運用していたが、develop→main のマージで毎回半日〜1日のコンフリクト解消作業が発生。納品スケジュールが常にギリギリ。
段階的導入:
- まずブランチ寿命を「1週間→3日」に短縮(フィーチャーフラグなし)
- 3日以上かかるタスクは設計段階で分割する習慣を定着
- CI(GitHub Actions)を導入し、PR時の自動テストを必須化
| 指標 | Before | After |
|---|---|---|
| ブランチ寿命 | 平均7日 | 平均2.5日 |
| コンフリクト解消 | デプロイ日に半日 | ほぼゼロ |
| 納品遅延率 | 40%のプロジェクト | 8%のプロジェクト |
| 受入テストでのバグ | 平均12件/プロジェクト | 平均4件/プロジェクト |
納品遅延率40%→8%。フィーチャーフラグなしでも、ブランチ寿命を短縮するだけでこの改善が得られた。副産物として「タスクを小さく分割する」習慣がチーム全体の設計力を底上げしている。
やりがちな失敗パターン#
- フィーチャーフラグなしで始める — 未完成の機能がmainに入ってユーザーに見えてしまう。フィーチャーフラグの仕組みを先に整備してから移行する
- テストが不十分なままmainにマージする — mainが壊れて全員の作業がブロックされる。CI必須+テストカバレッジの基準を設ける
- フィーチャーフラグを消し忘れる — 公開済みの機能のフラグがコードに残り続ける。フラグの棚卸しを定期的に行い、不要なフラグは削除する
- PRを小さくするスキルを教えない — 「小さいPRにしろ」と言うだけで方法を教えないと、チームが混乱する。タスク分割のワークショップやペアプロでスキルを共有する
まとめ#
トランクベース開発は 「常にmainをデプロイ可能に保つ」 というシンプルな原則に基づくブランチ戦略。Gitflowより運用がシンプルで、CI/CDとの相性が抜群。ただし、フィーチャーフラグと高品質な自動テストが前提条件。まずはブランチの寿命を 「1週間→3日→1日」 と段階的に短くするところから始めよう。