Skip to content
⚠️ This article was written in 2019. Some content may be outdated.

チームのGitワークフローベストプラクティス

個人でコードを書くなら、Gitはどう使っても構いません。チームコラボレーションは違います——ブランチの管理、コミットメッセージの書き方、コードレビューの仕方、それぞれに規範がなければ混乱します。本記事では実際のチームで検証したワークフローの実践をまとめます。

Git Flow vs GitHub Flow

2つの主流ブランチモデル、それぞれ適したシナリオがあります:

Git Flow ——明確なリリースサイクルがあるプロジェクト向け(アプリのバージョンリリースなど):

main (master) ← バージョンリリース時のみタグ付け
  ↑
release/v1.2.0 ← リリース前の準備ブランチ、バグ修正のみ
  ↑
develop ← 日々の開発の統合ブランチ
  ↑    ↑
feature/login  feature/payment ← フィーチャーブランチ

GitHub Flow ——継続的デプロイのプロジェクト向け(SaaS・Webアプリなど):

main ← 常にデプロイ可能
  ↑
feature/xxx ← mainから作成、完成後にmainへPR

2019年のほとんどのフロントエンドチームはGitHub Flowの変形を使っています。WebプロジェクトはたいてV継続的にデプロイされ、複雑なreleaseブランチが不要だからです。

ブランチ命名規則

bash
# フォーマット: タイプ/短い説明
# よく使うタイプ: feature, fix, hotfix, release, chore

# ✅ 良い命名
git checkout -b feature/user-login
git checkout -b feature/order-list-pagination
git checkout -b fix/cart-calculation-error
git checkout -b hotfix/production-crash-0601
git checkout -b release/v2.3.0
git checkout -b chore/upgrade-webpack-4

# ❌ 悪い命名
git checkout -b dev           # devとは何?
git checkout -b test          # 何のテスト?
git checkout -b my-branch     # 他の人には意味不明
git checkout -b fix-bug       # どのバグ?

コミットメッセージ規則(Conventional Commits)

type(scope): description

body(任意)

footer(任意)
bash
# ✅ 良いコミット
git commit -m "feat(auth): JWTリフレッシュトークン機構を追加"
git commit -m "fix(cart): 商品数量の計算を修正"
git commit -m "perf(list): 仮想スクロールで1万件リストのレンダリングを最適化"
git commit -m "docs(api): ユーザーエンドポイントのドキュメントを更新"

# ❌ 悪いコミット
git commit -m "fix"
git commit -m "update"
git commit -m "wip"

Rebase vs Merge:線形な履歴を保つ

bash
# フィーチャーブランチの開発ワークフロー
git checkout -b feature/new-feature
# ... 開発 ...

# マージ前に最新のmainをリベース
git fetch origin
git rebase origin/main

# 競合を解決してPRを作成
# PRでは"Squash and Merge"か"Rebase and Merge"を使用

線形なコミット履歴によりgit bisectgit logがはるかに効果的になります——少し規律が必要ですがその価値はあります。

MIT Licensed