Stage 3・上級編 ー Lesson 3-6

feature ブランチ運用 — main / develop / feature の使い分け

main は本番、develop は開発統合、feature は1機能ずつ。ブランチを役割で分ける

💡 たとえるなら

本番のキッチンと仕込みのキッチンを分け、料理ごとに別の鍋で作る感覚

これまでに ブランチ・マージ・コンフリクト・rebase といった部品を学んできました。最後に、それらを チーム開発の現場でどう組み合わせるか を見ていきます。1人開発でも応用できる定番フローです。

なぜブランチを役割分けするのか

main ブランチに直接コミットしていく方式(trunk-based)も悪くないのですが、規模が大きくなると:

  • いま main は本番に出せる状態?」が分からなくなる
  • 複数人の作業がぶつかりやすい
  • リリースタイミングを揃えにくい

そこで、ブランチに 明確な役割 を与えて整理する運用が広まりました。

3階層モデル:main / develop / feature

main develop feature/login feature/search feature → develop → main の3階層で流していく
ブランチ役割
main本番(リリース版)。常に「今動くもの」
develop開発の統合場所。次のリリースに向けた最新
feature/<名前>1機能ごとの作業ブランチ。短命で OK

軽量な運用なら main + feature の2階層 でも十分機能します。develop は規模が大きい・リリースサイクルがゆっくりな場合に追加。

1機能を進めるフロー

「ログイン機能」を追加する例で1サイクル見てみます。

① develop の最新を取得

$ git switch develop
$ git pull origin develop

② feature ブランチを切る

$ git switch -c feature/login

ブランチ名は feature/login のようにスラッシュ区切りで分類するのが慣習。bugfix/...hotfix/... も同じパターン。

③ 機能を作って細かくコミット

$ git add .
$ git commit -m "ログインフォームのUIを追加"
$ git commit -am "認証API呼び出しを追加"
$ git commit -am "エラーメッセージ表示を実装"

④ 自分のブランチをリモートに push

$ git push -u origin feature/login

⑤ develop の最新を取り込む(rebase または merge)

機能を作っている間に develop が進んでいる可能性があります。取り込んでから合流する のがマナー。

# develop の最新を fetch
$ git fetch origin develop
# feature の上に develop の新コミットを取り込む(rebase 派)
$ git rebase origin/develop
# または、merge派ならこちら
$ git merge origin/develop

⑥ develop に取り込む(マージ)

最終確認したら、develop に戻って merge:

$ git switch develop
$ git pull origin develop
$ git merge --no-ff feature/login
$ git push origin develop

--no-ff は「fast-forward しない」設定。常にマージコミットを作って 「どの feature を統合したか」 を履歴に残します。

⑦ feature ブランチを削除

$ git branch -d feature/login
$ git push origin -d feature/login

ローカルとリモート、両方掃除。

リリースの瞬間:develop → main

リリースタイミングが来たら developmain にマージ:

$ git switch main
$ git merge --no-ff develop
$ git tag -a v1.2.0 -m "v1.2.0 リリース"
$ git push origin main --tags

タグでリリース版に目印をつけるところまでがワンセット。

ブランチ命名の慣習

役割をプレフィックスで揃えると見通しが効きます:

プレフィックス用途
feature/...新機能
bugfix/...バグ修正(develop に向けて)
hotfix/...本番の緊急修正(main に向けて)
release/v1.2.0リリース準備用の安定化ブランチ
chore/...雑務(リファクタ・依存更新など)

ホットフィックス(緊急修正)の例外フロー

「本番でバグ発見、すぐ直したい」場合だけ、main から直接ブランチを切ります:

$ git switch -c hotfix/login-bug main
# 修正してコミット → main と develop の両方に取り込む
$ git switch main && git merge --no-ff hotfix/login-bug
$ git switch develop && git merge --no-ff hotfix/login-bug

「両方に入れ忘れる」とdevelop側で再発するので注意。

軽量版:main + feature の2階層

少人数や個人プロジェクトでは develop を省くのが現実的:

  • main だけ。常に「リリースできる状態」を保つ
  • 機能ごとに feature/... を切って、できたら main にマージ
  • リリース時は main に tag を打つ

GitHub Flow と呼ばれる方式で、シンプルで速い。

このレッスンのまとめ

できるようになったこと
main / develop / feature の役割分担を理解した
✅ feature ブランチでの1機能フロー(branch → commit → rebase → merge → delete)を回せる
--no-ff でマージコミットを残す意味がわかった
✅ ホットフィックスの例外フローを覚えた
✅ 軽量版(main + feature)も選択肢にできる

✏️ 理解度チェック

0 / 3 正解

各問題、選んだ瞬間に正解と解説が表示されます。気軽に試してください。

  1. Q1. feature ブランチの典型的な役割は?
  2. Q2. main に直接コミットする運用が推奨されない主な理由は?
  3. Q3. develop ブランチの典型的な役割は?

© 2026 git-ready-easy — プログラミング未経験でもわかる git 入門