Git

Issue 駆動開発

概念

Issue 駆動開発とは、すべての作業を GitHub Issue から始める開発スタイルです。 「なぜこの変更をするのか」を Issue に記録してからブランチを切ることで、 変更の意図が明確になり、チーム内のコミュニケーションが円滑になります。

Issue 駆動開発の基本フロー

📋 STEP 1 Issue を作成 やること・理由を書く
🌿 STEP 2 ブランチを切る Issue 番号をブランチ名に含める
💾 STEP 3 コミット メッセージに #Issue番号 を付ける
🔀 STEP 4 PR を作成 Closes #Issue番号 と書く
STEP 5 マージで自動クローズ Issue が自動で閉じられる
PR 本文の例 — Closes キーワードでマージ時に Issue を自動クローズ
## 変更内容
ログインボタンの onClick に正しいハンドラを設定しました。

Closes #42   ← このキーワードで Issue #42 がマージ時に自動クローズ

よくある事例 5 選

実際の開発現場でよく立てられる Issue の種類と、対応するブランチ・コミット例を紹介します。

🐛
バグ報告 Issue #01

ログインボタンが押せない

Issue 本文

## バグの内容
トップページのログインボタンをクリックしても何も起きない。

## 再現手順
1. トップページ(/)にアクセス
2. 「ログイン」ボタンをクリック
3. 何も起きない

## 期待する動作
/login にリダイレクトされる

## 環境
- ブラウザ: Chrome 124
- OS: macOS 14
bug priority: high

ブランチ名

fix/login-button-not-working

コミット履歴

fix: ログインボタンの onClick ハンドラを修正
test: ログインボタンのクリックテストを追加

PR タイトル例

ログインボタンが押せない (Closes #01)

新機能 Issue #02

ダークモードを追加してほしい

Issue 本文

## 機能の概要
システム設定に合わせて自動でダークモード/ライトモードを切り替えたい。

## 背景・理由
夜間に使うとき画面が眩しいという声が多い。

## 受け入れ条件
- [ ] OS のダークモード設定を自動検知する
- [ ] 手動トグルボタンでも切り替えられる
- [ ] 設定がブラウザに記憶される
enhancement good first issue

ブランチ名

feature/dark-mode

コミット履歴

feat: CSS変数でカラーテーマを定義
feat: ダークモードのスタイルを追加
feat: テーマ切り替えトグルを実装
feat: localStorage でテーマ設定を保持

PR タイトル例

ダークモードを追加してほしい (Closes #02)

📝
ドキュメント Issue #03

セットアップ手順が古い

Issue 本文

## 問題点
README の手順通りに進めても v3 以降では動かない。
`npm install` が `pnpm install` に変わっているが記載が古いまま。

## 修正が必要な箇所
- README.md の「インストール」セクション
- CONTRIBUTING.md の「開発環境構築」セクション
documentation

ブランチ名

docs/update-setup-guide

コミット履歴

docs: README のインストール手順を pnpm 対応に更新
docs: CONTRIBUTING の開発環境構築手順を修正

PR タイトル例

セットアップ手順が古い (Closes #03)

パフォーマンス Issue #04

商品一覧ページの読み込みが遅い

Issue 本文

## 問題
商品一覧ページの初期表示に 5 秒以上かかる。

## 計測結果
- API レスポンス: 200ms
- 画像読み込み: 4800ms(未圧縮の画像を 80 枚一気に読み込んでいる)

## 改善案
- 画像を WebP に変換・圧縮
- 遅延読み込み(lazy loading)を適用
- ページネーション or 無限スクロール導入
performance

ブランチ名

perf/product-list-images

コミット履歴

perf: 商品画像を WebP フォーマットに変換
perf: img タグに loading="lazy" を追加
feat: 商品一覧にページネーションを追加

PR タイトル例

商品一覧ページの読み込みが遅い (Closes #04)

🔧
リファクタリング Issue #05

認証ロジックが各ページに散在している

Issue 本文

## 現状の問題
ログイン済みチェックのコードが dashboard.js・profile.js・settings.js
それぞれに同じ内容でコピーされている。

## 目標
共通の `useAuth` フックに抽出して各ページから呼び出す形に整理する。

## 影響範囲
- src/pages/dashboard.js
- src/pages/profile.js
- src/pages/settings.js
refactor tech-debt

ブランチ名

refactor/extract-auth-hook

コミット履歴

refactor: useAuth フックを src/hooks/ に作成
refactor: dashboard から認証ロジックを useAuth に移行
refactor: profile・settings も useAuth を使うよう修正
test: useAuth フックのユニットテストを追加

PR タイトル例

認証ロジックが各ページに散在している (Closes #05)

Issue を上手に使うコツ

🔢

ブランチ名に Issue 番号を入れる

概念

fix/42-login-button のように番号を含めると、ブランチと Issue の対応が一目でわかる。

🏷️

ラベルで分類する

用語

bug / enhancement / documentation / good first issue などのラベルで Issue を整理すると検索・優先度付けが楽になる。

👤

Assignee を設定する

用語

誰が担当するかを Assignee に設定することで、作業の重複や放置を防ぐ。

📌

小さく分割する

概念

「ユーザー管理機能を作る」より「ユーザー登録フォームを作る」のように 1 Issue = 1 タスクにする方が進捗が見えやすい。

💬

Issue でコミュニケーションする

概念

実装方針の議論や進捗報告は Issue のコメントに残すと、あとから経緯を追いやすい。

🔑

Closes キーワードを使う

用語

PR 本文に Closes #番号 と書くとマージ時に Issue が自動クローズされる。Fix / Resolve でも同様。