new-issue について
会話の内容をもとに GitHub Issue を下書きし、作成するスキルです。リポジトリの指定または現在の Git プロジェクトからの検出に対応し、送信前に下書きの確認を求めます。
主な機能
- 01gh 認証とリポジトリへのアクセス確認
- 02指定または自動検出によるリポジトリ選択
- 03英語の Issue タイトルと説明の作成
- 04確認・修正用の下書き提示
- 05Issue 作成と URL の報告
活用シーン
- 01会話をもとにしたバグ報告の作成
- 02機能リクエストの構造化された GitHub Issue 化
- 03指定リポジトリへの Issue の送信
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tenfyzhong/ skills-hub --skill new-issueインストール後、Claude Code で/new-issueを入力して読み込まれたか確認します。
詳細
新しい Issue スキル
現在の会話のコンテキストに基づいて GitHub Issue を作成します。
前提条件の確認(最初に必ず確認)
モードの判定:ユーザーが対象リポジトリを指定したか確認します。
| ユーザー入力 | モード | Git リポジトリが必要 |
|---|---|---|
https://github.com/owner/repo | 明示 | いいえ |
owner/repo | 明示 | いいえ |
| リポジトリの指定なし | 自動検出 | はい |
常に必要:
# Check if gh CLI is available and authenticated
gh auth status
gh で認証されていない場合 → 「まず gh auth login を実行してください。」
自動検出モードのみ(リポジトリの指定なし):
# Check if in a git repository
git rev-parse --is-inside-work-tree
# Get repository info
gh repo view --json owner,name,url
Git リポジトリ内におらず、対象も指定されていない場合 → 「対象のリポジトリ(例:owner/repo または GitHub URL)を指定するか、Git プロジェクトに移動してください。」
入力
ユーザーは次のようなフレーズでこのスキルを起動します:
- 「new issue」
- 「create issue」
- 「file an issue」
- 「report this bug」
- 「submit feature request」
任意:ユーザーは対象リポジトリを指定できます:
- 完全な URL:
https://github.com/owner/repo - 短縮形式:
owner/repo
Issue のコンテキストは次の情報から取得します:
- 現在までの会話履歴
- 問題や機能についてのユーザーの説明
- 話題に上ったコードスニペットやエラーメッセージ
- 言及された関連ファイルパス
ワークフロー
ステップ 1:対象リポジトリを決定する
ケース A:ユーザーがリポジトリを指定した場合
ユーザーの入力を解析して owner/repo を抽出します:
# From URL: https://github.com/owner/repo or https://github.com/owner/repo/...
# Extract: owner/repo
# From short form: owner/repo
# Use directly
# Validate the repository exists and is accessible
gh repo view "$TARGET_REPO" --json owner,name,url
リポジトリが見つからない、またはアクセスできない場合 → 「リポジトリ '$TARGET_REPO' が見つからないか、アクセス権がありません。」
ケース B:現在の Git リポジトリから自動検出する場合
# Get repository info and check if it's a fork
gh repo view --json owner,name,isFork,parent,url
# If it's a fork, get parent (upstream) info
IS_FORK=$(gh repo view --json isFork -q '.isFork')
if [ "$IS_FORK" = "true" ]; then
UPSTREAM_OWNER=$(gh repo view --json parent -q '.parent.owner.login')
UPSTREAM_NAME=$(gh repo view --json parent -q '.parent.name')
TARGET_REPO="$UPSTREAM_OWNER/$UPSTREAM_NAME"
else
# Use current repo as target
TARGET_REPO=$(gh repo view --json owner,name -q '.owner.login + "/" + .name')
fi
ステップ 2:コンテキストを分析して Issue の内容を生成する
会話のコンテキストに基づいて、次を生成します:
言語要件:
- Issue のタイトルと説明のすべての内容は、必ず英語にします。
- 会話が別の言語で行われている場合は、英語に翻訳または要約します。
タイトルの生成ルール:
- 簡潔にします(80 文字未満)。
- 明確な場合は、Issue の種類を示すプレフィックスで始めます:[Bug]、[Feature]、[Enhancement]、[Question]
- 中核となる問題や要望を明確に記述します。
- 適切な場合は命令形を使います。
- 英語のみを使用します。
説明の生成:
該当するセクションを使って説明を構成します:
## Description
[Clear explanation of the issue/feature request]
## Context
[Relevant background information from the conversation]
## Steps to Reproduce (for bugs)
1. [Step 1]
2. [Step 2]
3. [Expected vs Actual behavior]
## Proposed Solution (if discussed)
[Any solutions discussed in the conversation]
## Additional Information
- [Relevant code snippets]
- [Error messages]
- [Environment details if relevant]
ステップ 3:ユーザーに下書きを提示して確認してもらう(重要)
必ず question ツールを使って下書きを提示し、ユーザーの確認を得てください。
生成した Issue をユーザーに提示します:
## Issue Draft
**Target Repository**: [TARGET_REPO]
**Title**: [Generated Title]
**Description**:
[Generated Description]
---
Please review the above issue draft.
question ツールを使って、次のように質問します:
Options:
1. "Submit as-is" - Create the issue with current content
2. "Modify title" - Change the issue title
3. "Modify description" - Change the issue description
4. "Cancel" - Do not create the issue
ステップ 4:ユーザーによる変更に対応する
ユーザーが変更を選択した場合:
タイトルの変更の場合:
- 新しいタイトルをユーザーに尋ねます。
- 更新した下書きを表示します。
- 確認のため、ステップ 3 に戻ります。
説明の変更の場合:
- どのような変更を希望するか、ユーザーに尋ねます。
- ユーザーは次の内容を指定できます:
- 追加、削除、変更する具体的なテキスト
- 「もっと短くする」や「X について詳しくする」といった一般的な指示
- 更新した下書きを表示します。
- 確認のため、ステップ 3 に戻ります。
ユーザーが確認するかキャンセルするまで繰り返します。
ステップ 5:Issue を作成する
ユーザーが確認したら、Issue を作成します:
# Create issue on the target repository
gh issue create \
--repo "$TARGET_REPO" \
--title "$ISSUE_TITLE" \
--body "$ISSUE_BODY"
書式を保持するため、本文には HEREDOC を使用します:
gh issue create --repo "$TARGET_REPO" --title "$ISSUE_TITLE" --body "$(cat <<'EOF'
## Description
[Description content here]
## Context
[Context content here]
EOF
)"
ステップ 6:結果を報告する
Issue の作成後、次を提示します:
# Get the created issue details
gh issue view --repo "$TARGET_REPO" <ISSUE_NUMBER> --json number,title,url,state
出力形式
Issue を正常に作成しました
Issue: #[NUMBER] - [TITLE] リポジトリ: [TARGET_REPO] URL: [ISSUE_URL]
概要
[送信した内容の簡単な確認]
エラー処理
| 状況 | 対応 |
|---|---|
| コンテキストが提供されていない | 作成する Issue についてユーザーに説明を求める |
| ユーザーがキャンセルした | 「Issue の作成をキャンセルしました。Issue は作成されていません。」 |
| API エラー | エラーを報告し、権限を確認するよう提案する |
| レート制限 | ユーザーに知らせ、しばらく待つよう提案する |
| 書き込み権限がない | 「[REPO] で Issue を作成する権限がありません。まずフォークすることを検討してください。」 |
| リポジトリが指定されておらず、Git リポジトリ内にもいない | 対象リポジトリを指定するか、Git プロジェクトに移動するようユーザーに求める |
| リポジトリ形式が無効 | 「リポジトリの形式が無効です。'owner/repo' または GitHub の完全な URL を使用してください。」 |
よくある間違い
- 英語以外の言語でタイトルや説明を生成する
- イシューの作成前に明示的なユーザー確認を省略する
- イシューの本文に秘密情報や機密データを含める
重要な注意事項
- 必ず確認する:明示的なユーザー確認なしにイシューを作成してはいけません
- コンテキストを保持する:イシューに関連する会話のコンテキストを含めてください
- 柔軟な対象指定:リポジトリを明示的に指定する(URL または owner/repo)か、git から自動検出します
- フォークの考慮:自動検出する場合、フォークでは上流のリポジトリを対象にします
- 書式設定:イシューの本文では適切な Markdown 書式を使用してください
- プライバシー:イシューに機密情報(API キー、パスワードなど)を含めないでください
- 反復:送信前に複数回修正できるようにします