サイトアイコンmaita tomoya dev io

チェックポイント: チームで協業する

バージョン管理

チェックポイント: チームで協業する

このチェックポイントでは、Git/GitHubを使ったチーム開発のワークフローを実践的に学びます。1人で複数の役割をシミュレーションしながら、ブランチ戦略、プルリクエスト、コンフリクト解決、Issue管理を体験します。


この演習の目的

実務では1人で開発することはほぼありません。チーム開発で必要になるGit操作を、シミュレーション形式で安全に練習します。

学ぶスキル実務での重要度
ブランチ戦略非常に高い
プルリクエスト非常に高い
コードレビュー非常に高い
コンフリクト解決高い
Issue管理高い

要件リスト

  • GitHubにリポジトリを作成しプッシュする
  • developブランチを作成してブランチ戦略を導入する
  • feature branchで開発してPRを作成する
  • PRをレビューしてマージする
  • 意図的にコンフリクトを発生させて解決する
  • Issueを作成してPRと連携する

事前準備

GitHubアカウントの確認

# Git設定の確認
git config --global user.name
git config --global user.email

# GitHub CLIのインストール(まだの場合)
# macOS
brew install gh

# 認証
gh auth login

演習1: リポジトリ作成とブランチ戦略の決定

リポジトリを作成する

mkdir team-practice
cd team-practice
git init

READMEを作成して初回コミット

cat << 'EOF' > README.md
# チーム開発練習プロジェクト

簡単なプロフィールページを共同開発するプロジェクトです。

## ブランチ戦略

- main: 本番環境用。直接コミット禁止。
- develop: 開発用の統合ブランチ。
- feature/*: 機能開発用。developから分岐し、developにマージ。
- fix/*: バグ修正用。developから分岐し、developにマージ。
EOF

git add README.md
git commit -m "初回コミット: READMEを追加"

GitHubにリポジトリを作成してプッシュ

gh repo create team-practice --public --source=. --remote=origin --push

developブランチを作成

git checkout -b develop
git push -u origin develop

ブランチ保護ルールの解説

実務ではmainブランチに直接プッシュできないように保護ルールを設定します。GitHubの設定画面で以下を有効にします。

  • Require a pull request before merging: マージ前にPR必須
  • Require approvals: 承認が必要(最低1人)
  • Require status checks to pass: CI/CDが通ることを必須にする

GitHubの「Settings」 > 「Branches」 > 「Add branch protection rule」から設定できます。


演習2: feature branchでの開発フロー

2つの機能を別々のブランチで開発し、それぞれPRを作成します。

機能A: HTMLの骨格を作成

# developから新しいブランチを作成
git checkout develop
git checkout -b feature/html-structure

# ファイルを作成
cat << 'EOF' > index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>チームプロフィール</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <header>
    <h1>チームメンバー紹介</h1>
  </header>
  <main>
    <section class="profiles">
      <div class="profile-card">
        <h2>メンバーA</h2>
        <p>フロントエンド担当</p>
      </div>
    </section>
  </main>
  <footer>
    <p>チーム開発練習プロジェクト</p>
  </footer>
</body>
</html>
EOF

# コミットしてプッシュ
git add index.html
git commit -m "feat: HTMLの骨格を追加"
git push -u origin feature/html-structure

PRを作成

gh pr create \
  --base develop \
  --title "feat: HTMLの骨格を追加" \
  --body "## 概要
HTMLファイルの基本構造を作成しました。

## 変更内容
- index.htmlを新規作成
- ヘッダー、メインコンテンツ、フッターの基本構造

## 確認事項
- [ ] HTMLの構文エラーがないこと
- [ ] セマンティックなタグが使われていること"

演習3: PRレビューとコードレビューの練習

レビューのチェックポイント

PRをレビューする際は以下の観点で確認します。

## コードレビューの観点

1. 機能面
   - 要件を満たしているか
   - エッジケースは考慮されているか

2. コード品質
   - 命名は適切か
   - 重複したコードはないか
   - 不要なコメントや未使用のコードはないか

3. セキュリティ
   - 秘匿情報がハードコードされていないか
   - ユーザー入力のバリデーションはあるか

4. パフォーマンス
   - 不要なDOM操作はないか
   - 画像は最適化されているか

GitHub上でレビューコメントを付ける

# PRの内容を確認
gh pr view 1

# PRの差分を確認
gh pr diff 1

# レビューコメントを残す(Approve, Request Changes, Comment)
gh pr review 1 --approve --body "HTMLの構造が適切です。LGTMです。"

# PRをマージ
gh pr merge 1 --merge

LGTM: 「Looks Good To Me(私から見て問題ない)」の略で、コードレビューでよく使われる承認フレーズです。

マージ後にdevelopブランチを更新

git checkout develop
git pull origin develop

演習4: コンフリクト解決の実践

意図的にコンフリクトを発生させ、解決方法を練習します。

ブランチAでfooterを変更

git checkout develop
git checkout -b feature/footer-update-a

index.htmlのfooter部分を変更します。

<footer>
  <p>Copyright 2026 チーム開発練習プロジェクト</p>
</footer>
git add index.html
git commit -m "feat: フッターにCopyright表記を追加"
git push -u origin feature/footer-update-a

ブランチBで同じfooterを別の内容に変更

git checkout develop
git checkout -b feature/footer-update-b

index.htmlのfooter部分を別の内容に変更します。

<footer>
  <p>チーム開発練習 - 2026年制作</p>
  <nav>
    <a href="#">プライバシーポリシー</a>
  </nav>
</footer>
git add index.html
git commit -m "feat: フッターにナビゲーションリンクを追加"
git push -u origin feature/footer-update-b

ブランチAをまずdevelopにマージ

gh pr create --base develop --title "feat: フッターにCopyright追加" --body "フッター更新A"
# 作成されたPR番号を確認して指定する(例: 2番の場合)
gh pr merge 2 --merge

ブランチBをマージしようとするとコンフリクト発生

git checkout feature/footer-update-b
git merge develop

以下のようなコンフリクトが表示されます。

<<<<<<< HEAD
    <p>チーム開発練習 - 2026年制作</p>
    <nav>
      <a href="#">プライバシーポリシー</a>
    </nav>
=======
    <p>Copyright 2026 チーム開発練習プロジェクト</p>
>>>>>>> develop

コンフリクトを解決する

両方の変更を統合します。

<footer>
  <p>Copyright 2026 チーム開発練習プロジェクト</p>
  <nav>
    <a href="#">プライバシーポリシー</a>
  </nav>
</footer>
git add index.html
git commit -m "merge: developをマージしてコンフリクトを解決"
git push origin feature/footer-update-b

コンフリクト解決のコツ:

  • <<<<<<<から=======が自分の変更
  • =======から>>>>>>>が相手の変更
  • 両方の意図を理解した上で、最適な形に統合する
  • 解決後は必ず動作確認をする

演習5: Issue管理とProject board活用

Issueを作成する

# 機能追加のIssue
gh issue create \
  --title "CSSでプロフィールカードをスタイリングする" \
  --body "## 概要
プロフィールカードにCSSスタイルを適用する。

## 要件
- カード形式のレイアウト
- ホバーエフェクト
- レスポンシブ対応

## 完了条件
- [ ] カードスタイルが適用されている
- [ ] ホバーで影が変わる
- [ ] モバイルで1カラムになる" \
  --label "enhancement"

# バグ修正のIssue
gh issue create \
  --title "viewportメタタグの確認" \
  --body "モバイル表示が正しく動作するか確認する" \
  --label "bug"

IssueとPRを連携する

PRの本文にCloses #3のように記述すると、PRがマージされた際にIssueが自動的にクローズされます。

git checkout develop
git checkout -b feature/profile-styling

# CSSファイルを作成(省略)

git add style.css
git commit -m "feat: プロフィールカードのスタイルを追加 (#3)"
git push -u origin feature/profile-styling

gh pr create \
  --base develop \
  --title "feat: プロフィールカードのスタイリング" \
  --body "Closes #3

プロフィールカードにCSSスタイルを追加しました。"

GitHub Projects(Project board)

GitHub Projectsを使うとタスクの進捗をカンバン形式で管理できます。

カラム説明
Todoまだ着手していないタスク
In Progress作業中のタスク
In Reviewレビュー待ちのタスク
Done完了したタスク

GitHubの「Projects」タブから作成できます。IssueやPRを各カラムにドラッグして管理します。


完了チェックリスト

チェック項目確認
GitHubにリポジトリを作成できた
developブランチを作成できた
feature branchを作成して開発できた
PRを作成できた
PRのレビューコメントを付けられた
PRをマージできた
コンフリクトを意図的に発生させられた
コンフリクトを正しく解決できた
Issueを作成できた
IssueとPRを連携できた

発展課題(任意)

  • ブランチ保護ルールを設定する
  • GitHub Actionsで自動テスト(CI)を追加する
  • CODEOWNERSファイルでレビュー担当者を自動指定する
  • Gitのrebase、cherry-pick、stashを実践する
  • コミットメッセージの規約(Conventional Commits)を導入する

参考リンク