diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index ee1a1ce..a6646b5 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -8,6 +8,11 @@ "name": "law-study", "source": "./law-study", "description": "e-Gov法令APIを活用した法令勉強支援プラグイン。キーワード検索で法令を探し、AIによる要約・質問応答で学習を支援。" + }, + { + "name": "redmine", + "source": "./redmine", + "description": "redmine-cli を活用したチケット検索・閲覧・分析支援プラグイン。プロファイル管理で複数の Redmine サーバーを横断操作。" } ] } diff --git a/.gitignore b/.gitignore index 0e696f9..fb4a1fe 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,7 @@ # brain storming docs/plans/* + +specs/ +.specify/ +.claude/skills/speckit*/ \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..c1e5af2 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,29 @@ +# claude-code Development Guidelines + +Auto-generated from all feature plans. Last updated: 2026-02-25 + +## Active Technologies + +- Markdown (SKILL.md) + JSON (plugin.json) + redmine-cli(Go CLI、`brew install chippy-ao/tap/redmine-cli`) (001-redmine-skill) + +## Project Structure + +```text +src/ +tests/ +``` + +## Commands + +# Add commands for Markdown (SKILL.md) + JSON (plugin.json) + +## Code Style + +Markdown (SKILL.md) + JSON (plugin.json): Follow standard conventions + +## Recent Changes + +- 001-redmine-skill: Added Markdown (SKILL.md) + JSON (plugin.json) + redmine-cli(Go CLI、`brew install chippy-ao/tap/redmine-cli`) + + + diff --git a/README.md b/README.md index 32d7821..792ad83 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,9 @@ Claude Code 用のプラグイン集 ```bash # law-studyプラグイン /plugin install law-study@chippy-ao-plugins + +# redmineプラグイン +/plugin install redmine@chippy-ao-plugins ``` ### 3. 確認 @@ -30,6 +33,7 @@ Claude Code 用のプラグイン集 | プラグイン | 説明 | |------------|------| | [law-study](./law-study/) | e-Gov法令APIを活用した法令勉強支援。キーワード検索・要約・質問応答 | +| [redmine](./redmine/) | redmine-cli を活用したチケット検索・閲覧・分析支援。複数サーバー横断操作対応 | ## 使い方 @@ -52,6 +56,31 @@ e-Gov法令APIを使った法令勉強支援。 詳細は [law-study/README.md](./law-study/README.md) を参照。 +### redmine + +redmine-cli を使ったチケット検索・閲覧・分析支援。 + +```text +# プロファイル設定 +redmine:config + +# キーワードを指定して検索 +redmine:search ログイン機能のバグ + +# プロジェクト状況分析 +redmine:analyze +``` + +**できること**: +- プロファイル管理(複数 Redmine サーバーの接続設定) +- チケット検索(キーワード、プロジェクト、ステータス、担当者等) +- チケット詳細・コメント履歴の表示 +- チケット分析(ステータス別集計、担当者負荷、期限切れ警告) + +**前提条件**: [redmine-cli](https://github.com/chippy-ao/redmine-cli) のインストールが必要。 + +詳細は [redmine/README.md](./redmine/README.md) を参照。 + ## ライセンス MIT diff --git a/redmine/.claude-plugin/plugin.json b/redmine/.claude-plugin/plugin.json new file mode 100644 index 0000000..d444b93 --- /dev/null +++ b/redmine/.claude-plugin/plugin.json @@ -0,0 +1,16 @@ +{ + "name": "redmine", + "version": "2.0.0", + "description": "redmine-cli を活用したチケット検索・閲覧・分析支援プラグイン。プロファイル管理で複数の Redmine サーバーを横断操作。", + "author": { + "name": "chippy-ao" + }, + "license": "MIT", + "keywords": [ + "redmine", + "ticket", + "issue-tracking", + "project-management", + "cli" + ] +} diff --git a/redmine/README.md b/redmine/README.md new file mode 100644 index 0000000..e042d3f --- /dev/null +++ b/redmine/README.md @@ -0,0 +1,116 @@ +# redmine + +redmine-cli を活用したチケット検索・閲覧・分析支援プラグイン。 +複数の Redmine サーバーをプロファイルで横断操作できる。 + +## 前提条件 + +- [redmine-cli](https://github.com/chippy-ao/redmine-cli) がインストールされていること +- Redmine 5.1.0 以上のサーバーにアクセス可能であること +- Redmine REST API キーを取得済みであること + +### redmine-cli のインストール + +**macOS (Homebrew):** + +```bash +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` があるフォルダから実行: + +```powershell +.\redmine-cli.exe config add work --url https://redmine.example.com --api-key YOUR_API_KEY +.\redmine-cli.exe search --keyword "バグ" --status open +``` + +4. (任意)PATH を通すとどこからでも実行可能: + - Win + X →「システム」→「システムの詳細設定」→「環境変数」 + - `Path` を選んで「編集」→「新規」で `redmine-cli.exe` があるフォルダのパスを追加 + - コマンドプロンプトを再起動 + +**go install:** + +```bash +go install github.com/chippy-ao/redmine-cli@latest +``` + +## プラグインのインストール + +```bash +/plugin install redmine@chippy-ao-plugins +``` + +## セットアップ + +プロファイルを対話的に設定: + +```text +redmine:config +``` + +または CLI で直接設定: + +```bash +redmine-cli config add work --url https://redmine.example.com --api-key YOUR_API_KEY +``` + +## 使い方 + +### チケット検索 + +```text +redmine:search ログイン機能のバグ +``` + +または引数なしで対話的に開始: + +```text +redmine:search +``` + +### プロジェクト状況分析 + +```text +redmine:analyze +``` + +### プロファイル管理 + +```text +redmine:config +``` + +## 機能一覧 + +| スキル | 説明 | +|--------|------| +| `redmine:config` | プロファイルの追加・一覧・デフォルト変更・削除 | +| `redmine:search` | キーワード・プロジェクト・ステータス・担当者等でチケット検索、詳細表示 | +| `redmine:analyze` | ステータス別集計、担当者負荷、期限切れ警告、優先度分布 | + +## 複数の Redmine サーバーを使う + +プロファイルを複数登録して切り替え: + +```bash +redmine-cli config add work --url https://redmine-work.example.com --api-key KEY1 +redmine-cli config add oss --url https://redmine-oss.example.com --api-key KEY2 +redmine-cli config set-default work +``` + +`redmine:search` や `redmine:analyze` 起動時に、使用するプロファイルを選択できる。 +複数プロファイルを同時に選択して横断検索することも可能。 + +## 制約 + +- 読み取り専用(チケットの作成・更新・削除は不可) +- 1リクエストあたり最大 100 件の取得制限 + +## ライセンス + +MIT diff --git a/redmine/skills/analyze/SKILL.md b/redmine/skills/analyze/SKILL.md new file mode 100644 index 0000000..54c7c30 --- /dev/null +++ b/redmine/skills/analyze/SKILL.md @@ -0,0 +1,86 @@ +--- +name: analyze +description: Redmineプロジェクト状況分析スキル。redmine-cli を使ってチケット群を取得し、ステータス別集計・担当者負荷・期限切れ警告などを分析する。「redmine:analyze」「プロジェクトの状況まとめて」「担当者の負荷」「期限切れチケット」「チケット分析」で起動。 +--- + +# Redmine プロジェクト状況分析 + +redmine-cli を使ってチケット群を取得し、プロジェクトの状況を集計・分析する。 + +## 利用する CLI コマンド + +- `redmine-cli search --profile
--project ` — プロジェクト一覧取得
+- `redmine-cli config list` — プロファイル一覧取得
+
+## 大前提
+
+- **読み取り専用**: 分析結果の表示のみ。チケットの変更は Redmine Web UI で行う
+- 1リクエストあたり最大 100 件の取得制限がある
+- 100件超の場合はフィルタ条件で絞り込んでから再分析を提案する
+
+## フロー
+
+### 0. 前提チェック
+
+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 に追加すると便利
+ - その他: `go install github.com/chippy-ao/redmine-cli@latest`
+
+### 1. プロファイル選択
+
+`redmine-cli config list` を実行してプロファイルを確認する。
+
+- **0件**: 「プロファイルが未設定です。今から設定しましょう」と伝え、AskUserQuestion でプロファイル名・URL・API キーを順に聞いて `redmine-cli config add` を実行する。設定完了後、そのまま分析フローに継続する
+- **1件**: そのプロファイルを使用
+- **複数**: AskUserQuestion で選択(1つ / 複数選択 / 全プロファイル)
+
+### 2. プロジェクト選択
+
+`redmine-cli projects --profile --limit 100` でプロジェクト一覧を取得し、ユーザーに選択してもらう。
+
+### 3. チケット取得と分析
+
+`redmine-cli search --profile --project --limit 100` を実行してプロジェクト一覧を取得する。複数プロファイル選択時は各プロファイルに対して並列で実行し、結果をマージする(プロファイル名をラベルとして付与)
+2. プロジェクト一覧をユーザーに提示し、どのプロジェクトで検索するか選択してもらう
+ - 親プロジェクト・サブプロジェクトの関係がある場合は、階層が分かるように表示する
+ - **「全プロジェクト横断検索」** も選択肢として提示する
+3. ユーザーの入力にプロジェクトを示唆する表現がある場合、該当するプロジェクトとそのサブプロジェクトを候補として強調する
+4. 選択された `--project` を以降の検索で使用する。「全プロジェクト横断検索」が選ばれた場合は `--project` を省略する
+
+- **引数なしで起動された場合**: 先にプロジェクト一覧を提示して選択してもらい、その後に何を検索したいか質問する
+
+### 1. 絞り込み条件の確認
+
+プロジェクト選択後、ユーザーの入力からフィルタ条件(ステータス・トラッカー・担当者・バージョン等)が**明確に読み取れない場合**に、キーワード以外の絞り込みオプションを提示する。
+
+**提示する条件**:
+- **ステータス**: 未完了のみ (`--status open`) / 完了済みのみ (`--status closed`) / すべて (`--status '*'`)
+- **トラッカー**: 質問 / 障害 / 要望 など種別で絞る (`--tracker-id ` / `redmine-cli statuses --profile ` / `redmine-cli versions --project ` で名称マッチングし、対応する ID を解決してから `search` に渡す
+4. **カテゴリ/サブシステムの識別**: カテゴリやサブシステムに該当しそうな表現がある場合、選択済みのプロジェクトに対して `redmine-cli categories --project ` でカテゴリ ID を解決し、`--category-id` を指定して検索する(「全プロジェクト横断検索」の場合はカテゴリ絞り込み不可)
+5. **対象バージョンの識別**: バージョン名に該当しそうな表現がある場合、`redmine-cli versions --project ` でバージョン ID を解決し、`--version-id` を指定して検索する
+
+**分解例**:
+- 「データ移行についてのなんかない? ver9への質問」→ `--keyword "データ移行"`, トラッカー=`ver9への質問`(→ 曖昧表現の解決へ)
+- 「未完了バグ」→ keyword なし, `--tracker-id <バグのID>`, `--status open`
+- 「山田さんが担当のチケット」→ keyword なし, `--assigned-to` で検索
+- 「母子保健のデータ移行チケット」→ `--keyword "データ移行"`, カテゴリ=`母子保健`(→ categories でカテゴリ ID を解決し `--category-id` を指定)
+
+#### 検索コマンドの実行
+
+```bash
+redmine-cli search --profile --keyword "..." --project ` を呼び出し、候補を確認する。プロジェクトが選択済みの場合は `redmine-cli categories --project ` も**並列で**呼び出す
+2. 一つのみにマッチする場合はそのまま採用する
+3. **複数にマッチする候補がある場合**、AskUserQuestion でユーザーに確認する
+
+いずれにもマッチしない場合は、その表現も `--keyword` に含めて全文検索する。
+
+### 3. 名称ベースの ID 解決
+
+ユーザーがトラッカー・ステータス・バージョンを**名称**で指定した場合(「バグ」「完了」「機能」等):
+
+1. `redmine-cli trackers --profile ` / `redmine-cli statuses --profile ` / `redmine-cli versions --project ` を呼び出して一覧を取得
+2. ユーザーの指定した名称に一致する ID を特定
+3. その ID を `--tracker-id` / `--status` / `--version-id` に渡して検索
+
+ユーザーに ID 番号を覚えさせない。常に名称で操作できるようにする。
+
+### 3.5. 検索結果が多い場合の絞り込み
+
+検索結果が 25 件を超える場合、以下の優先順位で絞り込みを提案する:
+
+1. **プロジェクト絞り込み(「全プロジェクト横断検索」選択時のみ)**: `redmine-cli projects --profile ` で一覧を取得し、該当しそうなプロジェクトを提示
+2. **カテゴリ絞り込み**: `redmine-cli categories --project ` でカテゴリ一覧を提示し、`--category-id` で絞り込む。**権限エラーが返る場合はセクション 3.6 のフォールバックに従う**
+3. **ステータス絞り込み**: `--status open` または `--status closed` で未完了/完了済みを切り分ける
+4. **トラッカー絞り込み**: `redmine-cli trackers --profile ` で一覧を提示
+5. **担当者絞り込み**: `--assigned-to me` で自分担当のみに限定
+6. **バージョン絞り込み**: `redmine-cli versions --project ` で一覧を提示
+
+### 3.6. カテゴリ/サブシステム絞り込みが使えない場合
+
+`redmine-cli categories` が**権限エラー**を返す場合の対応ルール。
+
+1. **権限エラー時**: カテゴリ一覧の取得ができない環境であることをユーザーに伝える
+2. **カスタムフィールド型サブシステム**: サブシステムがカスタムフィールド(例: `cf_47`)で実装されている場合、REST API ではフィルタリングができないことをユーザーに伝える
+3. **キーワード代替の提案と注意喚起**: 代替としてキーワード検索での絞り込みを提案する。ただし、以下の注意を必ずユーザーに伝える:
+ - キーワード検索はチケットの件名・説明の全文検索であり、カテゴリ分類ベースの絞り込みとは異なる
+ - カテゴリ名がチケットの件名・説明に含まれていない場合、取りこぼしが発生する
+ - 網羅的な検索が必要な場合は、**Redmine の Web UI でカテゴリを直接指定して検索する**ことを推奨する
+
+### 4. チケット詳細表示
+
+ユーザーがチケット番号を指定したら、`redmine-cli get-issue --include journals,children,relations` で詳細を取得する。
+
+- 詳細は以下の構成で表示する:
+ - **基本情報**: プロジェクト、トラッカー、ステータス、優先度、担当者、進捗率
+ - **説明**: 長い場合は要約して表示し、「全文を見る」オプションを提示
+ - **コメント履歴**: 時系列で表示、各コメントに投稿者と日時を添える
+ - **子チケット・関連チケット**: ある場合のみ表示
+- コメントが非常に多い場合は、最新の5件を表示し、「もっと見る」オプションを提示
+
+### 5. プロジェクト一覧・メタデータ閲覧
+
+ユーザーがプロジェクト情報を求めた場合:
+
+- `redmine-cli projects --profile ` でプロジェクト一覧を表示
+- プロジェクト選択後、`redmine-cli versions --project ` でバージョン一覧を表示
+- `redmine-cli categories --project ` でカテゴリ一覧を表示
+
+### 6. 次のアクション提案
+
+各フロー完了後、ユーザーの次のアクションを**平易な言葉**で提案する:
+
+- **もっと絞り込む**: 条件を変えて再検索
+- **チケットの中身を見る**: 特定チケットの詳細を確認
+- **プロジェクトの全体像**: プロジェクトのバージョンやカテゴリを確認
+- **別のキーワードで探す**: 新しいキーワードで検索し直す
+- **プロファイルを切り替える**: 別の Redmine サーバーで検索
+
+## エラーハンドリング
+
+- **CLI 未インストール**: `which redmine-cli` で検出。OS に応じたインストール方法を案内
+- **プロファイル未設定**: `redmine-cli config list` で空を検出。インラインで config add フローを実行し、設定完了後に元のフローに継続
+- **認証エラー・接続エラー**: 「Redmine への接続でエラーが発生しました。以下を確認してください: (1) プロファイルの URL が正しいか (2) API キーが有効か (3) Redmine サーバーが稼働しているか。`redmine-cli config list` でプロファイル設定を確認できます」と案内する
+- **検索結果 0 件**: 「該当するチケットが見つかりませんでした。キーワードを変えるか、検索条件を緩めてみてください」と提案する
+- **100件超のヒット**: 「検索結果が多数あります(全N件中100件を表示)。絞り込み条件を追加すると、目的のチケットに早く到達できます」と提案する