コンテンツにスキップ
X

チーム開発の運用フロー - GitHub Flow 完全ガイド

ひとりで開発するときは自由に作業できますが、チームになった途端にルールが必要になります。「誰かの変更で自分のコードが壊れた」「どのブランチが最新か分からない」——こういった問題を防ぐのが、チーム開発の運用フローです。

この記事では、GitHub を使ったチーム開発の標準的な運用方法を解説します。

対象読者: Git と GitHub の基本操作を習得し、チームでの開発を始める方

学習時間の目安: 読了 25分 + 実践 20分

前提知識: ブランチとマージGitHub Issues を理解していること

GitHub Flow(ギットハブ フロー)とは、main ブランチを中心とした、シンプルなブランチ戦略です。 複雑なブランチ管理を避け、迅速なリリースを可能にします。

1. main ブランチから新しいブランチを作る
2. ブランチで変更をコミットする
3. Pull Request を作成する
4. コードレビューを受ける
5. main ブランチにマージする
6. デプロイする

このサイクルを繰り返すだけです。複雑なルールはありません。

もうひとつよく知られているブランチ戦略が Git Flow です。GitHub Flow との主な違いを比較します。

比較項目GitHub FlowGit Flow
ブランチ数main + 作業ブランチmain / develop / feature / release / hotfix の5種類
複雑さシンプル複雑
リリース頻度随時(継続的デプロイ向き)計画的なリリースに向く
向いているプロジェクトWeb サービス・SaaS などバージョン管理が必要なライブラリ・アプリ

Web サービスの開発には GitHub Flow が適しています。 リリースの計画が複雑でスケジュール管理が必要な場合は Git Flow を検討してください。


ブランチ名は「このブランチで何をするか」が一目で分かるように付けます。 命名規則を統一することで、チーム全員が状況を把握しやすくなります。

プレフィックス用途
feature/新機能の開発feature/user-authentication
fix/バグ修正fix/login-button-not-responding
hotfix/本番環境の緊急修正hotfix/payment-error
chore/テスト・設定・ライブラリ更新などchore/update-dependencies
docs/ドキュメントの更新docs/api-reference
refactor/リファクタリング(機能変更なし)refactor/auth-module
評価理由
良いfeature/add-search-function何をするか明確
良いfix/issue-42-null-pointerIssue 番号付きで追跡しやすい
悪いtest内容が不明
悪いyamada-branch人名では内容が分からない
悪いfix何を修正するか不明
悪い新機能追加日本語や空白はトラブルの原因になる

ブランチ名には 英小文字・数字・ハイフン を使い、スペースや日本語は避けてください。


コミットメッセージはコードの変更履歴です。 「何を変えたか」だけでなく「なぜ変えたか」が伝わるメッセージを書くことが重要です。

Conventional Commits(コンベンショナル コミッツ)とは、コミットメッセージのフォーマットを統一するための仕様です。

フォーマット: <type>(<scope>): <説明>

タイプ意味
feat新機能の追加feat: ユーザー検索機能を追加
fixバグ修正fix: ログインボタンが押せない問題を修正
docsドキュメントの変更docs: READMEにセットアップ手順を追加
styleコードのフォーマット変更(動作変更なし)style: インデントを修正
refactorリファクタリング(機能変更なし)refactor: 認証ロジックを関数に分割
testテストの追加・修正test: ログイン機能のユニットテストを追加
choreビルド設定・依存ライブラリ更新chore: eslint を v8 にアップデート
ciCI 設定の変更ci: GitHub Actions のワークフローを修正

良いコミットメッセージの書き方

Section titled “良いコミットメッセージの書き方”
# 良い例
feat(auth): パスワードリセット機能を追加

ユーザーがパスワードを忘れた場合に、メールアドレスで
リセットリンクを送信できるようにした。

Closes #78

# 悪い例
修正
update
asdfghjkl

1 つのコミットには 1 つの変更だけを含めます。 「ログイン機能の追加」と「ヘッダーのデザイン変更」を同一コミットにまとめると、後で問題を追跡するときに困ります。


Pull Request のベストプラクティス

Section titled “Pull Request のベストプラクティス”

PR は小さければ小さいほど良いです。 大きすぎる PR はレビュアーの負担になり、レビューの質が下がります。

PR のサイズ変更行数の目安レビューしやすさ
小(理想)〜200行集中してレビューできる
中(許容範囲)200〜400行丁寧に読めばレビューできる
大(要注意)400行以上レビュアーへの負担が大きい

PR の説明の書き方テンプレート

Section titled “PR の説明の書き方テンプレート”
## 変更内容
- ユーザー検索機能を追加した
- 検索結果を一覧表示するコンポーネントを追加した

## 変更の理由
Issue #42 のユーザーリクエストに対応するため。
ユーザーが他のユーザーを名前で検索できる機能が不足していた。

## テスト方法
1. アプリを起動する
2. ヘッダーの検索バーに名前を入力する
3. 検索結果が表示されることを確認する

## スクリーンショット
(変更前)(変更後)

## 関連 Issue
Closes #42

PR を出す前に、まず自分でレビューする習慣をつけてください。 GitHub の「Files changed」タブでコードの差分を眺めると、タイプミスや不要なデバッグコードに気づくことがあります。


コードレビューの目的は「コードの品質向上」と「チーム全員での知識共有」です。 犯人探しではありません。

種別書き方
必須修正[must] や「〜してください」[must] SQL インジェクションの脆弱性があります
提案[nit] や「〜はどうでしょう」[nit] この変数名、もう少し具体的にするとより読みやすいかもしれません
質問「〜は何のためですか?」この条件分岐はどのケースを想定していますか?
褒める「良いですね」「参考になります」このアプローチはシンプルで良いですね!
アクション意味いつ使うか
Commentコメントのみ質問や提案があるが、マージをブロックしない
Approve承認このまま(または軽微な修正後)マージしてよい
Request changes変更を要求マージ前に必ず修正が必要
  • コードを批判するのであって、人を批判しない
  • 「なぜ悪いか」の理由を説明する
  • 良いコードも積極的に褒める
  • 24時間以内にレビューするよう努める
  • レビューコメントを個人攻撃と受け取らない
  • 「修正しました」と返信して変更を伝える
  • 意見が合わない場合は議論してよい
  • Approve が来たらマージしてよい

ブランチ保護ルール(Branch Protection Rules)

Section titled “ブランチ保護ルール(Branch Protection Rules)”

ブランチ保護ルールとは、main ブランチへの誤った変更を防ぐための設定です。 「レビューなしでマージできない」「テストが失敗したらマージできない」といったルールを自動的に強制できます。

「Settings」→「Branches」→「Add branch protection rule」から設定します。「Branch name pattern」に main と入力して、以下のルールを設定します。

設定項目説明推奨
Require a pull request before mergingマージには PR が必要有効化
Required number of approvals必要な Approve 数最低 1
Dismiss stale pull request approvals when new commits are pushed新しいコミットが追加されると Approve がリセットされる有効化
Require status checks to pass before mergingCI のテストパスが必要有効化
Require branches to be up to date before mergingマージ前にブランチが最新であることを要求有効化
Do not allow bypassing the above settings管理者もルールを迂回できない有効化を検討
Allow force pushes強制プッシュを許可無効化

CODEOWNERS(コードオーナーズ)とは、特定のファイルやディレクトリが変更されたとき、そのファイルに詳しい人が自動的にレビュワーとして割り当てられる仕組みです。

# 書式: <パターン> <GitHubユーザー名またはチーム名>

# すべてのファイルの変更に @alice を割り当て
* @alice

# frontend/ 配下の変更は @bob と @carol
frontend/ @bob @carol

# バックエンドのコアロジックは @backend-team が担当
src/core/ @myorg/backend-team

# ドキュメントの変更は @docs-team
*.md @myorg/docs-team

# セキュリティ関連のファイルは @security-team が必ずレビュー
.github/workflows/ @myorg/security-team

CODEOWNERS を設定すると、ブランチ保護ルールの「Require review from Code Owners」と組み合わせて、重要なファイルが必ず担当者にレビューされるようになります。


PR をマージするとき、GitHub では 3 つの方法が選べます。チームで統一しておくと、履歴が読みやすくなります。

マージ方法特徴向いている場面
Merge commitすべてのコミットが保持され、マージコミットが作成される変更の経緯をすべて残したい場合
Squash and mergeブランチのすべてのコミットを 1 つにまとめてマージコミット履歴をスッキリさせたい場合
Rebase and mergeマージコミットを作らずに直線的な履歴にするmain の履歴を直線的に保ちたい場合

初心者チームには「Squash and merge」がおすすめです。 作業中の細かいコミット(「修正」「WIP」など)が main に残らず、履歴が読みやすくなります。


マイルストーン(Milestone)とは、特定のリリースや期限に向けて Issue や PR をグループ化する機能です。

「Issues」→「Milestones」→「New milestone」から作成します。目標日とマイルストーン名(例: v1.0.0 リリース)を設定し、関連する Issue をマイルストーンに紐づけます。

進捗がパーセンテージで表示されるため、リリースまでの残り作業量が一目で分かります。

良いリリースノートには以下の情報を含めます。

## v1.2.0 (2026-03-21)

### 新機能
- ユーザー検索機能を追加 (#42)
- ダークモード対応 (#55)

### バグ修正
- ログインボタンが特定の環境で押せない問題を修正 (#61)
- プロフィール画像が正しく表示されない問題を修正 (#63)

### 変更点
- Node.js の対応バージョンを v18 以上に変更

以下は、チーム開発でやってはいけないことです。

# やってはいけない
git push origin main

main への直接 push は禁止です。 ブランチを作り、PR を通じてマージしてください。ブランチ保護ルールを設定すると、物理的に防ぐことができます。

1,000 行を超える PR はレビュアーが実質的にレビューできません。機能ごとに PR を分割してください。

「急ぐから」という理由でレビューをスキップするのは危険です。本番障害の多くはレビューなしの変更から発生します。

コンフリクトを放置したまま PR を出す

Section titled “コンフリクトを放置したまま PR を出す”

PR を出す前に main ブランチの変更を取り込み、コンフリクトを解消してください。

意味のないコミットメッセージ

Section titled “意味のないコミットメッセージ”

「修正」「update」「asdf」のようなメッセージは、後で何を変えたのか分からなくなります。

フォースプッシュを共有ブランチで使う

Section titled “フォースプッシュを共有ブランチで使う”

git push --force は共有ブランチでは使わないでください。他の人のコミットを上書きする危険があります。どうしても必要な場合は --force-with-lease を使い、チームに事前に連絡してください。


Q. GitHub Flow と Git Flow はどちらを選べばよいですか?

Section titled “Q. GitHub Flow と Git Flow はどちらを選べばよいですか?”

多くの Web サービス開発では GitHub Flow を推奨します。 Git Flow は管理するブランチが多く学習コストが高いため、まずは GitHub Flow から始めることをおすすめします。複数バージョンを同時メンテナンスする必要がある場合に Git Flow を検討してください。

Q. コミットメッセージは日本語でよいですか?

Section titled “Q. コミットメッセージは日本語でよいですか?”

チームの合意があれば日本語でも問題ありません。 ただし、オープンソースプロジェクトや国際チームでは英語が標準です。Conventional Commits の形式(feat:, fix: など)は言語に関わらず採用できます。

Q. PR のレビューで意見が対立した場合はどうすればよいですか?

Section titled “Q. PR のレビューで意見が対立した場合はどうすればよいですか?”

まずはテキストで議論し、解決しない場合は口頭や会議で話し合ってください。 レビュー上の議論は個人の感情を排除し、コードの品質向上という共通目標に向けて進めることが重要です。

Q. ブランチ保護ルールを設定したら誰もマージできなくなりました。

Section titled “Q. ブランチ保護ルールを設定したら誰もマージできなくなりました。”

「Do not allow bypassing the above settings」が有効で、必要な Approve 数を満たしていない場合にマージできなくなります。 必要な Approve 数を「1」に設定し、自分以外のメンバーに Approve してもらうとマージできます。チームが 1 人の場合は、Approve 数を「0」に設定するか、ブランチ保護を調整してください。

Q. Squash and merge を使うとコミット履歴が消えますか?

Section titled “Q. Squash and merge を使うとコミット履歴が消えますか?”

元のブランチは削除しない限り残っています。 main の履歴からは見えなくなりますが、元のブランチや PR のページから個々のコミットを確認できます。