本文へスキップ
スキルアップカレッジ

Issue とプロジェクト管理——タスクとコードを結ぶ

レッスン6:Issue とプロジェクト管理——タスクとコードを結ぶ

このレッスンで学ぶこと

  • Issue の役割と典型的な使い方を整理する
  • ラベルマイルストーン・アサインで分類する
  • GitHub Projects でタスク管理を行う発想を持つ
  • Issue と PR の連携の仕組みを理解する
  • Issue Template(テンプレート)を使う発想を持つ
  • 「タスクとコードを結ぶ」開発スタイルを把握する

前のレッスンでは、PR とコードレビューでチーム開発のリズムを掴みました。今回のレッスンでは、視点を「コード」から「タスク」に広げて、Issue と GitHub Projects を扱います。「やるべきこと」を整理し、それをコード変更とつなぐのが現代の開発スタイルです。

Issue とは何か

GitHub の「Issue」は、リポジトリに対する「やるべきこと」や「気になること」を記録する仕組みです。

Issue の典型的な用途

  • バグ報告:動かない、想定と違う挙動の報告
  • 機能要望:「こんな機能がほしい」
  • タスク:実装すべき作業の計画
  • 質問:使い方の確認
  • ディスカッション:仕様の議論
  • メモ:将来見直したいこと

GitHub の Web 画面の「Issues」タブで、リポジトリの Issue 一覧が表示されます。

Issue の構成要素

  • タイトル:何についての Issue か
  • 本文:詳細(Markdown 記法)
  • コメント:誰でも追加できる返信
  • Assignees:担当者
  • Labels:分類用のラベル
  • Milestone:マイルストーン(後述)
  • Projects:関連するプロジェクト
  • 状態:Open(未解決)/Closed(解決)

Issue の作成手順

  1. GitHub のリポジトリページ → 「Issues」タブ
  2. 「New issue」をクリック
  3. タイトルと本文を記入
  4. 必要に応じて Assignees・Labels などを設定
  5. 「Submit new issue」をクリック

💡 ポイント Issue は単なる「タスクリスト」ではなく、コードに紐づく「議論の記録」でもあります。後から見返したときに「なぜこの変更をしたか」を辿る手がかりになります。

ラベル・マイルストーン・アサイン

Issue は数が増えると、整理が必要になります。GitHub には 3 つの分類機能が用意されています。

ラベル(Labels)

Issue のカテゴリを表す色付きのタグです。リポジトリごとに自由に作成できます。

GitHub のデフォルトラベル:

ラベル 意味
bug バグ
documentation ドキュメント関連
duplicate 重複
enhancement 機能追加・改善
good first issue 新規参加者向けの簡単な課題
help wanted 助けを求める
invalid 不適切
question 質問
wontfix 対応しないと決定

組織で独自のラベル(priority-higharea-frontendneeds-review など)を追加するのも一般的です。

マイルストーン(Milestones)

複数の Issue や PR をまとめる「区切り」です。リリースバージョン、四半期目標、特定イベントなどに使います。

例:

  • v1.0.0 リリース
  • 2026 Q3 目標
  • カンファレンス前リリース

マイルストーンを設定すると、進捗率(クローズ済み Issue の割合)が自動表示されます。

アサイン(Assignees)

Issue の担当者を指定します。1 つの Issue に複数人をアサインできます。

「誰がやるか」が明確になり、進捗管理しやすくなります。

📝 補足 「ラベルは分類」「マイルストーンは時期の区切り」「アサインは担当者」の役割を分けて使うのが基本です。3 つを組み合わせると、Issue が整理されます。

GitHub Projects

GitHub Projects は、リポジトリ横断・組織レベルでタスクを管理する「カンバンボード」のような機能です。2022 年に新しいバージョン(「Projects」または「Projects v2」と呼ばれる)が一般提供開始されました。

Projects の基本

  • 複数のリポジトリの Issue や PR を集約
  • ボード(カンバン)、テーブル、ロードマップなど複数のビューが選べる
  • カスタムフィールド(優先度、見積、作業時間など)を追加できる
  • 自動化(特定の Issue を自動で列に移動など)が可能

ボードビューの例

| Todo              | In Progress       | Review            | Done             |
| Issue #1: ...     | Issue #5: ...     | PR #12: ...       | Issue #3: ...    |
| Issue #2: ...     | Issue #7: ...     | PR #15: ...       | Issue #8: ...    |
| Issue #6: ...     |                   |                   |                  |

カードを左から右へドラッグして、進捗を可視化します。

Projects の使いどころ

  • スプリント(短期の作業期間)の進捗管理
  • 製品ロードマップ
  • チーム横断のタスク管理
  • 個人のタスクリストとしても

設定の手順

  1. GitHub の組織またはユーザーページ →「Projects」タブ
  2. 「New project」をクリック
  3. テンプレート(Board、Table、Roadmap)を選択
  4. リポジトリと連携、Issue・PR を追加
  5. カラム(列)を設定

💡 ポイント Projects は強力ですが、最初は overengineering(過剰設計)になりがちです。シンプルに「Todo / In Progress / Done」の 3 列から始めて、必要に応じて拡張するのが推奨です。

Issue と PR の連携

GitHub の強みの 1 つが、「Issue と PR の連携」です。タスク(Issue)とコード変更(PR)が自動的に結びつきます。

自動クローズの記法

PR の本文または commit メッセージに、特定のキーワード + Issue 番号を書くと、PR がマージされたときに対応する Issue が自動的にクローズされます。

キーワード
close、closes、closed
fix、fixes、fixed
resolve、resolves、resolved

例:

このプルリクエストは、お問い合わせフォームの実装を含みます。

Closes #42
Fixes #43

PR がマージされると、Issue #42 と #43 が自動でクローズされます。

Issue 番号での参照

PR や Issue の本文に #42 と書くと、自動的に Issue #42 へのリンクになります。「クローズしないけど関連がある」場合に使います。

これは #42 と関連する変更です。詳細は #42 を参照してください。

ブランチ名と Issue の連携

ブランチ名に Issue 番号を含めるのも、業務でよく使われるパターンです。

feature/42-add-contact-form
fix/43-button-style
issue-42

ブランチ名から Issue がたどれると、レビュー時に「これは何の作業か」がすぐにわかります。

⚠️ 注意 Issue 番号でのリンクは、リポジトリ内では #42 で済みますが、別リポジトリの Issue を参照するときは owner/repo#42 のように省略しない形にします。

Issue Template

リポジトリで Issue を作るたびに、毎回ゼロから本文を書くのは大変です。GitHub には「Issue Template(テンプレート)」という仕組みがあります。

テンプレートの仕組み

リポジトリの .github/ISSUE_TEMPLATE/ フォルダに、Markdown ファイルとして用意します。

例:.github/ISSUE_TEMPLATE/bug_report.md

---
name: バグ報告
about: バグを報告する
title: '[BUG] '
labels: bug
assignees: ''
---

## 何が起きたか

(詳しく)

## 期待される動作

(こうあるべき)

## 再現手順

1.
2.
3.

## 環境

- OS:
- ブラウザ:
- バージョン:

リポジトリにこのファイルがあると、Issue 作成時に「バグ報告」テンプレートを選べるようになり、本文が自動的に埋まります。

典型的なテンプレート

  • バグ報告:再現手順・期待動作・環境
  • 機能要望:困っていること・提案・代替案
  • 質問:状況・知りたいこと

PR にも Pull Request Template(.github/PULL_REQUEST_TEMPLATE.md)があり、同様にテンプレ化できます。

💡 ポイント テンプレートは「書くべきことのチェックリスト」として機能します。新人や外部の人が Issue を書くときの迷いが減り、Issue の質が安定します。

タスクとコードを結ぶ開発スタイル

ここまでの内容を踏まえて、「タスクとコードを結ぶ」現代の開発スタイルを整理します。

典型的な流れ

  1. Issue を作成(「何をやるか」を明示)
  2. Issue にラベル・マイルストーン・担当者を設定
  3. 担当者がブランチを作成(ブランチ名に Issue 番号を含める)
  4. ブランチで作業・commit
  5. PR を作成(本文に「Closes #N」を書く)
  6. レビュー → マージ
  7. Issue が自動クローズ

この流れにより、「いつ・誰が・何を・なぜ」がすべて GitHub 上に残ります。後から「なぜこのコードがあるか」を辿るときの強力な記録になります。

「Issue ファースト」の発想

  • 思いついたタスクは、すぐに Issue にする
  • 「ちょっとした修正」も Issue 経由が望ましい
  • PR を作る前に Issue で議論することも

業務での開発成熟度の差は、「Issue ファースト」がどこまで浸透しているかに表れることが多いです。

個人プロジェクトでも有効

  • 「あとでやる」リストとしての Issue
  • 学習中の「わからない点」のメモ
  • 制作物の改善アイディア

個人開発でも Issue を活用すると、頭の中のタスクが GitHub に外出しされ、忘れにくくなります。

📝 補足 「Issue を作る習慣」「PR を作る習慣」「ブランチ名に Issue 番号を含める習慣」の 3 つが揃うと、開発のリズムが大きく整います。

講師の現場メモ:「Issue 文化で議論が記録に残った組織」

私(青木)が支援している中堅 IT 企業の話です。20 人の開発チームで、議論はチャットツールで行われ、決定事項は誰も記録しないまま流れていました。3 か月後に「なぜこういう実装になっているのか」を聞くと、誰も答えられない、ということが頻発していました。

私はリーダーに「Issue を議論の場として使ってみませんか」と提案しました。リーダーは「チャットで十分」と最初は懐疑的でしたが、3 か月のトライアルに同意しました。

ルールはシンプルでした。

  • 仕様変更を伴う議論は、Issue を立てて行う
  • チャットでの議論も、結論を Issue にコピーする
  • 決定事項は Issue にコメントとして残す
  • PR と Issue を必ずリンクする

3 か月後の振り返りで、

  • 「なぜこの実装か」を Issue で辿れるようになった
  • 新メンバーが「過去の議論を読んで自分でキャッチアップできる」と漏らした
  • チャットで結論が流れることがなくなった
  • レビュー時に「この決定の背景は #42 で議論された」と参照できるように

リーダーは「Issue は単なるタスクリストではなく、組織の記憶装置だった」と振り返りました。

そのときに痛感したのは、Issue 文化は「ツール導入」ではなく「組織の知識管理」だ、ということです。チャットは流れていくが、Issue は残ります。

本コースで Issue を 1 レッスン分扱うのは、皆さんの組織にも「組織の記憶装置」としての Issue の使い方を持ち帰っていただきたいからです。

まとめ

このレッスンでは、以下のことを学びました。

  • Issue はリポジトリに対する「やるべきこと」「気になること」を記録する仕組み
  • 用途:バグ報告、機能要望、タスク、質問、ディスカッション、メモ
  • ラベル(カテゴリ)、マイルストーン(時期の区切り)、Assignees(担当者)で分類
  • GitHub Projects はカンバンボードのようなタスク管理。リポジトリ横断・組織レベルで使う
  • Issue と PR の連携:「Closes #42」「Fixes #43」で自動クローズ、#42 でリンクのみ
  • ブランチ名に Issue 番号を含めるのが業務での定番(feature/42-add-contact-form など)
  • Issue Template(.github/ISSUE_TEMPLATE/)でテンプレ化、品質と統一感が上がる
  • PR Template(.github/PULL_REQUEST_TEMPLATE.md)でも同様
  • 「Issue → ブランチ → PR → マージ → Issue 自動クローズ」が現代の開発リズム
  • 「Issue ファースト」の発想:思いついたら Issue、ちょっとした修正も Issue 経由
  • 個人プロジェクトでも有効:あとでやるリスト、わからない点のメモ、改善アイディア

次のレッスンでは、GitHub Actions と Pages で自動化と公開の入口に立ちます。


確認クイズ

このレッスンの理解度をチェックしましょう。