jira-issues について
Jira REST API または MCP を使って Jira の課題を作成・管理するスキルです。一般的な課題タイプ、ステータス変更、コメント、JQL 検索に対応します。
主な機能
- 01タイプ、ラベル、優先度を指定した課題作成
- 02課題のステータス変更とコメント追加
- 03JQL による課題検索
- 04Jira REST API または MCP の利用
活用シーン
- 01Bug、Task、Story、Epic の記録
- 02自分の未完了課題の検索
- 03課題を Done に変更、またはコメントを追加
MCP 対応
Jira MCP サーバー経由、または Jira REST API を直接使って課題を管理できます。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ moizibnyousaf/ ai-agent-skills --skill jira-issuesインストール後、Claude Code で/jira-issuesを入力して読み込まれたか確認します。
詳細
Jira イシュー管理
Jira REST API または MCP を使用して、Jira イシューを作成・管理します。
セットアップ
オプション 1:Jira MCP サーバー
シームレスに連携するには、Jira MCP サーバーをインストールします。
npx @anthropic/create-mcp-server jira
オプション 2:直接 API を使用
環境変数を設定します。
export JIRA_BASE_URL="https://yourcompany.atlassian.net"
export JIRA_EMAIL="[email protected]"
export JIRA_API_TOKEN="your-api-token"
API トークンを取得します:https://id.atlassian.com/manage-profile/security/api-tokens
イシューの作成
基本的なイシュー
import requests
from requests.auth import HTTPBasicAuth
import os
def create_issue(project_key, summary, description, issue_type="Task"):
url = f"{os.environ['JIRA_BASE_URL']}/rest/api/3/issue"
auth = HTTPBasicAuth(
os.environ['JIRA_EMAIL'],
os.environ['JIRA_API_TOKEN']
)
payload = {
"fields": {
"project": {"key": project_key},
"summary": summary,
"description": {
"type": "doc",
"version": 1,
"content": [{
"type": "paragraph",
"content": [{"type": "text", "text": description}]
}]
},
"issuetype": {"name": issue_type}
}
}
response = requests.post(url, json=payload, auth=auth)
return response.json()
# Example
issue = create_issue("PROJ", "Fix login bug", "Users can't login with SSO", "Bug")
print(f"Created: {issue['key']}")
ラベルと優先度を設定
def create_detailed_issue(project_key, summary, description,
issue_type="Task", priority="Medium",
labels=None, assignee=None):
payload = {
"fields": {
"project": {"key": project_key},
"summary": summary,
"description": {
"type": "doc",
"version": 1,
"content": [{
"type": "paragraph",
"content": [{"type": "text", "text": description}]
}]
},
"issuetype": {"name": issue_type},
"priority": {"name": priority},
}
}
if labels:
payload["fields"]["labels"] = labels
if assignee:
payload["fields"]["assignee"] = {"accountId": assignee}
# ... make request
よく使用するイシュータイプ
| タイプ | 用途 |
|---|---|
| バグ | 不具合の報告 |
| タスク | 作業項目 |
| ストーリー | ユーザー向け機能 |
| エピック | 大規模な取り組み |
| サブタスク | より大きなタスクの一部 |
イシューの更新
ステータスの変更
def transition_issue(issue_key, transition_name):
# Get available transitions
url = f"{JIRA_BASE_URL}/rest/api/3/issue/{issue_key}/transitions"
transitions = requests.get(url, auth=auth).json()
# Find matching transition
transition_id = None
for t in transitions['transitions']:
if t['name'].lower() == transition_name.lower():
transition_id = t['id']
break
# Execute transition
requests.post(url, json={"transition": {"id": transition_id}}, auth=auth)
コメントの追加
def add_comment(issue_key, comment_text):
url = f"{JIRA_BASE_URL}/rest/api/3/issue/{issue_key}/comment"
payload = {
"body": {
"type": "doc",
"version": 1,
"content": [{
"type": "paragraph",
"content": [{"type": "text", "text": comment_text}]
}]
}
}
requests.post(url, json=payload, auth=auth)
イシューの検索
JQL クエリ
def search_issues(jql):
url = f"{JIRA_BASE_URL}/rest/api/3/search"
params = {"jql": jql, "maxResults": 50}
response = requests.get(url, params=params, auth=auth)
return response.json()['issues']
# Examples
my_bugs = search_issues("project = PROJ AND type = Bug AND assignee = currentUser()")
open_items = search_issues("project = PROJ AND status != Done")
recent = search_issues("project = PROJ AND created >= -7d")
クイックコマンド
ユーザーが次のように言った場合に作成します:
| コマンド | アクション |
|---|---|
| 「X についてバグを記録して」 | 説明付きのバグイシュー |
| 「X のタスクを作成して」 | タスクイシュー |
| 「自分の担当分は何?」 | JQL:assignee = currentUser() AND status != Done |
| 「X を完了にして」 | イシューを「完了」に遷移 |
| 「X にコメントを追加して」 | イシューにコメントを追加 |
ベストプラクティス
- 概要:80 文字以内にし、動詞(Fix、Add、Update)で始めます
- 説明:バグの場合は再現手順を含めます
- ラベル:分類に使用します(frontend、backend、urgent)
- リンク:関連する場合は、関連イシューを参照します
コメント
Markdown 対応