メインコンテンツへスキップ

CI/CDにおけるGit FlowとTrunk-Basedの比較

効果的なCI/CDワークフローを実現するために、Git FlowとTrunk-Based Developmentの違いを、それぞれの長所と短所に焦点を当てて解説します。

CI/CD における Git Flow と Trunk-Based の比較 Capgo ブログ イラスト

選択に迷う Git Flow Git Flow と Trunk-Based Development (TBD) の選択は、CI/CD ワークフローに大きな影響を与えます。主な違いを簡単にまとめました:

  • Git Flow:構造化され、バージョン管理が施された環境に最適です。 main, develop, feature, releaseや hotfixなどの複数のブランチを使用します。大規模チーム、リリースサイクルが緩やかな場合、厳格なQAプロセスに適しています。
  • トランクベース開発:単一のメインブランチと短期間のフィーチャーブランチに焦点を当てます。小規模チーム、高速なリリース、強力な自動テストに適しています。

簡単比較:

項目 Git Flow トランクベース開発
ブランチの複雑さ 複数の長期ブランチ 単一ブランチ、短命ブランチ
リリース頻度 スケジュールされたリリース 継続的デプロイメント
チーム規模 大規模チーム 小〜中規模チーム
テスト サイクル末のテスト 自動テスト
デプロイリスク 段階的リリースで低減 頻繁な更新で高くなる
ロールバック より遅い 高速

要点: 構造化された、より低速なワークフローには Git Flow を、スピードと柔軟性には TBD を使いましょう。どちらも成功するには堅牢な CI/CD パイプラインが不可欠です。

29 - GitFlow vs. Trunk-Based Development: 管理…

Git Flow ワークフローの基本

Git Flow

Git Flow では、5 種類のブランチを使って開発を管理します: main, develop, feature, リリースや hotfix。この構造により、リリース管理と並行開発を効果的に行えます。

Git Flow のブランチ構造

ブランチの種類 目的 マージ先
メイン 本番環境向けの code を保持 該当なし
Develop 機能の統合に使用し、機能ブランチのベースとなる 該当なし
機能 個別の機能開発に使用。develop から作成される develop
リリース 最終テストとバージョン管理の準備に使用。develop から作成される main & develop
Hotfix 本番環境の問題を迅速に修正; main から作成 main & develop

Git Flow の利点

  • 複数の機能を、コンフリクトを起こすことなく同時に開発できます。
  • リリースブランチは最終テストとバージョン準備のための専用スペースを提供し、 develop ブランチを継続的な作業用に開いたままにできます。
  • Hotfix ブランチを使用すれば、他の開発タスクを中断せずに本番環境の問題に迅速に対処できます。

Git Flowのデメリット

  • ブランチ管理の複雑さ: アクティブなブランチが複数あると、マージが難しくなる場合があります。
  • デプロイの遅延: 正式なリリースプロセスでは、よりシンプルなワークフローに比べてデプロイが遅くなる可能性があります。
  • メンテナンス負荷の増加各ブランチに個別のパイプライン設定が必要になり、メンテナンス負荷が増加します。

このワークフローは、厳格なバージョン管理、複数のリリーストラック、または規制への準拠が必要なプロジェクトに最適です。次は、このアプローチがトランクベース開発の簡素化された手法とどのように比較されるかを検討します。

トランクベース開発の基礎

トランクベース開発(TBD)は、通常トランクまたはmainと呼ばれる単一のメインブランチを中心に回ります。このアプローチは、DevOpsプラクティスや継続的インテグレーション(CI)と密接に関連しています。

トランクベースのブランチ構造

典型的なTBDワークフローでは、これらのブランチタイプに遭遇します:

ブランチの種類 目的 寿命
Main/Trunk 本番環境対応のcodeを含む中央ブランチ 永続的
フィーチャーブランチ 個別の変更用の一時的なブランチ 短命
リリースブランチ リリース前の最終調整に使用 一時的

開発者はメインブランチに小さな増分変更を定期的にマージします。1日に複数回行われることも多く、これにより継続的なテストが促進され、競合の早期解決に役立ちます。

Trunk-Basedの利点

TBDは、CI/CDやDevOpsで作業するチームにいくつかの利点をもたらします:

  • マージ競合の削減:定期的なマージで競合を管理可能に保ちます。
  • より迅速なフィードバック: マージのたびに自動ビルドが実行され、バグを早期に発見できます。
  • パイプラインの簡素化: 単一のブランチにより、CI/CD 構成の複雑さが軽減されます。
  • チーム連携の向上: 共有された trunk により、全員の認識を一致させることができます。

この構造によりワークフローが効率化され、次のセクションでの Git Flow との比較につながります。

Trunk-Based の課題

TBD には強みがある一方で、チームが対処すべき課題もあります:

課題 影響 対処方法
Code の安定性 main に影響する破壊的変更のリスク 強力な自動テストを活用する
チームの調整 作業の重複が混乱を招く可能性がある Feature flag と頻繁な小規模なコミットに頼る
学習コスト 長期ブランチからの移行 トレーニングを提供し、段階的に導入する
スケーリングの問題 頻繁なマージは大規模チームを圧迫する 徹底的なcodeレビューを強制する

TBDの成功導入には、堅牢な自動テストとチーム内のオープンなコミュニケーションが不可欠です。

Git Flow vs. Trunk-Based: 直接比較

Git FlowとTrunk-Based Developmentの主要領域での比較は以下の通りです:

機能比較表

項目 Git Flow トランクベース開発
ブランチの複雑さ 複数の長期ブランチ 短期ブランチを持つ単一のメインブランチ
リリース頻度 スケジュールされたリリース 継続的デプロイメント
チーム規模 大規模チームに有効 小規模チームに適している
Code レビュープロセス ブランチマージ時の正式なレビュー 小規模で頻繁な変更の継続的レビュー
テスト要件 サイクル末のテストに注力 自動化テストへの強い依存
学習曲線 複数のブランチがあるため複雑 ワークフローはシンプルだが、強力なテストが必要
デプロイリスク 段階的リリースによりリスク低減 頻繁な更新によりリスク上昇
復旧時間 ロールバックプロセスが遅い 迅速なロールバックが可能

各ワークフローの適用場面

Git Flow 構造化されたバージョン管理リリースが必要なエンタープライズレベルのプロジェクトに最適です。複数のサポート対象バージョンを管理するチームや、正式なQAやコンプライアンス要件を持つプロジェクトに適しています。

トランクベース開発 スピードと柔軟性を重視するチームやプロジェクトに最適です。例えば:

  • 迅速なアップデートが必要なSaaSプラットフォーム
  • 強力なCI/CDパイプラインを持つチーム
  • 信頼性の高い自動テストで支えられたプロジェクト
  • 継続的デプロイワークフローや頻繁なリリース
  • 定期的なアップデートが必要なモバイルアプリプロジェクト

コアサービスにはTrunk-Based Development、正式なリリーストラックを持つプロジェクトにはGit Flowを使うなど、両方を組み合わせるチームもあります。

次: どちらのアプローチにも対応するCI/CDパイプラインのセットアップ方法。

CI/CD パイプラインの構築

Git Flow CI/CDセットアップ

  • 開発ブランチのパイプライン:ユニットテスト、統合テスト、code の品質チェック、ビルド検証、開発環境へのデプロイを実行します。
  • リリースブランチのパイプライン:全テストスイート、セキュリティスキャン、リリース候補のビルド、ステージング環境へのデプロイを実行します。
  • メインブランチのパイプライン:検証テスト、バージョン管理、本番ビルドの作成、本番環境へのデプロイ、リリースのタグ付けを行います。

トランクベースの CI/CD 構成

  • フィーチャーブランチのパイプライン:高速なユニットテスト、code のスタイルチェック、ビルド検証、プレビュー環境へのデプロイに焦点を当てます。
  • メインブランチのパイプライン:徹底的な自動テスト、セキュリティスキャン、本番ビルドの作成、段階的デプロイ、自動ロールバック機能に対応しています。

Capgo CI/CD 連携

Capgo Live Update ダッシュボードインターフェース

CI/CD構成のどちらにもライブのOTA更新を追加するには、Capgoをシームレスに統合できます:

Capgoは以下と連携します GitHub アクション, GitLab CIや Jenkins Git FlowおよびTrunk-Basedパイプラインの両方で、ライブ更新、段階的ロールアウト、即時ロールバックを有効にします。AppleとGoogleの要件を満たしつつ、クラウドおよびセルフホストデプロイメントの両方をサポートします [1].

まとめと推奨事項

以下の表を参考に、チームの規模とCI/CDの成熟度に基づいてワークフローを選択してください:

シナリオ Git Flow トランクベース開発
チームの規模 50人以上の開発者 50人未満の開発者
リリース頻度 週次または月次 日次または1日複数回
テスト & QA 従来のQAサイクル 自動テスト重視
デプロイモデル マルチバージョン、従来型 クラウドネイティブ、コンテナ化
リスク許容度 保守的・規制の厳しい環境 進歩的・迅速なフィードバック
  • 小規模チームではまずトランクベース開発から始め、その後大規模グループへ展開してください。移行前にCI/CDパイプラインが完全に自動化されていることを確認してください。
  • 両方のワークフローで一貫したcodeレビューを行い、フィーチャーフラグを活用してください。選択したワークフローに合わせてパイプライン設定を調整してください。

一部のチームではこれらのアプローチを組み合わせる場合があります。メジャーリリースにはGit Flowを使い、機能提供にはトランクベース開発を活用する、といった具合です。どちらのパスを選んでも、成功にはCI/CDの適切な統合、テストの自動化、チームの認識合わせが不可欠です。

Git Flow vs トランクベース開発によるCI/CDを続ける

使用している場合 CI/CDにおけるGit FlowとTrunk-Basedの比較 CI/CD自動化を計画するには、次と連携してください Capgo での CI/CD 設定 Capgo CI/CDでのプロダクトワークフローについては、 Capgo Native Build Capgo Native Buildsでのプロダクトワークフローについては、 Capgo インテグレーション Capgo インテグレーションでのプロダクトワークフロー向けに、 CI/CD 連携 CI/CD Integrationの実装詳細については、 GitHub Actions 連携 GitHub Actions Integrationの実装詳細については。

Capacitor アプリ向けの Live Updates

Web レイヤーのバグが本番で発生したら、App Store の審査を何日も待たずに Capgo で修正を配信しましょう。ネイティブの変更は通常の審査フローに残したまま、ユーザーはバックグラウンドでアップデートを受け取れます。

最新のブログ記事

Capgoは、真にプロフェッショナルなモバイルアプリを作るために必要な最高のインサイトを提供します。