PROJECT MANAGEMENT

Issue & PR 活用編

プロジェクト管理の基本

Issue で課題を管理 PR でコードをレビュー チームで効率よく開発

Arrow keys / g / G

この編の全体像

ゴール: Issue・PRを使いこなし、開発プロセスを可視化・整理できるようになる

Section 1

Issueとは

課題・タスク・要望の記録と追跡
→ タスクやバグを「忘れない」「共有できる」仕組み

Section 2

良いIssue/PRの書き方

再現手順・目的・変更内容の記述
→ 他の人(未来の自分)が理解できる記録を残す

Section 3

テンプレート

Issue / PRテンプレートの作成と運用
→ 書き方を統一して品質を安定させる

Section 4

ラベル・マイルストーン

分類と進捗管理の仕組み
→ 優先度と進捗を一目で把握する

Section 5

レビュープロセス

PRレビューの流れとベストプラクティス
→ PRを通じてコード品質を保つ

Section 6

自動化

GitHub Actions・自動ラベル・自動クローズ
→ 手作業を減らしてプロセスを効率化する

Issue とは?

プロジェクトの課題・タスク・要望を記録・追跡する仕組み

BEFORE: チャットで管理

「あのバグ直った?」
「どのバグ?」
「先週言ったやつ」
「ログ流れちゃった...」
会話が流れて追跡不能

AFTER: Issue で管理

#42 ログインボタン非表示バグ
|- 担当: @tanaka
|- ラベル: bug, priority:high
|- 状態: In Progress
誰が・何を・いつまでか明確

Bug Report

Feature Request

Task Tracking

Discussion

良い Issue の書き方

New Issue
Title
[Bug] ログインボタンが iOS Safari で表示されない
Description
## 概要
ログインページのボタンが iOS Safari 17 で非表示になる

## 再現手順
1. iPhone で /login にアクセス
2. ページ読み込み完了を待つ
3. ログインボタンが表示されない

## 期待する動作
ログインボタンが表示される
## 実際の動作
ボタンが display:none になっている

## 環境
iOS 17.2 / Safari / iPhone 15
bug priority: high Assignee: @tanaka

ポイント: [種類] 具体的なタイトル + 再現手順 + 期待/実際の比較

Issue テンプレート

テンプレートを用意すれば、誰でも良い Issue が書ける

issue-templates
$ tree .github/ISSUE_TEMPLATE/
.github/ISSUE_TEMPLATE/
|-- bug_report.md
|-- feature_request.md
`-- config.yml

bug_report.md

---
name: Bug Report
about: バグの報告
labels: bug
---

## 概要
<!-- バグの簡潔な説明 -->

## 再現手順
1.
2.

## 期待する動作

## 実際の動作

## スクリーンショット

feature_request.md

---
name: Feature Request
about: 新機能の提案
labels: enhancement
---

## 解決したい課題
<!-- 何に困っている? -->

## 提案する解決策

## 代替案

## 追加情報

ラベル運用

ラベルで Issue を分類し、一目で状況を把握

my-app / Issues 6 Open
ログインボタンが非表示になるバグ bug priority: high #42 opened 2h ago
ダークモード対応 enhancement frontend #41 opened 1d ago
README にインストール手順を追加 documentation good first issue #40 opened 2d ago
API レスポンスが遅い bug priority: medium backend #39 opened 3d ago
bug

不具合

enhancement

機能改善

good first issue

初心者歓迎

priority: high

緊急度高

documentation

ドキュメント

Milestone & Project Board

MILESTONE

v1.0 リリース

65% 完了 (13/20 issues)

Due: 2026-04-01

MILESTONE

v1.1 機能追加

20% 完了 (4/20 issues)

Due: 2026-05-15

Todo 3
API テスト追加
enhancement
エラーハンドリング改善
bug
CI/CD 設定
devops
In Progress 2
ダークモード対応 #41
enhancement
ログインバグ修正 #42
bugP:high
Done 4
初期セットアップ #1
ユーザー認証 #15
DB スキーマ設計 #20
README 作成 #22

Pull Request とは?(詳細)

単なるマージではない。PR はレビュー・議論・記録の場

🔍

コードレビュー

チームメンバーがコードを読み、品質を担保。バグの早期発見。

💬

議論の場

設計方針や実装方法について、コード上で直接コメント。

📋

変更の記録

なぜこの変更をしたのか、将来の開発者への文書になる。

品質ゲート

CI テスト通過 + レビュー承認 = マージ可能。品質を守る関門。

branch作成

commit & push

PR作成

レビュー

マージ

良い PR の書き方

Pull Request #48 Approved
fix: iOS Safari でログインボタンが非表示になるバグを修正
feature/fix-login-btn → main  |  Fixes #42
## Summary
iOS Safari 17 の CSS Grid バグにより、ログインボタンが
display:none になる問題を修正

## Changes
- LoginButton.tsx: flexbox レイアウトに変更
- login.css: Safari 用フォールバック追加
- LoginButton.test.tsx: 表示テスト追加

## Test Plan
- [x] iOS Safari 17 で表示確認
- [x] Chrome / Firefox で回帰テスト
- [x] 単体テスト追加済み

## Screenshots
[Before / After のスクリーンショットを添付]
3 files changed +45 -12 Reviewers: @sato, @yamada

ポイント: 小さく・分かりやすく・テスト付き — レビュアーの負担を減らす

PR テンプレート

.github/pull_request_template.md を配置するだけ

pull_request_template.md
## Summary
<!-- 変更の概要を1-2文で -->

## Changes
-

## Related Issue
<!-- Fixes #XX or Relates to #XX -->

## Test Plan
- [ ] テスト1
- [ ] テスト2

## Screenshots
<!-- 必要に応じて -->

## Checklist
- [ ] コードのセルフレビュー済み
- [ ] テストを追加/更新済み
- [ ] ドキュメントを更新済み

PR を作成すると自動でテンプレートが挿入される
チーム全員が同じフォーマットで書ける = レビューしやすい

PR レビュープロセス

PR 作成

レビュー依頼

コメント

修正

承認&マージ

gh CLI で PR 操作
Comment: 質問・提案 Approve: 承認 Request Changes: 修正要求

GitHub Discussions

Issue はタスク、Discussion は会話

Issue を使う場面

  • バグの報告と修正追跡
  • 具体的な機能リクエスト
  • 明確なアクションアイテム
  • 担当者をアサインしたいタスク

Discussion を使う場面

  • 設計方針の相談・アイデア出し
  • Q&A(使い方の質問)
  • アナウンス・リリースノート
  • コミュニティとの交流
💬 Discussions General Q&A Ideas Announcements
💬 v2.0 のアーキテクチャどうする? 12 replies
Docker で動かす方法を教えてください Answered
💡 モバイルアプリ版はどうでしょう? 5 replies

自動化で楽をする

GitHub Actions + コミットメッセージで手作業を減らす

コミットで Issue を自動クローズ

$ git commit -m "fix: login button
  visibility bug

  Fixes #42"


# PR がマージされると
# Issue #42 が自動でクローズされる

キーワード: fixes, closes, resolves + #番号

GitHub Actions で自動化

name: Auto Label
on:
  issues:
    types: [opened]
jobs:
  label:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/labeler@v5

その他の自動化アイデア

PR 作成時にレビュアーを自動アサイン
Issue のタイトルからラベルを自動付与
Stale な Issue を自動クローズ
マージ時に自動デプロイ

まとめ

Issue & PR を活用して、効率的なチーム開発を実現しよう

Issue

  • テンプレートで品質を統一
  • ラベルで分類・優先度管理
  • Milestone でゴールを明確に

Pull Request

  • 小さく・分かりやすい PR
  • テストプラン + スクショ添付
  • レビューで品質を担保

Discussion

  • Issue と使い分ける
  • Q&A・アイデア出しに活用
  • コミュニティを育てる

自動化

  • コミットで Issue 自動クローズ
  • GitHub Actions で省力化
  • 手作業を減らし開発に集中

Issue & PR を使いこなせば、一人でもチームでも開発がスムーズに

Appendix: コマンドリファレンス

コマンド 説明
── Issue 操作 (gh CLI) ──
gh issue create 新しいIssueを作成(タイトル・本文・ラベル等を指定可)
gh issue list リポジトリのIssue一覧を表示
gh issue close <番号> 指定したIssueをクローズ
gh issue view <番号> Issueの詳細を表示
── Pull Request 操作 (gh CLI) ──
gh pr create --title "..." --body "..." PRを作成(タイトルと本文を指定)
gh pr edit <番号> --add-reviewer ... PRにレビュアーを追加
gh pr status 自分に関連するPRのステータスを表示
gh pr view <番号> --comments PRの詳細とコメントを表示
gh pr checks <番号> PRに紐づくCIチェックのステータスを表示
gh pr review <番号> PRにレビュー(承認・修正要求・コメント)を投稿
gh pr merge <番号> --squash --delete-branch PRをスカッシュマージし、ブランチを削除
── Git コマンド ──
git commit -m "fix: ... Fixes #42" コミットメッセージにIssue番号を記載(マージ時に自動クローズ)
git add -A 全ての変更(新規・変更・削除)をステージング
git push ローカルの変更をリモートブランチにプッシュ
── Issue 自動クローズキーワード ──
Fixes #N PRマージ時にIssue #Nを自動クローズ
Closes #N PRマージ時にIssue #Nを自動クローズ(Fixesと同等)
Resolves #N PRマージ時にIssue #Nを自動クローズ(Fixesと同等)
── テンプレート配置 ──
.github/ISSUE_TEMPLATE/ Issueテンプレート用ディレクトリ
.github/pull_request_template.md PR作成時に自動挿入されるテンプレート
tree .github/ISSUE_TEMPLATE/ テンプレートファイルのディレクトリ構造を表示
── GitHub Actions (自動化) ──
actions/labeler@v5 Issue/PRにラベルを自動付与するアクション