第7章:ブランチの基本操作
学習目標
この章を読み終える頃には、ブランチの概念を理解し、安全に実験的な変更を行えるようになります。また、GitHub Desktopを使ってブランチの作成、切り替え、マージ(統合)ができ、コンフリクト(競合)が起きた場合の基本的な対処法を身につけます。
7.1 ブランチとは何か(実験的な変更の管理)
日常生活での「ブランチ」的な考え方
「ブランチ」という言葉を聞くと難しく感じるかもしれませんが、実は私たちの日常生活でも似たような考え方をしています。
料理での例 カレーを作っているとします。基本のカレーは完成していますが、「スパイスを追加したらもっと美味しくなるかも」と思いました。でも、スパイスを入れすぎて失敗したら、せっかくのカレーが台無しになってしまいます。
そこで、カレーを小皿に少し取り分けて、その小皿でスパイスの実験をします。うまくいけば残りのカレー全体に適用し、失敗すれば小皿だけ処分して、元のカレーは無事に保たれます。
文章作成での例 レポートを書いているとします。基本の構成は完成していますが、「この章をもっと詳しく書いたら良くなるかも」と思いました。でも、大幅に書き直して読みづらくなったら困ります。
そこで、現在のファイルをコピーして「レポート_実験版.docx」として保存し、この実験版で新しい章を試してみます。うまくいけば本体に統合し、うまくいかなければ実験版だけ削除します。
GitHubの「ブランチ」は、まさにこの「実験用のコピーを作って、安全に試行錯誤する」仕組みです。
プログラミングでブランチが重要な理由
プログラミングの世界では、この「安全な実験」がさらに重要になります:
新機能を追加したい場合
- Webサイトに「お問い合わせフォーム」を追加したい
- でも、作業中にサイトが壊れてしまうかもしれない
- 他の人が同時に別の作業をしているかもしれない
バグを修正したい場合
- 「スマートフォンでレイアウトが崩れる」問題を直したい
- でも、修正中に別の部分が壊れてしまうかもしれない
- 修正がうまくいかない場合、元の状態に戻したい
デザインを変更したい場合
- 「ヘッダーの色を青から緑に変えたい」
- でも、緑色が思ったより印象が悪いかもしれない
- 一度試してみて、判断したい
ブランチを使えば、これらの実験をすべて安全に行うことができます。
Gitにおけるブランチの仕組み
mainブランチ(本流)
- プロジェクトの「正式版」
- 常に動作する状態を保つ
- 公開されているバージョン
featureブランチ(実験用)
- 新機能開発用の作業ブランチ
- mainから分岐して作成
- 完成したらmainに統合
ブランチの流れ:
main ─────●─────●─────●───── (安定版)
│ ↗
└─● ─ ● ─ ●──┘ (実験ブランチ)
新機能開発
7.2 GitHub Desktopでのブランチ作成と切り替え
新しいブランチの作成手順
1. GitHub Desktopでリポジトリを開く
- 対象のリポジトリを選択
- 現在のブランチが「main」であることを確認
2. 新しいブランチの作成
- 画面上部の「Current branch」をクリック
- 「New branch」ボタンを選択
- ブランチ名を入力(例:
add-contact-form) - 「Create branch」をクリック
良いブランチ名の例:
add-contact-form(お問い合わせフォーム追加)fix-mobile-layout(モバイル表示修正)update-homepage-design(ホームページデザイン更新)feature-user-authentication(ユーザー認証機能)
避けるべきブランチ名:
test(何をテストするか不明)fix(何を修正するか不明)new(何が新しいか不明)branch1(内容が全く分からない)
ブランチ間の切り替え
切り替え手順:
- 「Current branch」ドロップダウンをクリック
- 切り替えたいブランチを選択
- ブランチが切り替わると、ファイルの内容も自動的に変更される
切り替え時の注意点:
- 未コミットの変更がある場合は、先にコミットするか、変更を破棄する
- ブランチごとに異なるファイル状態が保持される
- 切り替え後は、そのブランチの最新状態がローカルに反映される
作業用ブランチでの開発
実際の作業手順:
- ブランチ作成
- mainブランチから作業用ブランチを作成
- 分かりやすい名前を付ける
- ファイル編集
- 普通のファイルと同様に編集
- 複数のファイルを変更してもOK
- コミット
- 変更内容をブランチにコミット
- mainブランチには影響しない
- テスト
- 変更が正しく動作するか確認
- 問題があれば追加の修正とコミット
7.3 マージ(統合)の基本概念と実践
Pull Requestの概要
Pull Request(PR)は、ブランチでの変更をメインブランチに統合する前に、チームメンバーにレビューを依頼する機能です。コードの品質を保ち、チーム全体で知識を共有するための重要なプロセスです。
マージとは何か
「マージ」は、作業用ブランチでの変更を、mainブランチに統合することです。実験が成功した場合に、その成果を本流に取り込む作業です。
マージの流れ:
Before:
main ─●─●─●─────── (安定版)
│
feature └●─●─● (新機能)
After:
main ─●─●─●─●───── (新機能が統合された安定版)
PRの種類とパターン
Pull Requestには様々な種類があります。新機能追加、バグ修正、ドキュメント更新など、目的に応じて適切なPRタイプを選択することが重要です。
GitHub Desktopでのマージ手順
1. mainブランチに切り替え
- 「Current branch」からmainブランチを選択
- 統合先のブランチに移動
2. マージの実行
- メニューから「Branch」→「Merge into current branch」
- マージしたいブランチを選択
- 「Create a merge commit」をクリック
3. マージ完了の確認
- 変更内容がmainブランチに反映されていることを確認
- コミット履歴にマージコミットが追加される
PR 作成ワークフロー
Pull Requestの作成からマージまでの一連の流れを理解し、効率的なチーム開発を実現しましょう。
最小手順(CLI):clone → branch → commit → push → PR
GitHub Desktop ではなくターミナルで作業する場合でも、流れは同じです。ここでは最小手順だけをまとめます。
前提:
- Git がインストール済み
- リモートは
origin、統合先は<default-branch>(例:main。プロジェクトにより異なるため要確認) - PR 作成はブラウザ、または GitHub CLI(
gh)を利用(任意)
1) リポジトリを clone して移動します。
git clone https://github.com/<owner>/<repo>.git
cd <repo>
2) 最新の既定ブランチ(ここでは <default-branch>)を取得し、作業用ブランチを作成します。
git switch <default-branch>
git pull --ff-only
git switch -c feat/<topic>
# 参考: 古い Git の場合
# git checkout -b feat/<topic>
3) 変更をステージし、コミットします(不要なファイルを混ぜない)。
git status
git add <file1> <file2>
# 参考: 変更範囲を確認しながらステージする場合
# git add -p
git commit -m "docs: update ..."
4) リモートへ push します。
git push -u origin feat/<topic>
5) Pull Request を作成します。
- ブラウザ: GitHub 上で
feat/<topic>から<default-branch>への PR を作成する - GitHub CLI(任意):
gh pr create --base <default-branch> --head feat/<topic> --title "..." --body "..."
よくある失敗と回避(最小)
mainのまま作業してしまう:git branch --show-currentでブランチ名を確認してから編集する- 意図しないファイルまでコミットする:
git statusで差分を確認し、git add <file>またはgit add -pを使う git pushで upstream エラーになる: 初回はgit push -u origin <branch>を使う- PR が肥大化する: 目的を 1 つに絞り、無関係な整形やリファクタを混ぜない
PRをマージする前の最小ゲート
Pull Request は「作ったら終わり」ではありません。初心者向けの最小ゲートとして、少なくとも次を確認してからマージします。
| ゲート | 確認すること | 証跡の残し方 |
|---|---|---|
| 目的と範囲 | PR が 1 つの目的に絞られている | PR body に概要、変更範囲、関連 Issue を書く |
| レビュー | 指摘本文、inline comment、suggestion を全件確認した | 修正した場合は返信し、不要な場合は理由を書く |
| conversation | 未解決の review thread が残っていない | GitHub 上で Resolve / Unresolve の状態を確認する |
| CI | 必須チェックが成功している | Checks タブで失敗 job がないことを確認する |
| merge 後 | main のチェックと公開先に反映された | merge 後の Actions / Pages / 動作確認を Issue に記録する |
ブランチ保護や ruleset を使うと、レビュー、status checks、conversation resolution などをマージ条件として機械的に要求できます。本書では、個人学習では任意、チーム開発では最低限の merge gate として早めに導入することを推奨します。
branch protection rule と rulesets の整理(2026-07-19時点)
GitHub 公式仕様では、branch protection rule と rulesets は別機能です。rulesets を branch protection の単なる名称変更として扱わないでください。
- branch protection rule は、特定の branch 名または
fnmatchpattern を対象に設定します。ただし、同じ branch に同時適用される branch protection rule は常に 1 件だけです。優先順位は、specific branch rule が最優先、同じ specific branch を指す rule 同士では古い rule が優先、*などの特殊文字を含む wildcard rule 同士では作成順で古い rule が優先、です。 - rulesets は branch または tag を対象にでき、複数の ruleset を同じ branch や tag に重ねて適用できます。さらに rulesets は branch protection rule とも重なって評価され、同じ種類の rule が複数定義されている場合は、より厳しい設定が有効になります。
- active ruleset の確認 は admin 権限なしでも可能です。read 権限があれば、リポジトリの
/rulesや branch 一覧から対象 ruleset を確認できます。Pull Request の merge box に rule が表示された場合は、merge を妨げている条件も確認できます。 - enforcement status は、Free / Pro / Team 向けの一般 docs では
ActiveとDisabledが案内されています。Enterprise Cloud 向け docs ではEvaluateも案内されており、利用できる環境では Rule Insights で非強制の評価結果を見てからActiveへ進めます。
GitHub Docs(2026-07-19確認)
- About protected branches
- Managing a branch protection rule
- About rulesets
- Creating rulesets for a repository
- Managing rulesets for a repository
作業用ブランチの削除
マージが完了したら、不要になった作業用ブランチを削除できます:
削除手順:
- 「Current branch」ドロップダウンを開く
- 削除したいブランチの右側にある「×」をクリック
- 「Delete」で確認
削除の安全性:
- マージ済みのブランチは安全に削除可能
- 変更内容はmainブランチに保存されている
- 必要に応じて同じ名前で再度ブランチを作成可能
7.4 PR レビューと運用(テンプレート / CODEOWNERS)
PR テンプレートの構造
効果的なPull Requestのために、テンプレートを活用しましょう。一貫性のある情報提供とレビュー効率の向上が期待できます。
このリポジトリでは、PR テンプレート例を .github/PULL_REQUEST_TEMPLATE.md として同梱しています。自分のプロジェクトで使う場合は、同ファイルをコピーして「必要最小限」から始めるのがおすすめです。
最低限そろえるとよい項目(例)
- 目的(何を直す/追加するか)
- 変更内容(概要)
- 影響範囲(影響する/しない)
- 検証(自動テスト/手動確認)
- ロールバック(失敗時の戻し方)
- 関連Issue(Closes #xxx)
※ AI支援を使う場合は、「AI支援の開示(任意)」を追加しておくと、後から検証責任の所在が曖昧になりにくくなります。
AI 支援の運用ルール(機密入力の禁止、確認観点など)は、次のポリシーを参照してください。
- AI利用ポリシー(テンプレ):https://github.com/itdojp/github-guide-for-beginners-book/blob/main/AI_USAGE_POLICY.md
PR レビュー状態
Pull Requestのレビュープロセスでは、様々な状態があります。各状態の意味を理解し、適切なアクションを取ることが重要です。
PRディスカッション管理
Pull Requestでのディスカッションを効果的に管理することで、チーム全体のコミュニケーション品質と開発効率を向上させましょう。
AI生成PRのレビュー観点(最小セット)
AI生成のPull Requestは「速く作れる」一方で、意図・検証・安全性が省略されがちです。レビューでは「AIが作ったか」ではなく、次の観点で確認すると、主観ではなく手順として運用できます。
- 変更意図の一致:Issueの背景/目的・受入基準に一致しているか
- 検証の証跡:テスト結果や手動確認手順(ログ/スクリーンショット)が残っているか
- 差分の過剰さ:関係ないリファクタやフォーマット変更が混ざっていないか
- 依存関係/設定変更:更新理由と影響(リスク)が説明されているか
- Secrets/個人情報:トークン・秘密鍵・顧客情報・ログの貼付がないか
- ロールバック可能性(例:
git revertで戻しやすいか):PRが小さく、ロールバック手順が明記されているか
これらは、PR テンプレート(.github/PULL_REQUEST_TEMPLATE.md)のチェック欄としても運用できます。
CODEOWNERSでレビュー担当を自動で割り当てる(発展)
チームで運用する場合、「誰がレビュー責任を持つか」を仕組みで決めておくと、レビューが詰まりにくくなります。その代表例が CODEOWNERS です。
- 設定ファイル:
.github/CODEOWNERS - できること: 特定のパス(例:
docs/)の変更が入ったときに、担当者(ユーザー/チーム)へレビュー依頼を自動化できる
このリポジトリでは、例として manuscript/**(本文)・docs/**(公開サイト)・src/**(元原稿)を CODEOWNERS に記載しています。自分のプロジェクトで使う場合は、まずは 「docs/ は文書担当」 だけ決めると運用しやすくなります。
また、CODEOWNERS は パターンの順序が重要で、複数マッチする場合は「最後にマッチした行」が優先されます。
レビューが詰まるときの対処(例)
- 代替担当(バックアップ)を決め、CODEOWNERSに追加する
- ローテーション(当番表)で担当を回す(人に依存しない)
- 必須レビュー数や必須チェック(CI)と組み合わせ、例外運用の手順も決める
PRマージ戦略
Pull Requestをマージする際には、様々な戦略があります。プロジェクトのポリシーや履歴管理の方針に応じて、適切なマージ戦略を選択しましょう。
PR自動化ツール
効率的なチーム開発のために、PRプロセスの一部を自動化することができます。CI/CD、自動テスト、コード品質チェックなどのツールを活用しましょう。
ブランチワークフローパターン(参考)
7.5 コンフリクト(競合)の理解と解決
コンフリクト(競合)は、同じファイルの同じ箇所が、異なるブランチで別々の内容に変更された場合に発生します。
コンフリクトが発生する原因
発生例:
main ブランチ:
<h1>Welcome to Our Website</h1>
feature ブランチ:
<h1>ようこそ私たちのウェブサイトへ</h1>
この状態でマージしようとすると、Gitは「どちらが正しいか分からない」状態になります。
コンフリクトの種類
1. 内容の競合
- 同じ行が異なる内容に変更されている
- 最も一般的なコンフリクト
2. 削除と変更の競合
- 一方で削除、もう一方で変更されたファイル
- どちらを採用するか判断が必要
3. ファイル名の競合
- 同じファイルが異なる名前に変更されている
- 稀だが、解決が複雑
GitHub Desktopでのコンフリクト解決
1. コンフリクト発生の通知
- マージ時にコンフリクトが発生すると警告が表示
- 「Resolve conflicts」ボタンが表示される
2. 外部エディタでの解決
- 「Open in External Editor」をクリック
- VS Codeなどのエディタでコンフリクトファイルを開く
3. コンフリクトマーカーの理解
<<<<<<< HEAD
Welcome to Our Website (mainブランチの内容)
=======
ようこそ私たちのウェブサイトへ (featureブランチの内容)
>>>>>>> feature-branch
4. 解決方法の選択
選択肢1:片方を採用
<h1>ようこそ私たちのウェブサイトへ</h1>
選択肢2:両方を統合
<h1>Welcome to Our Website / ようこそ私たちのウェブサイトへ</h1>
選択肢3:全く新しい内容
<h1>私たちのサイトへようこそ</h1>
5. 解決完了
- コンフリクトマーカーを全て削除
- ファイルを保存
- GitHub Desktopで「Mark as resolved」
- 「Continue merge」でマージ完了
コンフリクト予防のベストプラクティス
1. 頻繁なマージ
- 長期間ブランチを分離させない
- 定期的にmainブランチの変更を取り込む
2. 小さな変更単位
- 大規模な変更を避ける
- 機能単位での細かいブランチ作成
3. チーム内でのコミュニケーション
- 同じファイルを編集する際は事前相談
- 作業範囲の明確化
4. ファイル構成の工夫
- 機能ごとにファイルを分離
- 共通部分の変更は慎重に
まとめ
この章では、ブランチを使った安全な開発手法について学びました:
ブランチの基本概念
- 実験用のコピーを作成する仕組み
- mainブランチ(安定版)と作業ブランチの分離
- 日常生活の類推による理解
実践的なブランチ操作
- GitHub Desktopでのブランチ作成と切り替え
- 適切なブランチ命名規則
- 作業用ブランチでの安全な開発
マージによる統合
- 作業ブランチからmainブランチへの統合
- マージ完了後のブランチ削除
- 変更履歴の保持
PRコンフリクト解決
コンフリクト解決
- 競合が発生する原因の理解
- 実践的な解決手順
- 予防のためのベストプラクティス
PR品質ゲート
コード品質を維持するために、PRに品質ゲートを設定しましょう。自動テスト、コードレビュー、セキュリティチェックに加えて、未解決の review thread が 0 件であること、必須 status checks 成功、merge 後確認を組み合わせると、変更の説明責任を保ちやすくなります。
PRメトリクス分析
Pull Requestのメトリクスを分析することで、チームの開発効率やコード品質を継続的に改善できます。レビュー時間、マージ率、コンフリクト発生率などの指標を活用しましょう。
次の章では、Issue 管理とプロジェクト管理について学習します。
理解度確認:
□ ブランチの概念を理解し、適切に作成・切り替えができる
□ マージ操作により変更を安全に統合できる
□ 基本的なコンフリクトを自力で解決できる
□ ブランチを使った開発ワークフローを実践できる
□ 予防的なベストプラクティスを理解している
次の一手(文書運用に繋げる)
文書運用(Docs-as-Code)を前提にする場合は、次の 1 ステップを完了させると「運用が回る状態」に近づきます。
- 文書変更の PR を 1 件作成し、レビュー→マージまで完了する(Issue と紐づける)
参照:
- Docs-as-Code:/github-guide-for-beginners-book/chapters/chapter-docs-as-code/
- Issue / Projects:/github-guide-for-beginners-book/chapters/chapter-issue-management/