📄
概念 📚 beginner-stepup

GitHubワークフロー

PRベースの開発フロー・ブランチ戦略・コンフリクト解消の実践的な進め方を理解する

GitHubはGitリポジトリのホスティングサービスであると同時に、コードレビュー・Issue管理・CI/CDの実行基盤でもある。単なるコードの置き場ではなく、開発プロセス全体を支えるプラットフォームとして使いこなすことが重要。

基本用語

リモートリポジトリ: GitHub上に存在するリポジトリ。origin という名前でローカルに登録されることが多い。

フォーク(Fork): 他人のリポジトリを自分のアカウントにコピーすること。オープンソースに貢献するときや、元リポジトリの変更権限がないときに使う。

プルリクエスト(PR): あるブランチの変更を別のブランチにマージするための提案。コードレビューとディスカッションの場として機能する。

GitHub Flowによる開発サイクル

最もシンプルなブランチ戦略「GitHub Flow」:

1. main から feature ブランチを作成
2. ローカルで実装・コミット
3. GitHub に push
4. PR を作成(base: main ← compare: feature/xxx)
5. レビューを受けて修正
6. main にマージ
7. feature ブランチを削除
git checkout -b feature/add-login    # ブランチ作成
# ... 実装 ...
git add .
git commit -m "feat: ログイン機能を追加"
git push origin feature/add-login    # GitHubにpush
# → GitHub上でPRを作成

PRの書き方

良いPRは変更の「Why(なぜ)」を伝える。「What(何を変えたか)」はコードを見ればわかる。

## 概要
ユーザー認証にJWT方式を採用。セッションストアが不要なため
スケールアウト時にも対応しやすい。

## 変更内容
- JWTトークンの生成・検証ロジックを追加
- 認証ミドルウェアを実装
- ログイン・ログアウトAPIエンドポイントを追加

## テスト方法
1. `POST /api/auth/login` に email/password を送信
2. レスポンスのtokenをAuthorizationヘッダに付けてAPIを呼び出す
3. 無効なtokenで401が返ることを確認

コンフリクトの解消手順

PRをマージしようとするとコンフリクトが発生することがある。解消手順:

# mainの最新を取り込む
git checkout main
git pull origin main

# 作業ブランチに戻る
git checkout feature/my-feature

# mainの変更をマージ
git merge main

# コンフリクトしたファイルを編集して解消
# (コンフリクトマーカー <<<<<< を取り除く)
git add .
git commit -m "fix: mainとのコンフリクトを解消"
git push origin feature/my-feature

.github/workflows との連携

PRを作成すると、GitHub Actionsが自動的にテスト・Lintを実行するよう設定できる。CIが通らないとマージできない設定にすることで品質を担保する(CI/CDの詳細はb19参照)。

Issues と Projects

Issue: バグ報告・機能要望・タスクを管理する単位。#123 のように番号で参照できる。コミットメッセージに fix #123 と書くとマージ時に自動クローズ。

Projects: KanbanボードやSpreadsheetでIssueとPRを管理する機能。個人開発でも「やること・進行中・完了」の可視化に使える。

個人開発での使い方

チーム開発だけでなく一人でも活用できる:

  • コミット履歴: 「なぜこのコードを書いたか」を未来の自分への説明として残す
  • Issue: 思いついたタスクをすぐ記録しておく
  • PR: 機能ブランチでの実装を振り返り、自分でレビューしてからマージする習慣をつける

参考リソース


確認クイズ

Q1. GitHubにおける「リモートリポジトリ」とは何か。ローカルリポジトリとの違いを含めて説明せよ。

正解: GitHub上に存在するリポジトリ。ローカルリポジトリは自分のPC上に存在し、リモートリポジトリはGitHub等のサーバー上に存在する。

解説: ローカルリポジトリはネット接続なしで操作できるが、チームと共有するにはリモートへのpush/pullが必要。origin はリモートリポジトリのデフォルト名として慣例的に使われる。

Q2. フォーク(Fork)はどのような目的で使うか。A. 自分のブランチを作成する B. 他人のリポジトリを自分のアカウントにコピーする C. リモートリポジトリを削除する D. コンフリクトを解消する

正解: B

解説: フォークは元リポジトリへの変更権限がない場合に使う。オープンソース貢献では、フォーク→変更→プルリクエストの流れが標準的。自分のアカウント配下のフォークには自由にpushできる。

Q3. プルリクエスト(PR)の主な役割は何か。

正解: あるブランチの変更を別のブランチにマージするための提案。コードレビューとディスカッションの場として機能する。

解説: PRはコードの変更内容を可視化し、レビュアーがコメントや修正依頼を行えるプラットフォームを提供する。マージする前に品質を担保するための重要なプロセス。

Q4. GitHub Flowの正しい手順を並べよ。A. mainにマージ → B. featureブランチ作成 → C. PRを作成 → D. ローカルで実装・コミット → E. GitHubにpush → F. レビューを受けて修正 → G. featureブランチを削除

正解: B → D → E → C → F → A → G

解説: mainから派生させてfeatureブランチで開発し、PRを通じてレビューを経てmainにマージするのがGitHub Flowの流れ。マージ後はブランチを削除してリポジトリをきれいに保つ。

Q5. 良いPRの説明文で重視すべきは「What(何を変えたか)」か「Why(なぜ変えたか)」か。その理由も答えよ。

正解: Why(なぜ変えたか)

解説: 「何を変えたか」はコードを見ればわかる。PRの説明文では変更の背景・意図・意思決定の理由を伝えることが重要。未来のレビュアーや自分自身が変更の文脈を理解するための貴重な記録になる。

Q6. コンフリクトが発生した場合、最初に行うべき操作はどれか。A. feature ブランチを削除する B. main の最新を取り込む C. PRを閉じる D. 新しいブランチを作る

正解: B

解説: コンフリクトはmainとfeatureブランチの変更が競合した際に起きる。まず git checkout main && git pull origin main でmainを最新化し、その後featureブランチにmergeすることで競合箇所を特定して解消できる。

Q7. GitHub Actionsを活用してPR作成時に自動テスト・Lintを実行するとき、設定ファイルはどのディレクトリに置くか。

正解: .github/workflows/ ディレクトリ

解説: .github/workflows/ 以下にYAMLファイルを置くことでGitHub Actionsのワークフローが定義される。CIが通らないとマージできないブランチ保護設定と組み合わせることで品質ゲートとして機能する。

Q8. Issueのコミットメッセージに fix #123 と書くと何が起きるか。

正解: そのコミットを含むPRがmainにマージされた時点で、Issue #123 が自動的にクローズされる。

解説: GitHubはコミットメッセージやPR本文内の fix #Nclose #Nresolve #N といったキーワードを認識し、マージ時に対応するIssueを自動クローズする。手動でクローズし忘れることを防げる。

Q9. GitHub Projectsを個人開発で活用するメリットは何か。

正解: IssueとPRをKanbanボードやSpreadsheetで管理し、「やること・進行中・完了」を可視化できる。

解説: 個人開発でもタスクが積み重なると何から手を付けるべきか見えにくくなる。ProjectsでIssueを整理することで優先順位を保ちながら進捗を管理でき、モチベーション維持にも役立つ。

Q10. 個人開発でブランチを切らずにmainへ直接コミットし続けることの問題点を説明せよ。

正解: 変更の単位が不明確になり、特定の機能だけをロールバックしにくくなる。自己レビューの機会も失われる。

解説: featureブランチを切ってPRを作る習慣は、チーム開発だけでなく個人開発でも有効。変更を小さく保ち、PRで振り返ることで「なぜこのコードを書いたか」を記録に残せる。CI/CDとも組み合わせやすい。

生きているコード

本ドキュメントで扱ったパターンの完全な動作コードは、メンター側リポジトリの参照ブランチで確認できます。

  • 対応 Week: W1
  • 参照ブランチ:
  • W1: reference/week-1
  • 対応 checklist 項目: N8

ブランチの作り方・見方は b00-curriculum-map を参照してください。

📚 beginner-stepup 全 53 章
導入編 13 章 ● この編を閲覧中
  1. 1. 📄Web とは何か
  2. 2. 📄URL を打ってから画面が表示されるまで
  3. 3. 📄ネットワーク基礎(TCP/IP・DNS・HTTPS)
  4. 4. 📄【発展】物理層から通信が成立するまで(電力・Ethernet・Wi-Fi・Bluetooth)
  5. 5. 📄WSL2・Docker セットアップ詳細(Windows 向け)
  6. 6. 📄環境構築の段階的導入(macOS / Windows)
  7. 7. 📄カリキュラム全体マップ(Week × 教材 × 参照ブランチ × 要求チェックリスト)
  8. 8. 📄このカリキュラムの使い方(SQL・Python・Dify経験者向け)
  9. 9. 📄シェル・ターミナル基礎
  10. 10. 📄Windows で完全にゼロから始める開発環境構築(Week 1)
  11. 11. 📄Git基礎
  12. 12. 📄GitHubワークフロー
  13. 13. 📄パッケージ管理(pnpm workspace)
応用編 16 章
  1. 1. 📄AWSインフラ基礎
  2. 2. 📄AWS Budget Alert の設定(Month 5 Week 17)
  3. 3. 📄環境変数管理
  4. 4. 📄Bastion EC2 と SSH ProxyJump(Month 5 Week 18)
  5. 5. 📄CI/CD基礎
  6. 6. 📄ECR への Docker イメージ push と App EC2 デプロイ(Month 5 Week 19)
  7. 7. 📄テスト設計の基本
  8. 8. 📄CloudFront + S3 + ALB で公開する(Month 5 Week 20)
  9. 9. 📄CLAUDE.md・プロジェクト設定
  10. 10. 📄PR レビュー 5 観点ルーブリック(全 Week 共通)
  11. 11. 📄タスク分解・仕様の書き方
  12. 12. 📄Playwright で E2E テスト(Month 6 Week 22)
  13. 13. 📄生成コードのレビュー・デバッグの勘所
  14. 14. 📄Trivy で脆弱性スキャン(Month 6 Week 23)
  15. 15. 📄CloudWatch Logs の読み方と運用(Month 6 Week 23)
  16. 16. 📄PDF ポートフォリオの自動生成(Month 6 Week 24)