Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ redmine:analyze
- プロファイル管理(複数 Redmine サーバーの接続設定)
- チケット検索(キーワード、プロジェクト、ステータス、担当者等)
- チケット詳細・コメント履歴の表示
- チケット作成(対話的にプロジェクト選択・名称→ID解決)
- チケット作成(対話的にプロジェクト選択・名称→ID解決・重複チェック
- チケット更新・削除・コメント記入(確認フロー付き)
- チケット関連付け(6種のリレーションタイプ対応)
- チケット分析(ステータス別集計、担当者負荷、期限切れ警告)
Expand Down
2 changes: 1 addition & 1 deletion redmine/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "redmine",
"version": "2.2.0",
"version": "2.3.0",
"description": "redmine-cli を活用したチケット検索・閲覧・分析・作成・更新・削除・関連付け支援プラグイン。プロファイル管理で複数の Redmine サーバーを横断操作。",
"author": {
"name": "chippy-ao"
Expand Down
4 changes: 3 additions & 1 deletion redmine/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ redmine:create
redmine:create ログイン画面のバグ修正チケットを作って
```

作成前に類似チケットの重複チェックが自動で実行される。表現揺れを含む複数キーワードで検索し、意味的に類似するチケットがあれば候補を表示して確認を促す。

### チケット関連付け

```text
Expand Down Expand Up @@ -125,7 +127,7 @@ redmine:config
|--------|------|
| `redmine:config` | プロファイルの追加・一覧・デフォルト変更・削除 |
| `redmine:search` | キーワード・プロジェクト・ステータス・担当者等でチケット検索、詳細表示 |
| `redmine:create` | 対話的にチケットを作成(プロジェクト選択・名称→ID解決付き) |
| `redmine:create` | 対話的にチケットを作成(プロジェクト選択・名称→ID解決・重複チェック付き) |
| `redmine:relation` | チケット間のリレーション追加・削除(6種の関連タイプ対応) |
| `redmine:update` | チケットの更新・削除・コメント記入(名称→ID解決・確認フロー付き) |
| `redmine:analyze` | ステータス別集計、担当者負荷、期限切れ警告、優先度分布 |
Expand Down
68 changes: 68 additions & 0 deletions redmine/skills/create/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ redmine-cli を使って、チケットの作成を対話的に支援する。
- `redmine-cli statuses` — ステータス一覧取得(名称→ID解決)
- `redmine-cli categories --project <id>` — カテゴリ一覧取得
- `redmine-cli versions --project <id>` — バージョン一覧取得
- `redmine-cli search` — キーワード検索(重複チェック用)
- `redmine-cli config list` — プロファイル一覧取得

すべてのコマンドに `--profile <name>` を付与してプロファイルを指定する(デフォルトプロファイル使用時は省略可)。
Expand Down Expand Up @@ -67,6 +68,72 @@ AskUserQuestion で以下を順に収集する:
7. **カテゴリ** (任意): `redmine-cli categories --project <proj> --profile <p>` で一覧取得し、名称で選択→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 <p> --project <proj> --status '*' --keyword "<query>" --limit 25
```

- `--status '*'`: closed チケットも含めて検索する(過去に解決済みの重複を検知するため)
- `--project <proj>`: 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 <id> --profile <p> --include journals` で詳細表示後、再度確認

**類似候補がない場合:**

「類似チケットは見つかりませんでした」と表示し、中断なく Step 3 へ進む。

### 3. 確認と実行

収集した情報を一覧表示し、AskUserQuestion で「作成する / 修正する / キャンセル」を確認。
Expand All @@ -93,3 +160,4 @@ redmine-cli create-issue --profile <p> --project <proj> --subject "件名" [--de
- **認証エラー・接続エラー**: 「Redmine への接続でエラーが発生しました。以下を確認してください: (1) プロファイルの URL が正しいか (2) API キーが有効か (3) Redmine サーバーが稼働しているか。`redmine-cli config list` でプロファイル設定を確認できます」と案内する
- **バリデーションエラー (422)**: Redmine からのエラーメッセージをそのまま表示し、修正を促す。よくある原因(件名が空、プロジェクトが無効等)を補足する
- **必須フラグ不足**: 件名またはプロジェクトが未指定の場合は再入力を求める
- **重複チェック時の検索エラー**: `redmine-cli search` が接続エラー・認証エラー・タイムアウト等で失敗した場合、「重複チェックができませんでした」とユーザーに通知し、重複チェックをスキップして Step 3 に進む。重複チェックはガード機能であり、失敗してもチケット作成をブロックしない
Loading