diff --git a/docs/plans/2026-04-01-batch-create-plan.md b/docs/plans/2026-04-01-batch-create-plan.md new file mode 100644 index 0000000..f5e301d --- /dev/null +++ b/docs/plans/2026-04-01-batch-create-plan.md @@ -0,0 +1,306 @@ +# 一括チケット作成スキル 実装計画 + +**Goal:** フリーフォーマットのファイルからチケット情報を解釈し、`redmine-cli create-issue` をループ実行して一括作成するスキルを追加する + +**Architecture:** `redmine/skills/batch-create/SKILL.md` に新スキルを定義。Claude がファイルを意味解釈してチケット情報を抽出し、名前→ID解決・確認表示・ループ実行のオーケストレーションを担う。親子チケットは親を先に作成してIDを子に伝播。エラー時はスキップして続行。 + +**Tech Stack:** Markdown (SKILL.md) — Claude Code plugin skill format + +**Design Document:** GitHub Issue #11 + +**GitHub Issue:** https://github.com/chippy-ao/claude-code/issues/11 + +**Recommended Execution:** Sequential — 2 tasks, simple dependencies + +--- + +### Task 1: `redmine/skills/batch-create/SKILL.md` を作成 + +**Files:** + +- Create: `redmine/skills/batch-create/SKILL.md` + +**Step 1: SKILL.md を作成** + +```markdown +--- +description: Redmineチケット一括作成スキル。ファイルからチケット情報を読み込み、redmine-cli で一括作成する。「redmine:batch-create」「一括作成」「チケットをまとめて作って」「ファイルからチケット作成」で起動。 +--- + +# Redmine チケット一括作成 + +ファイル(txt/md/yaml 等)に記載されたチケット情報を読み込み、redmine-cli を使って一括作成する。 + +## 利用する CLI コマンド + +すべてのコマンドは JSON を stdout に出力する。Bash ツールで実行し、出力をパースして整形表示する。 + +- `redmine-cli create-issue` — チケット作成 +- `redmine-cli projects` — プロジェクト一覧取得 +- `redmine-cli trackers` — トラッカー一覧取得(名称→ID解決) +- `redmine-cli statuses` — ステータス一覧取得(名称→ID解決) +- `redmine-cli categories --project ` — カテゴリ一覧取得 +- `redmine-cli versions --project ` — バージョン一覧取得 +- `redmine-cli config list` — プロファイル一覧取得 + +すべてのコマンドに `--profile ` を付与してプロファイルを指定する(デフォルトプロファイル使用時は省略可)。 + +## 大前提 + +- **一括作成専用**: 1件ずつの作成は `redmine:create` スキルを使う +- **フリーフォーマット対応**: 入力ファイルは txt/md/yaml 等の形式を問わない。Claude が意味解釈してチケット情報を抽出する +- **未指定項目はデフォルト**: ファイルに書かれている情報のみ使用し、書かれていない項目は Redmine のデフォルトに任せる +- **確認必須**: チケット作成前に必ず解釈結果の一覧を表示し、ユーザーの承認を得る +- **スキップ&続行**: 個別チケットの作成でエラーが発生した場合はスキップして残りを続行する +- チケット情報は参考であり、最新の状態は Redmine 本体で確認するよう補足する + +## フロー + +### -1. 前提チェック + +1. `which redmine-cli` で CLI がインストールされているか確認する +2. **未インストールの場合**、以下を案内して終了する: + - macOS: `brew install chippy-ao/tap/redmine-cli` + - Windows: [README の Windows セクション](../../README.md) を参照(ZIP 展開 → PATH 設定 → ターミナル再起動) + - その他: `go install github.com/chippy-ao/redmine-cli@latest` + +### 0. プロファイル選択 + +`redmine-cli config list` を実行してプロファイルを確認する。 + +- **0件**: 「プロファイルが未設定です。今から設定しましょう」と伝え、AskUserQuestion でプロファイル名・URL・API キーを順に聞いて `redmine-cli config add` を実行する。設定完了後、そのまま作成フローに継続する +- **1件**: そのプロファイルを使用する旨を伝え、次のステップに進む +- **複数**: AskUserQuestion で使用するプロファイルを選択 + +### 1. ファイル読み込み・解釈 + +ユーザーが指定したファイルを Read ツールで読み込み、内容を意味解釈してチケット情報を抽出する。 + +#### 1.1. ファイルの特定 + +- ユーザーの入力にファイルパスが含まれていればそれを使用 +- パスが指定されていなければ AskUserQuestion でファイルパスを質問 + +#### 1.2. 解釈ガイドライン + +ファイル形式を問わず、以下のルールで解釈する: + +- **チケットの区切り**: 見出し(`#`、`##` 等)、空行区切りのブロック、YAML のリスト項目、箇条書きの各項目などをチケットの区切りとみなす +- **件名**: 各チケットの最初の行、見出しテキスト、または `subject:` キーの値 +- **説明**: 件名の次に続くテキスト、または `description:` キーの値 +- **属性**: `トラッカー:`, `tracker:`, `担当:`, `assigned_to:`, `優先度:`, `priority:` 等のキーワードが見つかればその値を抽出 +- **親子関係**: インデント、ネスト構造(YAML の `children:`)、または見出しレベルの差で親子関係を判断 +- **全体設定**: ファイル冒頭に `project:`, `profile:`, `tracker:` 等があれば全チケット共通のデフォルトとして適用 + +**解釈の原則:** +- 書かれていない項目は抽出しない(推測で補完しない) +- 曖昧な場合は Step 3 の確認で「解釈に自信がない」旨を付記する +- 1行だけのテキストは「件名のみのチケット」として扱う + +#### 1.3. プロジェクトの特定 + +- ファイル内に `project:` 指定があればそれを使用 +- なければ AskUserQuestion で `redmine-cli projects --profile

--limit 100` の結果からプロジェクトを選択 + +### 2. 名前→ID解決 + +ファイルから抽出した名称をRedmineのIDに解決する。**名称指定がないチケットはこのステップをスキップ**する。 + +1. **トラッカー**: `redmine-cli trackers --profile

` で一覧取得し、名称→ID解決 +2. **バージョン**: `redmine-cli versions --project --profile

` で一覧取得し、名称→ID解決 +3. **カテゴリ**: `redmine-cli categories --project --profile

` で一覧取得し、名称→ID解決(権限エラー時はスキップ) + +- 解決できない名称があった場合、該当チケットに警告マークを付けて Step 3 の確認で表示する +- 優先度・担当者は ID 直接指定のみ対応(名前→ID解決のコマンドが未実装のため) + +### 3. 確認表示 + +解釈結果を一覧テーブルで表示し、ユーザーの承認を得る。 + +``` +以下のチケットを作成します(プロジェクト: ): + +| # | 件名 | トラッカー | 担当者 | 説明(要約) | 親 | 備考 | +|---|------|-----------|--------|------------|---|------| +| 1 | ログイン機能の実装 | (デフォルト) | (なし) | SSO連携も含む... | - | | +| 2 | ├ 画面デザイン | タスク | (なし) | - | #1 | | +| 3 | └ API実装 | タスク | (なし) | - | #1 | | +| 4 | CSV出力対応 | バグ | (なし) | 文字化け修正 | - | ⚠️ トラッカー名未解決 | +``` + +AskUserQuestion で以下を提示: +- **「作成する」** → Step 4 に進む +- **「修正する」** → ユーザーの指示に従って解釈結果を修正し、再表示 +- **「キャンセル」** → フロー終了 + +### 4. ループ実行 + +承認後、チケットを順番に作成する。**親チケットを先に作成し、返されたIDを子チケットの `--parent-issue-id` に設定する。** + +#### 4.1. 作成順序 + +1. 親チケット(ルートレベル)を上から順に作成 +2. 各親チケットの作成直後に、その子チケットを作成(親の返却IDを `--parent-issue-id` に設定) +3. 深いネストがある場合も同様に再帰的に処理 + +#### 4.2. 実行 + +各チケットについて以下を実行: + +```bash +redmine-cli create-issue --profile

--project --subject "件名" [--description "説明"] [--tracker-id N] [--priority-id N] [--assigned-to-id N] [--version-id N] [--category-id N] [--parent-issue-id N] [--estimated-hours N] [--private] +``` + +- 作成ごとに進捗を表示: 「(3/10) #1234 ログイン機能の実装 ✅」 +- 説明文に改行が含まれる場合は適切にエスケープする + +#### 4.3. エラー時の挙動 + +- **作成失敗**: エラーメッセージを記録し、そのチケットをスキップして次に進む +- **親チケットが失敗した場合**: その子チケットも全てスキップする(親IDが不明のため) +- **接続エラー・認証エラー**: 一時的な問題の可能性があるため、1回だけリトライ。2回目も失敗したら全体を停止しユーザーに通知 + +### 5. 結果サマリーと次のアクション + +#### 5.1. サマリー表示 + +``` +一括作成が完了しました: + +✅ 成功: 8件 +❌ 失敗: 2件 + +| # | 結果 | ID | 件名 | エラー | +|---|------|-----|------|-------| +| 1 | ✅ | #1234 | ログイン機能の実装 | - | +| 2 | ✅ | #1235 | ├ 画面デザイン | - | +| 3 | ✅ | #1236 | └ API実装 | - | +| 4 | ❌ | - | CSV出力対応 | トラッカー「バグ修正」が見つかりません | +... +``` + +#### 5.2. 次のアクション提案 + +次のアクションを**平易な言葉**で提案する: + +- **失敗したチケットを修正して再作成**: 失敗原因を修正し、失敗分だけ `redmine:create` で個別作成 +- **関連チケットを追加する**: `redmine:relation` スキルへ案内 +- **別のファイルから一括作成する**: 同じスキルで別ファイルを指定 +- **検索に戻る**: `redmine:search` スキルへ案内 + +## エラーハンドリング + +- **CLI 未インストール**: `which redmine-cli` で検出。OS に応じたインストール方法を案内 +- **プロファイル未設定**: `redmine-cli config list` で空を検出。インラインで config add フローを実行し、設定完了後に元のフローに継続 +- **認証エラー・接続エラー**: 「Redmine への接続でエラーが発生しました。以下を確認してください: (1) プロファイルの URL が正しいか (2) API キーが有効か (3) Redmine サーバーが稼働しているか。`redmine-cli config list` でプロファイル設定を確認できます」と案内する +- **ファイル読み込みエラー**: ファイルが存在しない、読み取り権限がない場合はパスの確認を促す +- **解釈結果が0件**: 「チケット情報を抽出できませんでした。ファイルの内容を確認してください」と表示し、ファイル内容の一部を表示して解釈のヒントを提案する +- **バリデーションエラー (422)**: エラーメッセージを記録してスキップ。サマリーで表示 +- **親チケット作成失敗**: 子チケットも全てスキップし、サマリーで「親チケット失敗のためスキップ」と明記 +``` + +**Step 2: 変更の検証** + +SKILL.md を通読し、以下を確認する: +- frontmatter の description がトリガーワードを含んでいる +- 利用する CLI コマンドが既存スキルと整合している +- フロー全体が Issue #11 の想定フロー(6ステップ)をカバーしている +- 検討事項3点(フォーマット・エラー挙動・親子)すべて反映されている +- 既存スキル(create, relation 等)との参照関係が適切 +- Markdown の見出しレベル・スタイルが既存スキルと統一されている + +Expected: 全チェック項目が OK + +**Step 3: Commit** + +```bash +git add redmine/skills/batch-create/SKILL.md +git commit -m "feat(redmine): ファイルからチケットを一括作成するスキルを追加 + +フリーフォーマットのファイル(txt/md/yaml等)からチケット情報をClaude が +意味解釈し、redmine-cli create-issue をループ実行して一括作成する。 +親子チケットの階層構造にも対応し、エラー時はスキップして続行する。 + +Closes #11" +``` + +--- + +### Task 2: README.md と plugin.json を更新 + +**依存:** Task 1 + +**Files:** + +- Modify: `redmine/README.md` +- Modify: `redmine/.claude-plugin/plugin.json` + +**Step 1: README.md の機能一覧テーブルに `batch-create` を追加** + +`redmine/README.md` の機能一覧テーブル(`| redmine:update |` の行の後)に以下を追加: + +```markdown +| `redmine:batch-create` | ファイルからチケット情報を読み込み一括作成(フリーフォーマット対応・親子階層対応) | +``` + +また、「## 使い方」セクションに以下を追加(「### チケット更新・削除・コメント」の後): + +```markdown +### チケット一括作成 + +```text +redmine:batch-create +``` + +または具体的に: + +```text +redmine:batch-create tickets.yml からチケットを一括作成して +``` + +フリーフォーマット(txt/md/yaml等)のファイルからチケット情報を読み取り、一括作成する。親子チケットの階層構造にも対応。 +``` + +**Step 2: plugin.json のバージョンと description を更新** + +`redmine/.claude-plugin/plugin.json` の変更: +- `version`: `"2.3.0"` → `"2.4.0"` +- `description`: 末尾に `一括作成` を追加 + +```json +{ + "name": "redmine", + "version": "2.4.0", + "description": "redmine-cli を活用したチケット検索・閲覧・分析・作成・更新・削除・関連付け・一括作成支援プラグイン。プロファイル管理で複数の Redmine サーバーを横断操作。", + "author": { + "name": "chippy-ao" + }, + "license": "MIT", + "keywords": [ + "redmine", + "ticket", + "issue-tracking", + "project-management", + "cli" + ] +} +``` + +**Step 3: 変更の検証** + +- README.md の機能一覧テーブルに `batch-create` が含まれている +- README.md の使い方セクションに一括作成の説明がある +- plugin.json のバージョンが 2.4.0 に更新されている +- Markdown のフォーマットが既存と統一されている + +Expected: 全チェック項目が OK + +**Step 4: Commit** + +```bash +git add redmine/README.md redmine/.claude-plugin/plugin.json +git commit -m "docs(redmine): README と plugin.json に batch-create スキルを追加 + +機能一覧テーブルと使い方セクションに一括作成スキルの説明を追記。 +プラグインバージョンを 2.4.0 に更新。" +``` diff --git a/redmine/.claude-plugin/plugin.json b/redmine/.claude-plugin/plugin.json index 105fa00..f6ce41a 100644 --- a/redmine/.claude-plugin/plugin.json +++ b/redmine/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "redmine", - "version": "2.3.0", - "description": "redmine-cli を活用したチケット検索・閲覧・分析・作成・更新・削除・関連付け支援プラグイン。プロファイル管理で複数の Redmine サーバーを横断操作。", + "version": "2.4.0", + "description": "redmine-cli を活用したチケット検索・閲覧・分析・作成・更新・削除・関連付け・一括作成支援プラグイン。プロファイル管理で複数の Redmine サーバーを横断操作。", "author": { "name": "chippy-ao" }, diff --git a/redmine/README.md b/redmine/README.md index d64f096..6cc676a 100644 --- a/redmine/README.md +++ b/redmine/README.md @@ -20,18 +20,22 @@ brew install chippy-ao/tap/redmine-cli **Windows:** 1. [GitHub Releases](https://github.com/chippy-ao/redmine-cli/releases) から ZIP をダウンロード -2. ZIP を展開し、`redmine-cli.exe` を取得 -3. コマンドプロンプトか PowerShell で `redmine-cli.exe` があるフォルダから実行: +2. ZIP を展開し、`redmine-cli.exe` を任意のフォルダに配置(例: `C:\tools\redmine-cli\`) +3. PATH を設定して、どこからでも `redmine-cli` コマンドを実行できるようにする: + - `Win + R` →「`sysdm.cpl`」を実行 →「詳細設定」タブ →「環境変数」 + - ユーザー環境変数の `Path` を選んで「編集」→「新規」 + - `redmine-cli.exe` を配置したフォルダのパスを追加(例: `C:\tools\redmine-cli`) + - 「OK」で閉じる +4. **ターミナルを再起動**して PATH を反映: + - コマンドプロンプトや PowerShell を**一度閉じて開き直す** + - Claude Code を使っている場合は、**Claude Code を起動しているターミナルも再起動**が必要(Claude Code はターミナルの環境変数を継承するため) +5. 動作確認: ```powershell -.\redmine-cli.exe config add work --url https://redmine.example.com --api-key YOUR_API_KEY -.\redmine-cli.exe search --keyword "バグ" --status open +redmine-cli --version ``` -4. (任意)PATH を通すとどこからでも実行可能: - - Win + X →「システム」→「システムの詳細設定」→「環境変数」 - - `Path` を選んで「編集」→「新規」で `redmine-cli.exe` があるフォルダのパスを追加 - - コマンドプロンプトを再起動 +バージョンが表示されれば OK。Claude Code 上でも同様に認識される。 **go install:** @@ -109,6 +113,20 @@ redmine:update チケット#456にコメントを追加 redmine:update チケット#789を削除 ``` +### チケット一括作成 + +```text +redmine:batch-create +``` + +または具体的に: + +```text +redmine:batch-create tickets.yml からチケットを一括作成して +``` + +フリーフォーマット(txt/md/yaml等)のファイルからチケット情報を読み取り、一括作成する。親子チケットの階層構造にも対応。 + ### プロジェクト状況分析 ```text @@ -128,6 +146,7 @@ redmine:config | `redmine:config` | プロファイルの追加・一覧・デフォルト変更・削除 | | `redmine:search` | キーワード・プロジェクト・ステータス・担当者等でチケット検索、詳細表示 | | `redmine:create` | 対話的にチケットを作成(プロジェクト選択・名称→ID解決・重複チェック付き) | +| `redmine:batch-create` | ファイルからチケット情報を読み込み一括作成(フリーフォーマット対応・親子階層対応) | | `redmine:relation` | チケット間のリレーション追加・削除(6種の関連タイプ対応) | | `redmine:update` | チケットの更新・削除・コメント記入(名称→ID解決・確認フロー付き) | | `redmine:analyze` | ステータス別集計、担当者負荷、期限切れ警告、優先度分布 | diff --git a/redmine/skills/analyze/SKILL.md b/redmine/skills/analyze/SKILL.md index a57a800..f951e57 100644 --- a/redmine/skills/analyze/SKILL.md +++ b/redmine/skills/analyze/SKILL.md @@ -25,7 +25,7 @@ redmine-cli を使ってチケット群を取得し、プロジェクトの状 1. `which redmine-cli` で CLI がインストールされているか確認する 2. **未インストールの場合**、以下を案内して終了する: - macOS: `brew install chippy-ao/tap/redmine-cli` - - Windows: GitHub Releases (https://github.com/chippy-ao/redmine-cli/releases) から ZIP をダウンロードし、展開して `redmine-cli.exe` を取得。PATH に追加すると便利 + - Windows: [README の Windows セクション](../../README.md) を参照(ZIP 展開 → PATH 設定 → ターミナル再起動) - その他: `go install github.com/chippy-ao/redmine-cli@latest` ### 1. プロファイル選択 diff --git a/redmine/skills/batch-create/SKILL.md b/redmine/skills/batch-create/SKILL.md new file mode 100644 index 0000000..024a428 --- /dev/null +++ b/redmine/skills/batch-create/SKILL.md @@ -0,0 +1,174 @@ +--- +description: Redmineチケット一括作成スキル。ファイルからチケット情報を読み込み、redmine-cli で一括作成する。「redmine:batch-create」「一括作成」「チケットをまとめて作って」「ファイルからチケット作成」で起動。 +--- + +# Redmine チケット一括作成 + +ファイル(txt/md/yaml 等)に記載されたチケット情報を読み込み、redmine-cli を使って一括作成する。 + +## 利用する CLI コマンド + +すべてのコマンドは JSON を stdout に出力する。Bash ツールで実行し、出力をパースして整形表示する。 + +- `redmine-cli create-issue` — チケット作成 +- `redmine-cli projects` — プロジェクト一覧取得 +- `redmine-cli trackers` — トラッカー一覧取得(名称→ID解決) +- `redmine-cli statuses` — ステータス一覧取得(名称→ID解決) +- `redmine-cli categories --project ` — カテゴリ一覧取得 +- `redmine-cli versions --project ` — バージョン一覧取得 +- `redmine-cli config list` — プロファイル一覧取得 + +すべてのコマンドに `--profile ` を付与してプロファイルを指定する(デフォルトプロファイル使用時は省略可)。 + +## 大前提 + +- **一括作成専用**: 1件ずつの作成は `redmine:create` スキルを使う +- **フリーフォーマット対応**: 入力ファイルは txt/md/yaml 等の形式を問わない。Claude が意味解釈してチケット情報を抽出する +- **未指定項目はデフォルト**: ファイルに書かれている情報のみ使用し、書かれていない項目は Redmine のデフォルトに任せる +- **確認必須**: チケット作成前に必ず解釈結果の一覧を表示し、ユーザーの承認を得る +- **スキップ&続行**: 個別チケットの作成でエラーが発生した場合はスキップして残りを続行する +- チケット情報は参考であり、最新の状態は Redmine 本体で確認するよう補足する + +## フロー + +### -1. 前提チェック + +1. `which redmine-cli` で CLI がインストールされているか確認する +2. **未インストールの場合**、以下を案内して終了する: + - macOS: `brew install chippy-ao/tap/redmine-cli` + - Windows: [README の Windows セクション](../../README.md) を参照(ZIP 展開 → PATH 設定 → ターミナル再起動) + - その他: `go install github.com/chippy-ao/redmine-cli@latest` + +### 0. プロファイル選択 + +`redmine-cli config list` を実行してプロファイルを確認する。 + +- **0件**: 「プロファイルが未設定です。今から設定しましょう」と伝え、AskUserQuestion でプロファイル名・URL・API キーを順に聞いて `redmine-cli config add` を実行する。設定完了後、そのまま作成フローに継続する +- **1件**: そのプロファイルを使用する旨を伝え、次のステップに進む +- **複数**: AskUserQuestion で使用するプロファイルを選択 + +### 1. ファイル読み込み・解釈 + +ユーザーが指定したファイルを Read ツールで読み込み、内容を意味解釈してチケット情報を抽出する。 + +#### 1.1. ファイルの特定 + +- ユーザーの入力にファイルパスが含まれていればそれを使用 +- パスが指定されていなければ AskUserQuestion でファイルパスを質問 + +#### 1.2. 解釈ガイドライン + +ファイル形式を問わず、以下のルールで解釈する: + +- **チケットの区切り**: 見出し(`#`、`##` 等)、空行区切りのブロック、YAML のリスト項目、箇条書きの各項目などをチケットの区切りとみなす +- **件名**: 各チケットの最初の行、見出しテキスト、または `subject:` キーの値 +- **説明**: 件名の次に続くテキスト、または `description:` キーの値 +- **属性**: `トラッカー:`, `tracker:`, `担当:`, `assigned_to:`, `優先度:`, `priority:` 等のキーワードが見つかればその値を抽出 +- **親子関係**: インデント、ネスト構造(YAML の `children:`)、または見出しレベルの差で親子関係を判断 +- **全体設定**: ファイル冒頭に `project:`, `profile:`, `tracker:` 等があれば全チケット共通のデフォルトとして適用 + +**解釈の原則:** +- 書かれていない項目は抽出しない(推測で補完しない) +- 曖昧な場合は Step 3 の確認で「解釈に自信がない」旨を付記する +- 1行だけのテキストは「件名のみのチケット」として扱う + +#### 1.3. プロジェクトの特定 + +- ファイル内に `project:` 指定があればそれを使用 +- なければ AskUserQuestion で `redmine-cli projects --profile

--limit 100` の結果からプロジェクトを選択 + +### 2. 名前→ID解決 + +ファイルから抽出した名称をRedmineのIDに解決する。**名称指定がないチケットはこのステップをスキップ**する。 + +1. **トラッカー**: `redmine-cli trackers --profile

` で一覧取得し、名称→ID解決 +2. **バージョン**: `redmine-cli versions --project --profile

` で一覧取得し、名称→ID解決 +3. **カテゴリ**: `redmine-cli categories --project --profile

` で一覧取得し、名称→ID解決(権限エラー時はスキップ) + +- 解決できない名称があった場合、該当チケットに警告マークを付けて Step 3 の確認で表示する +- 優先度・担当者は ID 直接指定のみ対応(名前→ID解決のコマンドが未実装のため) + +### 3. 確認表示 + +解釈結果を一覧テーブルで表示し、ユーザーの承認を得る。 + +``` +以下のチケットを作成します(プロジェクト: ): + +| # | 件名 | トラッカー | 担当者 | 説明(要約) | 親 | 備考 | +|---|------|-----------|--------|------------|---|------| +| 1 | ログイン機能の実装 | (デフォルト) | (なし) | SSO連携も含む... | - | | +| 2 | ├ 画面デザイン | タスク | (なし) | - | #1 | | +| 3 | └ API実装 | タスク | (なし) | - | #1 | | +| 4 | CSV出力対応 | バグ | (なし) | 文字化け修正 | - | ⚠️ トラッカー名未解決 | +``` + +AskUserQuestion で以下を提示: +- **「作成する」** → Step 4 に進む +- **「修正する」** → ユーザーの指示に従って解釈結果を修正し、再表示 +- **「キャンセル」** → フロー終了 + +### 4. ループ実行 + +承認後、チケットを順番に作成する。**親チケットを先に作成し、返されたIDを子チケットの `--parent-issue-id` に設定する。** + +#### 4.1. 作成順序 + +1. 親チケット(ルートレベル)を上から順に作成 +2. 各親チケットの作成直後に、その子チケットを作成(親の返却IDを `--parent-issue-id` に設定) +3. 深いネストがある場合も同様に再帰的に処理 + +#### 4.2. 実行 + +各チケットについて以下を実行: + +```bash +redmine-cli create-issue --profile

--project --subject "件名" [--description "説明"] [--tracker-id N] [--priority-id N] [--assigned-to-id N] [--version-id N] [--category-id N] [--parent-issue-id N] [--estimated-hours N] [--private] +``` + +- 作成ごとに進捗を表示: 「(3/10) #1234 ログイン機能の実装 ✅」 +- 説明文に改行が含まれる場合は適切にエスケープする + +#### 4.3. エラー時の挙動 + +- **作成失敗**: エラーメッセージを記録し、そのチケットをスキップして次に進む +- **親チケットが失敗した場合**: その子チケットも全てスキップする(親IDが不明のため) +- **接続エラー・認証エラー**: 一時的な問題の可能性があるため、1回だけリトライ。2回目も失敗したら全体を停止しユーザーに通知 + +### 5. 結果サマリーと次のアクション + +#### 5.1. サマリー表示 + +``` +一括作成が完了しました: + +✅ 成功: 8件 +❌ 失敗: 2件 + +| # | 結果 | ID | 件名 | エラー | +|---|------|-----|------|-------| +| 1 | ✅ | #1234 | ログイン機能の実装 | - | +| 2 | ✅ | #1235 | ├ 画面デザイン | - | +| 3 | ✅ | #1236 | └ API実装 | - | +| 4 | ❌ | - | CSV出力対応 | トラッカー「バグ修正」が見つかりません | +... +``` + +#### 5.2. 次のアクション提案 + +次のアクションを**平易な言葉**で提案する: + +- **失敗したチケットを修正して再作成**: 失敗原因を修正し、失敗分だけ `redmine:create` で個別作成 +- **関連チケットを追加する**: `redmine:relation` スキルへ案内 +- **別のファイルから一括作成する**: 同じスキルで別ファイルを指定 +- **検索に戻る**: `redmine:search` スキルへ案内 + +## エラーハンドリング + +- **CLI 未インストール**: `which redmine-cli` で検出。OS に応じたインストール方法を案内 +- **プロファイル未設定**: `redmine-cli config list` で空を検出。インラインで config add フローを実行し、設定完了後に元のフローに継続 +- **認証エラー・接続エラー**: 「Redmine への接続でエラーが発生しました。以下を確認してください: (1) プロファイルの URL が正しいか (2) API キーが有効か (3) Redmine サーバーが稼働しているか。`redmine-cli config list` でプロファイル設定を確認できます」と案内する +- **ファイル読み込みエラー**: ファイルが存在しない、読み取り権限がない場合はパスの確認を促す +- **解釈結果が0件**: 「チケット情報を抽出できませんでした。ファイルの内容を確認してください」と表示し、ファイル内容の一部を表示して解釈のヒントを提案する +- **バリデーションエラー (422)**: エラーメッセージを記録してスキップ。サマリーで表示 +- **親チケット作成失敗**: 子チケットも全てスキップし、サマリーで「親チケット失敗のためスキップ」と明記 diff --git a/redmine/skills/config/SKILL.md b/redmine/skills/config/SKILL.md index e451e48..6f69b05 100644 --- a/redmine/skills/config/SKILL.md +++ b/redmine/skills/config/SKILL.md @@ -11,7 +11,7 @@ redmine-cli のプロファイル(Redmine サーバーの URL と API キー 1. `which redmine-cli` で CLI がインストールされているか確認する 2. **未インストールの場合**、以下を案内して終了する: - macOS: `brew install chippy-ao/tap/redmine-cli` - - Windows: GitHub Releases (https://github.com/chippy-ao/redmine-cli/releases) から ZIP をダウンロードし、展開して `redmine-cli.exe` を取得。PATH に追加すると便利 + - Windows: [README の Windows セクション](../../README.md) を参照(ZIP 展開 → PATH 設定 → ターミナル再起動) - その他: `go install github.com/chippy-ao/redmine-cli@latest` ## フロー diff --git a/redmine/skills/create/SKILL.md b/redmine/skills/create/SKILL.md index 8b0f3f5..507a450 100644 --- a/redmine/skills/create/SKILL.md +++ b/redmine/skills/create/SKILL.md @@ -35,7 +35,7 @@ redmine-cli を使って、チケットの作成を対話的に支援する。 1. `which redmine-cli` で CLI がインストールされているか確認する 2. **未インストールの場合**、以下を案内して終了する: - macOS: `brew install chippy-ao/tap/redmine-cli` - - Windows: GitHub Releases (https://github.com/chippy-ao/redmine-cli/releases) から ZIP をダウンロードし、展開して `redmine-cli.exe` を取得。PATH に追加すると便利 + - Windows: [README の Windows セクション](../../README.md) を参照(ZIP 展開 → PATH 設定 → ターミナル再起動) - その他: `go install github.com/chippy-ao/redmine-cli@latest` ### 0. プロファイル選択 diff --git a/redmine/skills/relation/SKILL.md b/redmine/skills/relation/SKILL.md index 95474fe..48a103e 100644 --- a/redmine/skills/relation/SKILL.md +++ b/redmine/skills/relation/SKILL.md @@ -43,7 +43,7 @@ redmine-cli を使って、チケット間のリレーション(関連・ブ 1. `which redmine-cli` で CLI がインストールされているか確認する 2. **未インストールの場合**、以下を案内して終了する: - macOS: `brew install chippy-ao/tap/redmine-cli` - - Windows: GitHub Releases (https://github.com/chippy-ao/redmine-cli/releases) から ZIP をダウンロードし、展開して `redmine-cli.exe` を取得。PATH に追加すると便利 + - Windows: [README の Windows セクション](../../README.md) を参照(ZIP 展開 → PATH 設定 → ターミナル再起動) - その他: `go install github.com/chippy-ao/redmine-cli@latest` ### 0. プロファイル選択 diff --git a/redmine/skills/search/SKILL.md b/redmine/skills/search/SKILL.md index c3e2dae..b3b74e6 100644 --- a/redmine/skills/search/SKILL.md +++ b/redmine/skills/search/SKILL.md @@ -35,7 +35,7 @@ redmine-cli を使って、チケットの検索・閲覧を対話的に支援 1. `which redmine-cli` で CLI がインストールされているか確認する 2. **未インストールの場合**、以下を案内して終了する: - macOS: `brew install chippy-ao/tap/redmine-cli` - - Windows: GitHub Releases (https://github.com/chippy-ao/redmine-cli/releases) から ZIP をダウンロードし、展開して `redmine-cli.exe` を取得。PATH に追加すると便利 + - Windows: [README の Windows セクション](../../README.md) を参照(ZIP 展開 → PATH 設定 → ターミナル再起動) - その他: `go install github.com/chippy-ao/redmine-cli@latest` ### 0. プロファイル選択 diff --git a/redmine/skills/update/SKILL.md b/redmine/skills/update/SKILL.md index 0ce65a9..fc11e75 100644 --- a/redmine/skills/update/SKILL.md +++ b/redmine/skills/update/SKILL.md @@ -37,7 +37,7 @@ redmine-cli を使って、チケットの更新・削除・コメント記入 1. `which redmine-cli` で CLI がインストールされているか確認する 2. **未インストールの場合**、以下を案内して終了する: - macOS: `brew install chippy-ao/tap/redmine-cli` - - Windows: GitHub Releases (https://github.com/chippy-ao/redmine-cli/releases) から ZIP をダウンロードし、展開して `redmine-cli.exe` を取得。PATH に追加すると便利 + - Windows: [README の Windows セクション](../../README.md) を参照(ZIP 展開 → PATH 設定 → ターミナル再起動) - その他: `go install github.com/chippy-ao/redmine-cli@latest` ### 0. プロファイル選択