---
name: git-issue-create
description: Create a GitHub Issue from conversation context - analyze context, generate title/body/labels, preview, and create
---

# Create Issue Skill

会話の文脈からGitHub Issueを作成するワークフローを自動化する。コンテキスト分析・タイトルと本文の生成・ラベル推定・プレビュー確認・Issue作成を一連の流れで行う。

## 処理手順

### Step 1: コンテキスト分析

1. 会話の文脈から、Issue化すべき主題・目的を把握する
2. 共通開発規約（`conventions.md`）の「Issueラベルの必須化」セクションに基づき、以下を推定する:
   - **種類ラベル**: 以下の判断基準で1つ選択する

     | ラベル          | 判断基準                                                       |
     |-----------------|----------------------------------------------------------------|
     | `bug`           | 既存機能が期待どおりに動作しない不具合の修正                   |
     | `feature`       | ユーザー向けの新しい機能の追加                                 |
     | `enhancement`   | 既存機能の改善・拡張・UX向上・開発ワークフロー改善             |
     | `documentation` | ドキュメントのみの変更                                         |
     | `chore`         | CI/CD、依存関係更新、リファクタリングなど機能に影響しない作業  |

   - **優先度ラベル**: 以下の判断基準で1つ選択する

     | ラベル             | 判断基準                                                   |
     |--------------------|-------------------------------------------------------------|
     | `priority: high`   | サービス停止・データ損失など即時対応が必要                  |
     | `priority: medium` | 通常の開発フローで対応すべき機能追加・改善                 |
     | `priority: low`    | 対応が望ましいが急ぎではない改善・提案                     |

### Step 2: Issue内容の生成

1. **タイトル**: 日本語で50文字以内を目安に生成する
2. **本文**: 日本語で、種類ラベルに応じたテンプレートで生成する:

   **`feature` / `enhancement` / `bug` の場合:**

   ```markdown
   ## 概要
   <1-2文で変更の目的を説明>

   ## 背景・動機
   <なぜこの変更が必要か>

   ## 実装方針
   <技術的なアプローチの概要>

   ## 受け入れ条件
   - [ ] <条件1>
   - [ ] <条件2>

   🤖 Generated with [Claude Code](https://claude.com/claude-code)
   ```

   **`documentation` / `chore` の場合:**

   ```markdown
   ## 概要
   <1-2文で変更の目的を説明>

   ## 背景・動機
   <なぜこの変更が必要か>

   ## 受け入れ条件
   - [ ] <条件1>
   - [ ] <条件2>

   🤖 Generated with [Claude Code](https://claude.com/claude-code)
   ```

### Step 3: オープン中マイルストーンの取得

現在のリポジトリでオープン中のマイルストーン一覧を取得する:

```bash
gh api "repos/{owner}/{repo}/milestones?state=open" --jq '.[].title'
```

- コマンドが失敗した場合、または空の結果が返った場合 → マイルストーン処理は行わず、未設定のまま次のステップへ進む。プレビューおよび結果表示からもマイルストーン行を省略する。
- それ以外の場合は、取得したタイトル一覧をプレビューで利用するために保持する。既定値は「設定しない」。

### Step 4: プレビュー・ユーザー確認

以下の形式でプレビューを表示し、ユーザーの承認を得る:

```text
## Issueプレビュー

**タイトル**: <タイトル>
**種類ラベル**: <ラベル>
**優先度ラベル**: <ラベル>
**マイルストーン**: <選択されたタイトル または "設定しない">
  (候補: <タイトル1>, <タイトル2>, ...)

---
<本文>
---

この内容でIssueを作成してよろしいですか？修正点があればお知らせください。
```

- 「**マイルストーン**:」行と「(候補: ...)」行は、Step 3 で 1 件以上のマイルストーンが取得できた場合のみ表示する。取得済みの全タイトルを列挙する。
- ユーザーが承認した場合 → Step 5へ進む
- ユーザーが修正を指示した場合（マイルストーンの選択変更も含む） → 修正を反映して再度プレビューを表示する

### Step 5: Issue作成

1. `gh issue create` でIssueを作成する。`--milestone "<タイトル>"` は、Step 4 でユーザーが具体的なマイルストーンを選択した場合のみ付与する（「設定しない」やマイルストーンが存在しない場合は省略する）:

   ```bash
   gh issue create \
     --title "<タイトル>" \
     --label "<種類ラベル>" \
     --label "<優先度ラベル>" \
     [--milestone "<タイトル>"] \
     --body "$(cat <<'EOF'
   <本文>
   EOF
   )"
   ```

2. 失敗した場合はエラーメッセージを表示して終了する

### Step 6: 結果表示

作成結果を以下の形式で表示する。`マイルストーン` 行はマイルストーンが設定された場合のみ表示する:

```text
## Issue作成完了

Issue #XX: <タイトル>
<Issue URL>

- 種類ラベル: <種類ラベル>
- 優先度ラベル: <優先度ラベル>
- マイルストーン: <タイトル>
```
