Git フィーチャーブランチワークフロー、実はいらない??チーム開発での正しい使い分けと実践パターン

目次

フィーチャーブランチワークフローとは?main を守る開発手法

チーム開発で「main ブランチに直接コミットしてコンフリクトを起こしてしまった」「他の人の作業と衝突して開発が止まった」という経験はありませんか?

Git フィーチャーブランチワークフローは、こうした問題を解決するための実践的なブランチ戦略です。すべての新機能開発を main ブランチではなく専用のブランチで行うことで、安定したコードベースを保ちながら複数人が同時に開発できる環境を実現します。

あわせて読みたい
Git

このワークフローは CI/CD 環境との相性も抜群で、main ブランチには常にデプロイ可能なコードだけが含まれる状態を維持できます。プルリクエストを活用したコードレビュー文化の構築にも最適です。

フィーチャーブランチワークフローの3つの核心メリット

1. main ブランチの安定性を確保

main ブランチに直接コミットしないことで、壊れたコードや未完成の機能が本番環境に影響しない状態を保てます。これは継続的インテグレーション(CI)において決定的に重要です。

  • main は常にデプロイ可能な状態
  • 実験的な変更もリスクなく試せる
  • 緊急バグ修正を優先的に反映できる

2. 複数人での並行開発が可能

各開発者が独立したフィーチャーブランチで作業することで、互いの作業を妨げることなく開発を進められます。ログイン機能を実装している間に、別メンバーが決済機能を開発できます。

3. プルリクエストでコードレビューを促進

フィーチャーブランチを main にマージする前に、プルリクエスト経由でチーム全体に変更内容を共有できます。これによりコード品質が向上し、知識共有も自然に進みます。

基本の流れ:フィーチャーブランチのライフサイクル

Step 1: 最新の main ブランチから開始

新しいフィーチャー開発を始める前に、必ずローカルの main を最新状態に同期します。これにより古いコードベースでの開発を防げます。

# main ブランチに切り替え
git checkout main

# リモートの最新情報を取得
git fetch origin

# ローカル main をリモートに合わせる
git reset --hard origin/main

Step 2: わかりやすい名前でブランチ作成

フィーチャーブランチには目的が一目でわかる名前を付けます。feature/user-authenticationfix/issue-1234 のような命名規則を統一すると、チーム全体で管理しやすくなります。

# 新しいブランチを作成して切り替え
git checkout -b feature/user-authentication

# または2ステップで実行
git branch feature/user-authentication
git checkout feature/user-authentication

-b フラグは「ブランチが存在しない場合は作成する」という意味です。既存ブランチに切り替える場合は git checkout ブランチ名 だけで OK です。

Step 3: 通常どおり開発してコミット

フィーチャーブランチでは、main ブランチと同じように自由にコミットできます。小さな単位で頻繁にコミットすることで、問題発生時の巻き戻しも容易になります。

# 変更状況を確認
git status

# 変更ファイルをステージング
git add src/auth/login.js

# コミット実行
git commit -m "Add login form validation"

Step 4: リモートにプッシュしてバックアップ

作業中のブランチを定期的にリモートリポジトリにプッシュしておくと、PC のトラブルによるコード消失を防げます。また、他のメンバーが進捗を確認したり、途中からサポートに入ることも可能になります。

# 初回プッシュ時(追跡ブランチ設定)
git push -u origin feature/user-authentication

# 2回目以降は短縮形でOK
git push

-u オプションで追跡ブランチを設定すると、次回から git push だけで同じリモートブランチにプッシュできます。

プルリクエストの実践的活用法

フィーチャー完成時:レビュー依頼

機能開発が完了したら、main への直接マージは避けて、プルリクエストを作成します。GitHub、GitLab、Bitbucket などの GUI から簡単に作成できます。

  • 変更内容の説明を丁寧に記述
  • レビュアーを指定(チームリーダーや関連機能の担当者)
  • 関連する Issue 番号を紐付け
  • スクリーンショットやテスト結果を添付

開発途中でも使える:相談・アドバイス依頼

プルリクエストは完成時だけのものではありません。実装方針で迷ったとき、途中で行き詰まったときにも活用できます。Draft プルリクエストとして作成すれば、「まだレビュー不要」という意図も伝わります。

コミット履歴の隣にコメントを残せるため、「この部分の実装方法で悩んでいます」といった具体的な質問も簡単です。

レビュー指摘への対応フロー

レビュアーからコメントが付いたら、ローカルで修正して再度プッシュします。プルリクエストは自動更新されるため、新しいプルリクエストを作り直す必要はありません。

# レビュー指摘を反映して修正
git add src/auth/login.js
git commit -m "Fix validation logic based on review"

# プッシュすると自動的にPRに反映される
git push

マージ完了までの流れ:承認から統合まで

プルリクエストが承認されたら、いよいよ main ブランチへのマージです。マージ方法には複数の選択肢がありますが、チームで統一しておくことが重要です。

マージ方法の選択

  • マージコミット(Merge commit):履歴にフィーチャーブランチの存在が残る。どの変更が一緒に開発されたかが明確
  • Squash マージ:フィーチャーブランチの複数コミットを1つにまとめる。main の履歴が簡潔に
  • Rebase マージ:直線的な履歴を維持。フィーチャーブランチのコミットが main に直接並ぶ

GitHub などの GUI では「Merge pull request」ボタンでこれらを選択できます。コマンドラインでマージする場合は以下のようになります。

# main ブランチに切り替え
git checkout main

# リモートの最新状態を取得
git pull

# フィーチャーブランチをマージ
git pull origin feature/user-authentication

# リモートに反映
git push

実践シナリオ:チーム開発での具体例

Mary さんと John さんが同じプロジェクトで別々の機能を開発するシナリオで、フィーチャーブランチワークフローの実際の流れを見てみましょう。

Mary:ユーザー認証機能の開発

Mary さんは新しいログイン機能を担当します。まず専用ブランチを作成して開発を開始します。

# main から最新状態でブランチ作成
git checkout main
git pull
git checkout -b feature/login-system

# 開発作業
# ... コードを編集 ...

# 定期的にコミット
git add src/auth/
git commit -m "Implement JWT token generation"

# 昼休憩前にバックアップとしてプッシュ
git push -u origin feature/login-system

午後に開発を完了した Mary さんはプルリクエストを作成し、チームリーダーの Bill さんにレビューを依頼します。

Bill:レビューとフィードバック

Bill さんは GitHub でプルリクエストを確認し、「トークンの有効期限設定を追加してほしい」というコメントを残します。Mary さんはローカルで修正してプッシュし直します。

# レビュー指摘に対応
git add src/auth/token.js
git commit -m "Add token expiration setting"
git push

# PRが自動更新され、Billさんに通知が届く

Bill さんが承認したら、Mary さんまたは Bill さんが GitHub の GUI からマージを実行します。

John:並行して別機能を開発

同じ時間帯に、John さんは決済機能を別ブランチで開発しています。Mary さんの作業とは完全に独立しているため、互いに干渉することなく開発が進みます。

# Johnさんも独自ブランチで作業
git checkout -b feature/payment-integration

# Maryさんの作業とは無関係に開発できる
git add src/payment/
git commit -m "Integrate Stripe payment API"
git push -u origin feature/payment-integration

Mary さんの機能が main にマージされた後、John さんは自分のブランチに最新の main を取り込んで、競合があれば解決します。

# Maryさんの変更を自分のブランチに取り込む
git checkout feature/payment-integration
git fetch origin
git merge origin/main

# 競合があれば解決してコミット
git push

よくあるトラブルと解決策

競合(コンフリクト)が発生した場合

複数人が同じファイルを編集していると、マージ時に競合が発生することがあります。Git が自動で解決できない部分を手動で修正する必要があります。

# main を取り込もうとして競合発生
git merge origin/main
# Auto-merging src/config.js
# CONFLICT (content): Merge conflict in src/config.js

# 競合ファイルを開いて手動修正
# <<<<<<< HEAD と ======= の間が自分の変更
# ======= と >>>>>>> の間が相手の変更

# 修正後、ステージングしてコミット
git add src/config.js
git commit -m "Resolve merge conflict in config"

フィーチャーブランチが main から大きく離れた場合

開発期間が長引くと、フィーチャーブランチと main の差分が大きくなります。定期的に main の変更を取り込むことで、最終的なマージを楽にできます。

# 週に1回程度、mainの最新状態を取り込む習慣をつける
git fetch origin
git merge origin/main

# またはrebaseで履歴を整理
git rebase origin/main

誤って main に直接コミットしてしまった場合

main ブランチで作業していることに気づかず、コミットしてしまうことがあります。まだプッシュしていなければ、簡単に取り消せます

# 直前のコミットを取り消し(変更は残る)
git reset --soft HEAD^

# 新しいブランチを作成して変更を移動
git checkout -b feature/my-work
git add .
git commit -m "Move changes to feature branch"

他のワークフローとの組み合わせ

フィーチャーブランチワークフローは、それ単体でも機能しますが、他のワークフローと組み合わせることでより強力になります。

Gitflow との組み合わせ

Gitflow は main と develop という2つの長期ブランチを持つモデルです。フィーチャーブランチは develop から分岐し、完成後に develop にマージします。リリース時に main にマージする流れになります。

フォーク型ワークフローとの組み合わせ

オープンソースプロジェクトでは、各開発者がリポジトリ全体をフォークして、自分のフォーク内でフィーチャーブランチを作成します。完成後、元のリポジトリにプルリクエストを送ります。

Git フィーチャーブランチワークフロー よくある質問

❓ フィーチャーブランチワークフローは少人数チームでも必要ですか?

2〜3人の小規模チームでも十分に効果があります。main ブランチの安定性を保ちながら各自が独立して作業できるため、人数が少なくてもコンフリクトを避けられます。むしろ少人数のうちにワークフローを確立しておくと、チーム拡大時もスムーズに移行できます。

❓ Gitflowとフィーチャーブランチワークフローの違いは何ですか?

フィーチャーブランチワークフローは main ブランチのみを基準とするシンプルな構造です。一方 Gitflow は main と develop の2つの長期ブランチを持ち、リリース管理が厳格です。継続的デプロイを行う Web アプリならフィーチャーブランチワークフロー、定期リリースのパッケージソフトなら Gitflow が向いています。

❓ プルリクエストのレビューは必ず必要ですか?

技術的には必須ではありませんが、コード品質向上と知識共有の観点から強く推奨されます。最低1人のレビュー承認をマージ条件にすると、バグの早期発見や実装方針の統一につながります。一人開発でもセルフレビューの機会として活用できます。

❓ フィーチャーブランチはどのくらいの期間で完結させるべきですか?

理想は1〜3日程度です。長期間ブランチを残すと main との差分が大きくなり、マージ時のコンフリクトが増えます。大きな機能は小さな単位に分割して、段階的にマージする方が安全です。どうしても長期化する場合は、定期的に main の変更を取り込んでください。

Git とチーム開発をさらに活用する関連記事

Git の基礎からチーム開発の実践まで、段階的に学べる関連記事をご紹介します。

GitHub 初心者向けシリーズ

まとめ:フィーチャーブランチで安全な並行開発を実現

Git フィーチャーブランチワークフローは、チーム開発における並行作業とコード品質維持を両立させる実践的な手法です。main ブランチの安定性を保ちながら、複数の機能開発を同時に進められます。

重要なポイントをおさらいしましょう:

  • すべての新機能は専用ブランチで開発する
  • わかりやすいブランチ名を付ける(feature/、fix/ など)
  • 定期的にリモートにプッシュしてバックアップ
  • プルリクエストでレビュー文化を構築
  • main は常にデプロイ可能な状態を維持

最初は手順が多く感じるかもしれませんが、慣れてしまえば自然な流れになります。チーム全体でこのワークフローを採用することで、コード品質の向上とスムーズな開発サイクルを実現できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次