diff --git a/docs/plans/2026-04-01-batch-create-plan.md b/docs/plans/2026-04-01-batch-create-plan.md deleted file mode 100644 index f5e301d..0000000 --- a/docs/plans/2026-04-01-batch-create-plan.md +++ /dev/null @@ -1,306 +0,0 @@ -# 一括チケット作成スキル 実装計画 - -**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 に更新。" -```