triage-issue について
triage-issueは、Jiraを利用するユーザー向けに重複や関連するバグを検索し、修正履歴を踏まえたトリアージを支援するスキルです。結果を提示してから、ユーザーの判断に応じて既存の課題へのコメント追加や、構造化されたバグ課題の作成を行います。
主な機能
- 01複数の観点からJiraを検索
- 02重複・関連・新規課題の判定
- 03解決済み課題の修正履歴確認
- 04確認後のコメント追加や課題作成
活用シーン
- 01エラー報告が既存課題と重複するか確認
- 02バグと修正履歴から再発の可能性を評価
- 03新しいバグ報告をJira課題に整理
- 04既存課題にエラーや環境情報を追記
MCP 対応
Jiraのツールを使って課題を検索・取得し、ユーザーの判断後にコメント追加や課題作成を行います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ atlassian/ atlassian-mcp-server --skill triage-issueインストール後、Claude Code で/triage-issueを入力して読み込まれたか確認します。
同梱ファイルreferences/bug-report-templates.mdreferences/search-patterns.md
詳細
チケットのトリアージ
キーワード
バグのトリアージ、重複の確認、重複チケットかどうか、類似する課題の検索、バグチケットの作成、バグの報告、このエラーの報告、このエラーのトリアージ、バグ報告、エラーメッセージ、類似する課題、重複バグ、誰が修正したか、報告済みかどうか、バグの検索、類似するバグの検索、課題の作成、課題の登録
概要
Jiraを検索して重複を確認し、過去の類似課題を特定するとともに、適切に構成されたバグチケットの作成や既存の課題への情報追加を支援することで、バグ報告やエラーメッセージを自動的にトリアージします。このスキルにより、手動で重複を確認する手間がなくなり、関連する過去の情報を含めてバグを適切に記録できます。
このスキルを使う場面: エラーメッセージ、バグ報告、課題が重複かどうかを判断し、適切な対応を行うためにトリアージする必要がある場合に使用します。
ワークフロー
課題を効果的にトリアージするため、次の6つの手順に従います。
手順1:重要な情報を抽出する
バグ報告またはエラーメッセージを分析し、検索語を特定します。
次の要素を抽出します。
エラーの特徴:
- エラーの種類または例外名(例:「NullPointerException」、「TimeoutError」)
- エラーコードまたはステータス(例:「500」、「404」、「ERR_CONNECTION_REFUSED」)
- 具体的なエラーメッセージのテキスト(スタックトレース全体ではなく、重要なフレーズ)
コンテキスト:
- 影響を受けるコンポーネントまたはシステム(例:「認証」、「決済ゲートウェイ」、「API」)
- 環境(例:「本番環境」、「ステージング環境」、「モバイルアプリ」)
- エラーにつながるユーザー操作(例:「ログイン中」、「ファイルのアップロード時」)
症状:
- 観察できる動作(例:「ページが真っ白になる」、「読み込みが終わらない」、「データが保存されない」)
- 影響(例:「ユーザーがログインできない」、「決済に失敗する」)
抽出例:
入力:「モバイルアプリでログインしようとすると、ユーザーに『Connection timeout』エラーが発生する」 抽出結果:
- エラー:「Connection timeout」
- コンポーネント:「ログイン」、「モバイルアプリ」
- 症状:「ログインできない」
入力:「PaymentProcessor.processRefund() の245行目で NullPointerException が発生する」 抽出結果:
- エラー:「NullPointerException」
- コンポーネント:「PaymentProcessor」、「返金」
- 場所:「processRefund の245行目」
手順2:重複を検索する
抽出したキーワードを使ってJiraを検索し、類似または重複する課題を見つけます。
検索戦略:
異なる表現で登録されている重複を見つけるため、複数の対象を絞った検索を実行します。
検索1:エラーを中心に検索
searchJiraIssuesUsingJql(
cloudId="...",
jql='project = "PROJ" AND (text ~ "error signature" OR summary ~ "error signature") AND type = Bug ORDER BY created DESC',
fields=["summary", "description", "status", "resolution", "created", "updated", "assignee"],
maxResults=20
)
検索2:コンポーネントを中心に検索
searchJiraIssuesUsingJql(
cloudId="...",
jql='project = "PROJ" AND text ~ "component keywords" AND type = Bug ORDER BY updated DESC',
fields=["summary", "description", "status", "resolution", "created", "updated", "assignee"],
maxResults=20
)
検索3:症状を中心に検索
searchJiraIssuesUsingJql(
cloudId="...",
jql='project = "PROJ" AND summary ~ "symptom keywords" AND type = Bug ORDER BY priority DESC, updated DESC',
fields=["summary", "description", "status", "resolution", "created", "updated", "assignee"],
maxResults=20
)
検索のヒント:
重要な語だけを使います。
- ✅ 「timeout login mobile」
- ✅ 「NullPointerException PaymentProcessor refund」
- ❌ 「ユーザーが次のような接続タイムアウトエラーに遭遇しています…」(冗長すぎます)
新しい課題から検索します。
created DESCまたはupdated DESCで並べ替え、新しい類似課題を見つけます- 最近のバグほど、関連する重複である可能性が高くなります
条件を絞り込みすぎないようにします。
- 解決済みの課題も含めます(再オープンされていたり、リグレッションで再発していたりする可能性があります)
- 修正履歴を確認するため、すべてのバグステータスを対象に検索します
手順3:検索結果を分析する
検索結果を評価し、重複か新しい課題かを判断します。
重複の判定:
重複の確度が高い(90%超):
- 要約または説明にまったく同じエラーメッセージがある
- 同じコンポーネントで、同じ種類のエラーが発生している
- 同じ症状を持つ最近(30日以内)の課題がある
- 対応: 既存の課題へのコメント追加を強く推奨します
重複の可能性が高い(70~90%):
- 少し異なる点はあるものの、類似するエラーがある
- 同じコンポーネントだが、コンテキストが異なる
- 同じ根本原因を持つ解決済みの課題がある
- 対応: 重複の可能性がある課題として提示し、ユーザーに判断を委ねます
関連している可能性がある(40~70%):
- 症状は似ているが、エラーが異なる
- 同じコンポーネント領域だが、具体的なエラーが異なる
- 古い課題(6か月超)で、関連がない可能性がある
- 対応: 関連している可能性がある課題として言及します
新しい課題である可能性が高い(40%未満):
- 類似する課題が見つからない
- エラーの特徴とコンポーネントが異なる
- 固有の症状またはコンテキストがある
- 対応: 新しい課題の作成を推奨します
修正履歴を確認する:
同様の解決済みの課題が見つかった場合:
関連情報を抽出します:
- 誰が修正しましたか?(解決済みの課題の担当者)
- どのように修正しましたか?(解決時のコメントまたはリンクされた PR)
- いつ修正されましたか?(解決日)
- 再発していますか?(再オープンされた課題があるか)
この情報を提示して、トリアージの判断に役立てます。
ステップ 4:調査結果をユーザーに提示する
重要: 必ず調査結果を提示し、何らかの操作を行う前にユーザーの判断を待ってください。
重複の可能性が高い場合の形式:
🔍 **Triage Results: Likely Duplicate**
I found a very similar issue already reported:
**PROJ-456** - Connection timeout during mobile login
Status: Open | Priority: High | Created: 3 days ago
Assignee: @john.doe
https://yoursite.atlassian.net/browse/PROJ-456
**Similarity:**
- Same error: "Connection timeout"
- Same component: Mobile app login
- Same symptoms: Users unable to login
**Difference:**
- Original report mentioned iOS specifically, this report doesn't specify platform
**Recommendation:** Add your details as a comment to PROJ-456
Would you like me to:
1. Add a comment to PROJ-456 with your error details
2. Create a new issue anyway (if you think this is different)
3. Show me more details about PROJ-456 first
関連している可能性がある場合の形式:
🔍 **Triage Results: Possibly Related Issues Found**
I found 2 potentially related issues:
**1. PROJ-789** - Mobile app authentication failures
Status: Resolved | Fixed: 2 weeks ago | Fixed by: @jane.smith
https://yoursite.atlassian.net/browse/PROJ-789
**2. PROJ-234** - Login timeout on slow connections
Status: Open | Priority: Medium | Created: 1 month ago
https://yoursite.atlassian.net/browse/PROJ-234
**Assessment:** Your error seems related but has unique aspects
**Recommendation:** Create a new issue, but reference these related tickets
Would you like me to create a new bug ticket?
重複がない場合の形式:
🔍 **Triage Results: No Duplicates Found**
I searched Jira for:
- "Connection timeout" errors
- Mobile login issues
- Authentication failures
No similar open or recent issues found.
**Recommendation:** Create a new bug ticket
**Note:** I found 1 old resolved issue (PROJ-123 from 8 months ago) about login timeouts, but it was for web, not mobile, and was resolved as "configuration error."
Would you like me to create a new bug ticket for this issue?
ステップ 5:ユーザーの判断を実行する
ユーザーの選択に基づき、コメントを追加するか、新しい課題を作成します。
オプション A:既存の課題にコメントを追加する
ユーザーが既存の課題への追加を希望する場合:
まず課題全体を取得して、コンテキストを把握します:
getJiraIssue(
cloudId="...",
issueIdOrKey="PROJ-456"
)
次にコメントを追加します:
addOrEditJiraIssueComment(
cloudId="...",
issueIdOrKey="PROJ-456",
commentBody="[formatted comment - see below]"
)
コメントの構成:
## Additional Instance Reported
**Reporter:** [User's name or context]
**Date:** [Current date]
**Error Details:**
[Paste relevant error message or stack trace]
**Context:**
- Environment: [e.g., Production, iOS 16.5]
- User Impact: [e.g., 50+ users affected in last hour]
- Steps to Reproduce: [if provided]
**Additional Notes:**
[Any unique aspects of this instance]
---
*Added via triage automation*
オプション B:新しい課題を作成する
ユーザーが新しい課題の作成を希望する場合:
まず、利用可能な課題タイプを確認します。 listJiraProjectIssueTypesMetadata は主要なツールではないため、
主要ではないツールの呼び出しを参照し、execute を通じて実行します:
executeRead( # or execute(...) if your client exposes a single execute tool
name="listJiraProjectIssueTypesMetadata",
cloudId="...",
inputs={"projectIdOrKey": "PROJ"}
)
適切な課題タイプを判断します:
- バグ/エラーの場合 →(利用可能であれば)「Bug」を使用します
- エラーを伴わない課題の場合 →「Task」または「Issue」を使用します
- 代替案 → Epic でも Subtask でもない、最初に利用可能なタイプ
課題を作成します:
createJiraIssue(
cloudId="...",
projectKey="PROJ",
issueType="Bug",
summary="[Clear, specific summary - see below]",
description="[Detailed description - see below]",
priority="Medium" # Adjust based on the severity assessment
)
要約の形式: 次のパターンを使用します:[コンポーネント] [エラーの種類] - [簡潔な症状]
例:
- ✅ 「モバイルログイン:認証中に接続タイムアウトが発生」
- ✅ 「Payment API:返金処理で NullPointerException が発生」
- ✅ 「ダッシュボード:レポートページが読み込み中のままになる」
- ❌ 「本番環境でエラーが発生」(曖昧すぎます)
- ❌ 「ユーザーに問題が発生」(具体性がありません)
説明の構成:
## Issue Description
[1-2 sentence summary of the problem]
## Error Details
[エラーメッセージまたはスタックトレース]
## Environment
- **Platform:** [e.g., Mobile iOS, Web, API]
- **Version:** [if known]
- **Environment:** [Production/Staging/etc]
## Steps to Reproduce
1. [Step 1]
2. [Step 2]
3. [Step 3]
## Expected Behavior
[What should happen]
## Actual Behavior
[What actually happens]
## User Impact
- **Frequency:** [e.g., Every time, Intermittent]
- **Affected Users:** [e.g., All users, Mobile users only]
- **Severity:** [e.g., Users cannot complete checkout]
## Additional Context
[Any other relevant information]
## Related Issues
[If applicable, reference similar issues found during triage]
- See also: PROJ-123 (similar but resolved)
---
*Created via automated triage*
ステップ 6:概要を提示する
操作を行った後、実施した内容を確認します。
コメントを追加した場合:
✅ **Comment Added Successfully**
Added details to existing issue: **PROJ-456**
https://yoursite.atlassian.net/browse/PROJ-456
**What I included:**
- Your error details
- Environment context
- User impact information
**Next Steps:**
- The assignee (@john.doe) will be notified
- Monitor PROJ-456 for updates
- If this turns out to be different, we can still create a separate ticket
新しい課題を作成した場合:
✅ **New Issue Created**
**PROJ-890** - Mobile Login: Connection timeout during authentication
https://yoursite.atlassian.net/browse/PROJ-890
Type: Bug | Priority: Medium | Status: Open
**What's Included:**
- Complete error details and stack trace
- Environment and reproduction steps
- User impact assessment
- References to related issues (PROJ-123, PROJ-789)
**Next Steps:**
- Issue will be reviewed during next triage meeting
- Consider setting priority based on user impact
- Assign to appropriate team member
エッジケースとトラブルシューティング
重複の可能性がある課題が複数ある場合
非常によく似た課題が 3 件以上見つかった場合:
🔍 **Triage Results: Multiple Possible Duplicates**
I found 3 issues that might be related:
**Most Likely Duplicate:**
**PROJ-456** - [summary] (Open, 2 days ago)
Match: 95% - Same error and component
**Also Possibly Related:**
**PROJ-234** - [summary] (Open, 1 month ago)
Match: 70% - Similar symptoms, different error
**PROJ-123** - [summary] (Resolved, 8 months ago)
Match: 60% - Related component, but was fixed
**Recommendation:**
1. Add to PROJ-456 (most similar)
2. Reference PROJ-234 in your comment (might be related)
3. Note PROJ-123 was previously fixed (possible regression)
Which issue should I add your details to? (Or create new)
プロジェクトのコンテキストが不明な場合
ユーザーが対象のプロジェクトを指定していない場合:
Which Jira project should I search for similar issues?
Available projects:
- BACKEND (Backend Services)
- MOBILE (Mobile Apps)
- WEB (Web Platform)
- INFRA (Infrastructure)
Or tell me the project key directly (e.g., BACKEND, MOBILE)
情報が不足している場合
バグレポートに重要な詳細が不足している場合:
I need more information to effectively triage this issue:
**What I have:**
- Error: "Something went wrong"
**What would help:**
- Specific error message or code
- Which part of the system (login, payment, etc.)
- What the user was trying to do
- Which environment (production, staging, mobile, web)
Can you provide any of these details?
解決済みの課題と同じ不具合が再発した場合
該当する解決済みの課題が見つかった場合:
🔍 **Triage Results: Possible Regression**
This looks like it might be a regression of a previously fixed issue:
**PROJ-567** - [Same issue description]
Status: Resolved (Fixed) | Fixed: 3 months ago | Fixed by: @jane.smith
Resolution: [Brief description of fix]
https://yoursite.atlassian.net/browse/PROJ-567
**This suggests:**
- The original fix may not have fully addressed the root cause
- OR there's been a regression in recent changes
- OR this is a different issue with similar symptoms
**Recommendation:** Create a new issue and link it to PROJ-567 as "may be related to" or "regression of"
Should I create a new issue with this context?
必須のカスタムフィールド
必須フィールドが原因で課題の作成に失敗した場合:
- 必須フィールドを確認します。
getJiraIssueTypeMetaWithFieldsは主要なツールではないため、executeを通じて実行します:
executeRead( # or execute(...) if your client exposes a single execute tool
name="getJiraIssueTypeMetaWithFields",
cloudId="...",
inputs={"projectIdOrKey": "PROJ", "issueTypeId": "10001"}
)
- 値をユーザーに尋ねます:
This project requires additional fields to create a Bug:
- Severity: [High/Medium/Low]
- Affected Version: [Version number]
Please provide these values so I can create the issue.
- 追加フィールドを指定して再試行します:
createJiraIssue(
...existing parameters...,
priority="High",
additional_fields={
"customfield_10001": {"value": "Production"}
}
)
効果的なトリアージのヒント
検索について:
推奨事項: ✅ 異なる観点から複数の検索クエリを使用します ✅ 検索対象に未解決と解決済みの両方の課題を含めます ✅ エラーの特徴と症状を分けて検索します ✅ 最近の課題(過去 30~90 日)を優先して確認します ✅ パターン(同じ問題の報告が複数あるか)を確認します
避けること: ❌ エラーメッセージ全体で検索します(具体的すぎます) ❌ 未解決の課題だけを検索します(修正履歴を見落とします) ❌ 解決済みの課題を無視します(再発を見落とします) ❌ キーワードを使いすぎます(検索結果が減ります)
課題の作成について:
推奨事項: ✅ コンポーネント名を含め、明確で具体的な要約を書きます ✅ 完全なエラーメッセージをコードブロックに含めます ✅ 環境と影響の詳細を追加します ✅ 検索で見つかった関連課題を参照します ✅ 実際のバグには「Bug」の課題タイプを使用します
避けること: ❌ 「本番環境でエラーが発生」のような曖昧な要約を作成します ❌ スタックトレース全体を要約に貼り付けます(説明に記載してください) ❌ 再現手順を省略します ❌ ユーザーへの影響を記載し忘れます ❌ 利用可能か確認せずに課題タイプを固定します
重複評価の場合:
重複の確度が高いケース:
- エラー、コンポーネントが完全に一致し、最近(30 日以内)発生している
- 同じ根本原因が特定されている
別の問題である可能性が高いケース:
- エラーの特徴が異なる
- コンポーネント/システムが異なる
- コンテキストが大きく異なる
判断に迷う場合:
- 両方の選択肢をユーザーに提示する
- 新しい課題を作成する方向で検討する(後から重複としてクローズできます)
- 情報を隠すより、課題をリンクする方が望ましい
例
例 1:明確な重複が見つかった場合
ユーザー入力:
Triage this error: "Connection timeout error when users try to login on iOS app"
プロセス:
- 抽出:「接続タイムアウト」、「ログイン」、「iOS」
- 検索:PROJ-456 を発見(未解決、2 日前)。エラーが完全に一致
- 分析:一致率 95% — エラー、コンポーネント、症状が同じ
- 提示:PROJ-456 を重複として提示し、コメントの追加を推奨
- 実行:ユーザーが確認後、iOS 固有の詳細を含むコメントを追加
- 確認:PROJ-456 にコメントを追加
出力:
✅ Comment added to PROJ-456
Your iOS-specific error details have been added to the existing issue.
The assignee will be notified.
例 2:関連するコンテキストを持つ新しい課題
ユーザー入力:
Error: NullPointerException in PaymentProcessor.processRefund() at line 245
Stack trace: [full stack trace]
プロセス:
- 抽出:「NullPointerException」、「PaymentProcessor」、「processRefund」、「245 行目」
- 検索:PROJ-789 を発見(3 週間前に解決済み)。決済エラーに関するものだが、行が異なる
- 分析:関連するコンポーネントだが、具体的なエラーは異なる
- 提示:重複はなく、関連する課題が見つかったことを伝え、新しいチケットの作成を推奨
- 実行:ユーザーが確認後、コンテキストを含む新しいバグを作成
- 確認:PROJ-890 を作成
出力:
✅ New Issue Created
PROJ-890 - Payment API: NullPointerException in refund processing
https://yoursite.atlassian.net/browse/PROJ-890
References related issue PROJ-789 for context.
例 3:リグレッションの可能性
ユーザー入力:
Users can't upload files larger than 5MB, getting "Upload failed" error
プロセス:
- 抽出:「アップロード失敗」、「5MB」、「ファイルアップロード」
- 検索:PROJ-234 を発見(2 か月前に解決済み)。問題が完全に一致
- 分析:修正済みだが、再び発生している
- 提示:リグレッションの可能性があるため、以前の課題にリンクした新しい課題を推奨
- 実行:新しい課題を作成し、「原因である可能性がある」として PROJ-234 にリンク
- 確認:リグレッションのコンテキストを含む PROJ-891 を作成
出力:
✅ New Issue Created (Possible Regression)
PROJ-891 - File Upload: Upload failed for files >5MB (Regression?)
https://yoursite.atlassian.net/browse/PROJ-891
This may be a regression of PROJ-234, which was resolved 2 months ago.
Issue includes reference to original fix for investigation.
このスキルを使用しない場合
このスキルはバグとエラーのトリアージ専用です。次の場合は使用しないでください。
❌ 機能リクエスト(spec-to-backlog を使用) ❌ 一般的なタスクの作成(capture-tasks-from-meeting-notes を使用) ❌ 情報の検索(search-company-knowledge を使用) ❌ ステータスレポートの生成(generate-status-report を使用)
このスキルは、次の場合に使用してください。 ✅ 「これは重複バグですか?」 ✅ 「このエラーメッセージをトリアージしてください」 ✅ 「これは以前に報告されていますか?」 ✅ 「これのバグチケットを作成してください」
クイックリファレンス
主なワークフロー: 抽出 → 検索 → 分析 → 提示 → 実行 → 確認
検索ツール: searchJiraIssuesUsingJql(cloudId, jql, fields, maxResults)
アクションツール:
addOrEditJiraIssueComment(cloudId, issueIdOrKey, commentBody)- 既存の課題に追加createJiraIssue(cloudId, projectKey, issueType, summary, description)- 新規作成
課題タイプ: エラー報告には常に「Bug」を優先し、
executeRead(name="listJiraProjectIssueTypesMetadata", ...) で確認してください(主要ツールではありません)
注意事項:
- 複数回検索すると、より多くの重複を見つけられます
- 操作する前に検索結果を提示してください
- エラーの詳細とコンテキストを含めてください
- 関連する課題を参照してください
- 利用可能な場合は「Bug」の課題タイプを使用してください
主要ツール以外のツールを呼び出す
Atlassian Rovo MCP サーバーは、ツール一覧に主要ツールを少数だけ直接公開しています。それ以外はすべてカタログにあり、メタツールを通じて利用します。
discover— 操作名がわからない場合は、自然言語で目的を説明します。使用する正確なnameとinputsが返されます。すでに主要ツールとして利用できる操作に対して、discoverを呼び出さないでください。- 実行ファミリーのツール — カタログ内の操作を名前で実行します。ツール一覧を確認してください。クライアントによっては単一の**
executeが公開され、別のクライアントではexecuteRead/executeWrite/executeDestructive**が公開され、操作に合ったティアを使う必要があります。引数はすべて同じです。
executeRead( # or execute(...) if your client exposes a single execute tool
name="<operationName>",
cloudId="...",
inputs={"param": "value"}
)
重要なルール:
cloudIdはトップレベルの引数であり、nameやinputsと同じ階層に置きます。inputsの中には決して入れないでください。getContentFormatGuideなど、omitCloudIdとして宣言されている操作では、cloudIdを指定しません。inputsはフラットなオブジェクトです。サーバーが各パラメーターをパス、クエリ、または本文に自動的に振り分けます。- **ライブツールスキーマに記載されている正確なパラメーター名を使用してください。**認識されないパラメーターはエラーとして報告されずに破棄されるため、名前を間違えても呼び出しは成功し、指定した値は無視されます。迷った場合は、まずスキーマまたは
discoverの結果を確認してください。 - 呼び出しで不明な操作が報告された場合は、異なるキーワードで
discoverを実行し、推測せずに返された名前を使用してください。