From 5447e0b77ec7f2e110e506c6ba864b20ab2da54d Mon Sep 17 00:00:00 2001 From: Daichi Aoki Date: Wed, 1 Apr 2026 11:00:33 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat(redmine):=20create=20=E3=82=B9?= =?UTF-8?q?=E3=82=AD=E3=83=AB=E3=81=AB=E9=87=8D=E8=A4=87=E3=83=81=E3=82=A7?= =?UTF-8?q?=E3=83=83=E3=82=AF=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit チケット情報収集(Step 2)と確認(Step 3)の間に Step 2.5 重複チェックを挿入。 Claude が件名から表現揺れを含む複数クエリを生成し、同一プロジェクト内で 並列検索した結果を意味的に評価して類似候補を表示する。 Closes #15 --- redmine/skills/create/SKILL.md | 68 ++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/redmine/skills/create/SKILL.md b/redmine/skills/create/SKILL.md index 4035017..8b0f3f5 100644 --- a/redmine/skills/create/SKILL.md +++ b/redmine/skills/create/SKILL.md @@ -16,6 +16,7 @@ redmine-cli を使って、チケットの作成を対話的に支援する。 - `redmine-cli statuses` — ステータス一覧取得(名称→ID解決) - `redmine-cli categories --project ` — カテゴリ一覧取得 - `redmine-cli versions --project ` — バージョン一覧取得 +- `redmine-cli search` — キーワード検索(重複チェック用) - `redmine-cli config list` — プロファイル一覧取得 すべてのコマンドに `--profile ` を付与してプロファイルを指定する(デフォルトプロファイル使用時は省略可)。 @@ -67,6 +68,72 @@ AskUserQuestion で以下を順に収集する: 7. **カテゴリ** (任意): `redmine-cli categories --project --profile

` で一覧取得し、名称で選択→ID解決(権限エラー時はスキップ) 8. **親チケット** (任意): ユーザーがチケット番号を指定した場合のみ +### 2.5. 重複チェック + +チケット情報の収集(Step 2)が完了した時点で、同一プロジェクト内の既存チケットに類似するものがないか自動的に検索する。 + +#### 2.5.1. 検索クエリ生成 + +ユーザーが入力した件名を意味的に分析し、**表現揺れを含む 2〜4 個の検索キーワード**を生成する。 + +- 件名そのものだけでなく、同義語や関連表現のバリエーションを含める +- 件名が短い場合(3 語以下)は件名そのものを 1 クエリとして使い、無理にバリエーションを増やさない + +**例:** +- 件名「ログイン画面で認証エラーが発生する」→ クエリ: `"認証エラー"`, `"ログインエラー"`, `"ログイン 失敗"` +- 件名「CSV出力が文字化けする」→ クエリ: `"CSV 文字化け"`, `"CSV出力 エンコーディング"`, `"CSV 文字コード"` +- 件名「帳票印刷」→ クエリ: `"帳票印刷"`(短いのでそのまま) + +#### 2.5.2. 並列検索実行 + +各クエリに対して以下を**並列で** Bash 実行する: + +```bash +redmine-cli search --profile

--project --status '*' --keyword "" --limit 25 +``` + +- `--status '*'`: closed チケットも含めて検索する(過去に解決済みの重複を検知するため) +- `--project `: Step 1 で選択済みのプロジェクト内のみ検索する +- `--limit 25`: クエリあたり最大 25 件 + +検索開始時に「N個のキーワードで類似チケットを検索しています...」とユーザーに伝える。 + +#### 2.5.3. 結果マージ・重複排除 + +全クエリの検索結果をチケット ID ベースで重複排除し、1 つのリストにマージする。作成中のチケットと完全同一の件名を持つチケットがある場合は、優先的に上位に表示する。 + +#### 2.5.4. 意味的類似度評価 + +マージしたリストに対して、新しい件名との**意味的な類似性**を評価する。 + +- キーワード一致だけで表面的にヒットしたが、意味的に無関係なチケットは除外する +- 除外例: 「認証エラー」で検索→「認証エラーの対応手順書を更新」はヒットするが、新チケット「ログイン時に認証エラーが発生」とは目的が異なるため除外 +- この判定は Claude の意味理解に基づいて行う + +#### 2.5.5. 候補表示・ユーザー確認 + +**類似候補がある場合:** + +候補一覧を以下の形式で表示する: + +``` +類似チケットが見つかりました: + +| # | ID | 件名 | 説明(要約) | ステータス | 担当者 | +|---|-----|------|------------|-----------|--------| +| 1 | #1234 | ログイン画面で認証エラー | SSO連携時に500エラー... | 進行中 | 山田太郎 | +| 2 | #987 | 認証エラーの修正 | パスワードリセット後に... | 完了 | 鈴木花子 | +``` + +AskUserQuestion で以下の選択肢を提示する: +- **「それでも作成する」** → Step 3(確認と実行)に進む +- **「キャンセル」** → フロー終了 +- **「チケットの中身を見る」** → `redmine-cli get-issue --profile

--include journals` で詳細表示後、再度確認 + +**類似候補がない場合:** + +「類似チケットは見つかりませんでした」と表示し、中断なく Step 3 へ進む。 + ### 3. 確認と実行 収集した情報を一覧表示し、AskUserQuestion で「作成する / 修正する / キャンセル」を確認。 @@ -93,3 +160,4 @@ redmine-cli create-issue --profile

--project --subject "件名" [--de - **認証エラー・接続エラー**: 「Redmine への接続でエラーが発生しました。以下を確認してください: (1) プロファイルの URL が正しいか (2) API キーが有効か (3) Redmine サーバーが稼働しているか。`redmine-cli config list` でプロファイル設定を確認できます」と案内する - **バリデーションエラー (422)**: Redmine からのエラーメッセージをそのまま表示し、修正を促す。よくある原因(件名が空、プロジェクトが無効等)を補足する - **必須フラグ不足**: 件名またはプロジェクトが未指定の場合は再入力を求める +- **重複チェック時の検索エラー**: `redmine-cli search` が接続エラー・認証エラー・タイムアウト等で失敗した場合、「重複チェックができませんでした」とユーザーに通知し、重複チェックをスキップして Step 3 に進む。重複チェックはガード機能であり、失敗してもチケット作成をブロックしない From 936fde77ec109bb8cbb29f1f0398ca421057831d Mon Sep 17 00:00:00 2001 From: Daichi Aoki Date: Wed, 1 Apr 2026 11:08:43 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs(redmine):=20=E9=87=8D=E8=A4=87?= =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF=E6=A9=9F=E8=83=BD=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=AB=E4=BC=B4=E3=81=84README=E3=81=A8?= =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E3=82=92=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - plugin.json: v2.2.0 → v2.3.0 - redmine/README.md: create スキルの説明に重複チェック機能を追記 - README.md: redmine セクションに重複チェックの記載を追記 --- README.md | 2 +- redmine/.claude-plugin/plugin.json | 2 +- redmine/README.md | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 05fa969..cd9357f 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ redmine:analyze - プロファイル管理(複数 Redmine サーバーの接続設定) - チケット検索(キーワード、プロジェクト、ステータス、担当者等) - チケット詳細・コメント履歴の表示 -- チケット作成(対話的にプロジェクト選択・名称→ID解決) +- チケット作成(対話的にプロジェクト選択・名称→ID解決・重複チェック) - チケット更新・削除・コメント記入(確認フロー付き) - チケット関連付け(6種のリレーションタイプ対応) - チケット分析(ステータス別集計、担当者負荷、期限切れ警告) diff --git a/redmine/.claude-plugin/plugin.json b/redmine/.claude-plugin/plugin.json index 0cd6d08..105fa00 100644 --- a/redmine/.claude-plugin/plugin.json +++ b/redmine/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "redmine", - "version": "2.2.0", + "version": "2.3.0", "description": "redmine-cli を活用したチケット検索・閲覧・分析・作成・更新・削除・関連付け支援プラグイン。プロファイル管理で複数の Redmine サーバーを横断操作。", "author": { "name": "chippy-ao" diff --git a/redmine/README.md b/redmine/README.md index b13d57a..d64f096 100644 --- a/redmine/README.md +++ b/redmine/README.md @@ -85,6 +85,8 @@ redmine:create redmine:create ログイン画面のバグ修正チケットを作って ``` +作成前に類似チケットの重複チェックが自動で実行される。表現揺れを含む複数キーワードで検索し、意味的に類似するチケットがあれば候補を表示して確認を促す。 + ### チケット関連付け ```text @@ -125,7 +127,7 @@ redmine:config |--------|------| | `redmine:config` | プロファイルの追加・一覧・デフォルト変更・削除 | | `redmine:search` | キーワード・プロジェクト・ステータス・担当者等でチケット検索、詳細表示 | -| `redmine:create` | 対話的にチケットを作成(プロジェクト選択・名称→ID解決付き) | +| `redmine:create` | 対話的にチケットを作成(プロジェクト選択・名称→ID解決・重複チェック付き) | | `redmine:relation` | チケット間のリレーション追加・削除(6種の関連タイプ対応) | | `redmine:update` | チケットの更新・削除・コメント記入(名称→ID解決・確認フロー付き) | | `redmine:analyze` | ステータス別集計、担当者負荷、期限切れ警告、優先度分布 |