コンテンツにスキップ
X

GitHub Issues - タスク・バグ管理

GitHub Issues(イシュー)とは、プロジェクトのタスク・バグ・質問・アイデアを記録・追跡するための機能です。 チームで共有できる ToDoリストのようなもので、「何をやるべきか」「どんな問題があるか」を一か所で管理できます。


対象読者: GitHub を使い始めて、チームでのタスク管理を学びたい方

学習時間の目安: 読了 15分 + 実践 15分

前提知識: GitHub のアカウント作成済み、Git の基本操作(add・commit)

Issues は GitHub リポジトリに組み込まれたチケット管理システムです。1 つの Issue が 1 つのタスクや問題に対応します。

たとえば次のような用途で使います。

  • 「ログインボタンが押せない」というバグを報告する
  • 「検索機能を追加したい」という新機能の要望を記録する
  • 「〇〇の実装方法を調べる」という作業タスクを作る
  • 「このアーキテクチャで良いか?」というチームへの質問を投げる

Issues を使う最大の理由は、作業の抜け漏れをなくし、チーム全員が同じ情報を見られるようにするためです。

メールやチャットでのやり取りは流れてしまいますが、Issues に記録すれば検索して見つけられます。また、誰が担当しているか・どのリリースで対応するかを明示できます。


リポジトリの「Issues」タブを開き、「New issue」ボタンをクリックします。

フィールド説明記入例
Title(タイトル)問題や作業を端的に表すログインボタンが特定のブラウザで動かない
Description(説明)詳細な情報・再現手順・期待する動作後述のテンプレート参照
Labels(ラベル)Issue の種別を分類するタグbug, enhancement など
Assignees(担当者)この Issue を担当する人@yamada
Milestone(マイルストーン)リリースバージョンや期限に紐づけるv1.2.0
Projects紐づけるプロジェクトボードSprint 3

良いタイトルは「何が問題か・何をするか」が一読して分かるものです。

評価タイトル例理由
良いiOS Safari でログインフォームが送信できないOS・ブラウザ・症状が明確
良いユーザー検索機能を追加する作業内容が明確
悪いバグ何のバグか分からない
悪い修正何を修正するか分からない

ラベルは Issue を色分けして分類するタグです。一覧を見たとき、どんな Issue があるか一目で把握できます。

ラベル意味
bugバグ・不具合の報告
enhancement新機能・改善の提案
documentationドキュメントの修正・追加
good first issue初心者でも取り組みやすい Issue
help wanted他の人の協力を求めている
question質問・議論
wontfix対応しないと判断した Issue
duplicate同じ内容の Issue が既に存在する
invalid不正な報告や確認できない問題

チームの運用に合わせてカスタムラベルを作れます。よく使われるカスタムラベルの例を示します。

カスタムラベル意味
priority: high優先度高
priority: low優先度低
area: frontendフロントエンド関連
area: backendバックエンド関連
status: blocked他の Issue 待ちでブロック中
type: refactorリファクタリング

「Issues」タブ → 「Labels」→「New label」から作成できます。


マイルストーン(Milestone)とは、特定のリリースや期限に向けて Issue をグループ化する機能です。

たとえば v1.0.0 リリース というマイルストーンを作り、そのバージョンで対応する Issue をすべてまとめると、進捗がパーセンテージで表示されます。

  1. 「Issues」タブ → 「Milestones」をクリック
  2. 「New milestone」をクリック
  3. タイトル(例: v1.0.0)、期限日、説明を入力
  4. 「Create milestone」をクリック

Issue は次の 2 つの方法で閉じられます。

Issue ページの下部にある「Close issue」ボタンをクリックします。

PR のタイトルや説明文に次のキーワードと Issue 番号を書くと、PR がマージされた瞬間に自動的に Issue が閉じられます。

Closes #123
Fixes #456
Resolves #789

たとえば PR の説明に Closes #42 と書いておくと、その PR がマージされた瞬間に Issue #42 が自動クローズされます。作業完了と Issue クローズを手動で二重管理する手間が省けます。


バグ報告や機能要望の Issue を一定の形式に統一したい場合、テンプレートを作成できます。テンプレートを使うと、報告者が必要な情報を漏れなく記入できます。

.github/ISSUE_TEMPLATE/bug_report.md を作成します。

---
name: バグ報告
about: バグを報告するためのテンプレートです
labels: bug
---

## 発生している問題

<!-- 何が起きているか簡潔に説明してください -->

## 再現手順

1. 〇〇のページを開く
2. 〇〇ボタンをクリックする
3. エラーが発生する

## 期待する動作

<!-- 本来はどうなるべきか -->

## 実際の動作

<!-- 実際には何が起きているか -->

## 環境

- OS: macOS 14.x / Windows 11 / Ubuntu 22.04
- ブラウザ: Chrome 120 / Firefox 121 / Safari 17
- アプリのバージョン: v1.2.3

## スクリーンショット

<!-- 画像があれば貼り付けてください -->

.github/ISSUE_TEMPLATE/feature_request.md を作成します。

---
name: 機能要望
about: 新機能や改善を提案するためのテンプレートです
labels: enhancement
---

## 提案する機能

<!-- どんな機能を追加・改善したいか説明してください -->

## 解決したい課題

<!-- この機能がないことで困っていることを説明してください -->

## 提案する解決策

<!-- どう実装・実現するか、アイデアがあれば書いてください -->

## 代替案

<!-- 他の方法で解決できる場合は記載してください -->

実際のユースケース - 実務でどう使うか

Section titled “実際のユースケース - 実務でどう使うか”

ユースケース1: バグ報告と修正の追跡

Section titled “ユースケース1: バグ報告と修正の追跡”
  1. QA チームがバグを発見 → bug ラベルを付けて Issue を作成
  2. 担当エンジニアをアサイン(Assignees に追加)
  3. エンジニアが修正ブランチを作り、PR 説明に Fixes #42 を記入
  4. PR がマージされると Issue #42 が自動クローズ
  5. QA チームがリグレッションテストを実施して確認

ユースケース2: スプリントのタスク管理

Section titled “ユースケース2: スプリントのタスク管理”
  1. スプリント開始時に Sprint 5 マイルストーンを作成
  2. このスプリントで対応する Issue をマイルストーンに紐づける
  3. Projects のカンバンボードで進捗を可視化(GitHub Projects)
  4. スプリント終了時にマイルストーンのクローズ率を確認

ユースケース3: OSS プロジェクトへのコントリビューション

Section titled “ユースケース3: OSS プロジェクトへのコントリビューション”
  1. good first issue ラベルの Issue を探す
  2. コメントで「対応します」と宣言する
  3. フォークしてブランチを作り、修正する
  4. PR を送り、Closes #<Issue番号> を記載する

パブリックリポジトリでは GitHub アカウントを持っていれば誰でも Issue を作れます。プライベートリポジトリはリポジトリへのアクセス権が必要です。

Q. Issue の説明にどこまで書けばよいですか?

Section titled “Q. Issue の説明にどこまで書けばよいですか?”

バグ報告の場合は「再現手順・期待する動作・実際の動作・環境情報」の4つが最低限必要です。スクリーンショットや動画があればより分かりやすくなります。

Q. Issue をたくさん作りすぎて管理できなくなってきました。

Section titled “Q. Issue をたくさん作りすぎて管理できなくなってきました。”

ラベルとマイルストーンを活用して整理することをおすすめします。また、定期的に古い Issue を棚卸しし、対応しないものは wontfix ラベルを付けてクローズするのが有効です。

Q. Closes #123 を書いたのに Issue が閉じませんでした。

Section titled “Q. Closes #123 を書いたのに Issue が閉じませんでした。”

PR が main(またはデフォルトブランチ)にマージされたときのみ自動クローズが発火します。別のブランチへのマージでは発火しません。また、キーワードのスペルミス(Close ではなく Closes)や Issue 番号の誤りがないか確認してください。

Q. 同じ内容の Issue が重複して作られたときはどうすればよいですか?

Section titled “Q. 同じ内容の Issue が重複して作られたときはどうすればよいですか?”

どちらか一方に duplicate ラベルを付け、「〇〇は Issue #XX と重複しています」とコメントを残してクローズします。元の Issue へのリンクを貼ると後から見た人に分かりやすくなります。