新しくIssueを作成する
Creates a new issue draft with AI-assisted title, summary, and type classification.
/plugin marketplace add aglabo/claude-idd-framework/plugin install claude-idd-framework@claude-idd-framework-marketplacetitleidd/issue/ユーザーから Issue のタイトルを取得し、確認ループを行います。
コマンド実行の最初に、以下の初期設定を行います:
#!/bin/bash
set -euo pipefail
# Load helper libraries
REPO_ROOT=$(git rev-parse --show-toplevel)
LIBS_DIR="$REPO_ROOT/.claude/commands/_libs"
. "$LIBS_DIR/filename-utils.lib.sh"
. "$LIBS_DIR/idd-session.lib.sh"
# Issue-specific environment setup
_setup_repo_env
ISSUES_DIR=$(_get_temp_dir "idd/issues")
SESSION_FILE="$ISSUES_DIR/.last.session"
この初期設定により:
set -euo pipefail: エラー時の即座終了、未定義変数の検出、パイプラインエラーの伝播このコマンドは以下のステップを自動的に連続実行します:
タイトル取得
タイトル確認ループ
入力されたタイトル: {title}サマリー取得
/_helpers:_get-summary "$title" を呼び出し (summary は空で渡す)_get-summary が自動生成・対話的編集を実行ret に格納結果処理と種別判定への自動遷移
ret に "cancel": true があれば中止jq で JSON から summary を取得✓ 確定したタイトル: {title} と ✓ 確定したサマリー: {summary}種別判定と下書き生成への自動遷移
/_helpers:_get-issue-types "$title" "$summary" を呼び出しtypes に格納下書き生成
{"title": "$title", "issue_type": "$issue_type", "summary": "$summary"}temp/idd/issues/ ディレクトリに保存{issue番号}-{YYYYMMDD-HHMMSS}-{issue_type}-{slug}.mdnew (GitHub Issue作成後に実際の番号に更新)new-20251016-151030-enhancement-claude-mcp-integration.mdセッション保存
.last.session ファイルに作成情報を保存filename, title, issue_type, commit_type, branch_type, command.last_draft ファイルに最終ファイル名を保存初期設定で定義された環境変数を使用して、必要なコマンドの存在を確認し、セッションディレクトリを作成します:
# jq コマンド存在チェック
if ! command -v jq > /dev/null 2>&1; then
error_print <<EOF
❌ Error: 'jq' command not found.
This command requires 'jq' for JSON parsing.
Please install jq before running this script.
macOS: brew install jq
Ubuntu: sudo apt-get install jq
Windows: scoop install jq
EOF
exit 1
fi
# セッションディレクトリ作成
mkdir -p "$ISSUES_DIR"
引数 $1 が渡されているか確認してください:
$1 を初期タイトルとして使用AskUserQuestion ツールを使って以下の質問を繰り返してください:
question: "このタイトルでよろしいですか?"
header: "確認"
options:
- label: "はい (確定)"
description: "このタイトルで Issue を作成します"
- label: "キャンセル"
description: "Issue 作成を中止します"
multiSelect: false
再入力したい場合は、ユーザーが "Other" (カスタム入力) で新しいタイトルを入力できます。
Issue作成を中止しました と表示して処理終了タイトル確定後、/_helpers:_get-summary を呼び出してサマリーを取得します:
# _get-summary を呼び出し (Claude が SlashCommand ツールで実行)
# summary は空文字列で渡す (_get-summary が自動生成する)
ret=$(/_helpers:_get-summary "$title" "")
_get-summary は以下を実行します:
_edit-summary で対話的編集ret に格納された JSON を処理し、自動的に次のステップへ進みます:
# キャンセル判定
if echo "$ret" | jq -e '.cancel' > /dev/null 2>&1; then
cat <<EOF
Issue作成を中止しました
EOF
exit_code=0
exit $exit_code
fi
# summary 抽出
summary=$(echo "$ret" | jq -r '.summary')
# 確定メッセージを表示
cat <<EOF
✓ 確定したタイトル: $title
✓ 確定したサマリー: $summary
[Step.4] 種別判定を実行中
EOF
タイトルとサマリーが確定したら、/_helpers:_get-issue-types を呼び出して種別を判定します:
# _get-issue-types を呼び出し (Claude が SlashCommand ツールで実行)
types=$(/_helpers:_get-issue-types "$title" "$summary")
_get-issue-types は以下を実行します:
types に格納された JSON から各種別を抽出し、自動的に下書き生成へ進みます:
# エラー判定
if echo "$types" | jq -e '.result == "error"' > /dev/null 2>&1; then
reason=$(echo "$types" | jq -r '.reason')
cat <<EOF
エラー: 種別判定に失敗しました ($reason)
EOF
exit_code=1
exit $exit_code
fi
# 各種別を抽出
commit_type=$(echo "$types" | jq -r '.commit_type')
issue_type=$(echo "$types" | jq -r '.issue_type')
branch_type=$(echo "$types" | jq -r '.branch_type')
reasoning=$(echo "$types" | jq -r '.reasoning')
# 判定結果を表示
cat <<EOF
[Step.5] AI判定結果
コミット種別: $commit_type
Issue種別: $issue_type
ブランチ種別: $branch_type
判定理由: $reasoning
[Step.6] 下書き生成を実行中
EOF
タイトル、サマリー、種別が確定したら、issue-generator エージェントを呼び出して下書きを生成します。
# ファイル名を生成 (new-{timestamp}-{issue_type}-{slug}.md)
filepath=$(generate_issue_filepath "$title" "$issue_type")
cat <<EOF
下書きファイル: $filepath
EOF
# issue-generator エージェントを呼び出す (Claude が Task ツールで実行)
# JSON入力を構築
input_json=$(jq -n \
--arg title "$title" \
--arg issue_type "$issue_type" \
--arg summary "$summary" \
'{title: $title, issue_type: $issue_type, summary: $summary}')
cat <<EOF
下書きを生成中...
CALL_AGENT_ISSUE_GENERATOR: $input_json
EOF
Claude が検出したら Task ツールで issue-generator エージェントを実行します:
# Claude が Task ツールで実行
# Task(subagent_type="issue-generator", prompt="<input_json>")
# レスポンス: Markdown形式の下書き
# エージェントからの下書きを取得 (Claude が実行)
read -r draft
# ディレクトリ作成
mkdir -p "$(dirname "$filepath")"
# ファイル保存 (Claude が Write ツールで実行)
# Write(file_path="$filepath", content="$draft")
# 完了メッセージ
cat <<EOF
✓ Issue下書きを作成しました
ファイル: $filepath
EOF
下書き作成後、セッション情報とファイル名の両方を保存します:
# ファイル名を抽出
filename=$(basename "$filepath")
# 1. セッション情報を保存 (.last.session)
save_issue_session "$filename" "" "$title" "$issue_type" "new" ""
# 2. 最終ファイル名を保存 (.last_draft)
_save_last_file "$ISSUES_DIR" "$filename"
cat <<EOF
✓ セッション情報を保存しました
EOF
/idd-issue: IDD Issue 管理システムのメインコマンド/_helpers/_get-summary: タイトルとサマリーの検証・編集ヘルパー/_helpers/_get-issue-types: commit/issue/branch種別のAI判定ヘルパーissue-generator: Issue下書き生成エージェント.claude/commands/_libs/filename-utils.lib.sh: ファイル名生成ユーティリティ.claude/commands/_libs/idd-session.lib.sh: セッション管理ライブラリThis project is licensed under the MIT License. Copyright (c) 2025 atsushifx