Claude-skill-registry github-graphql-api
GitHub REST APIのSub-issue関連バグを回避するためのGraphQL API共通処理(Sub-issue登録、エラーハンドリング)を提供
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/github-graphql-api" ~/.claude/skills/majiayu000-claude-skill-registry-github-graphql-api && rm -rf "$T"
manifest:
skills/data/github-graphql-api/SKILL.mdsource content
GitHub GraphQL API共通処理
参照元: decompose-issue.md, detailed-design-workflow.md から分離された共通GraphQL API処理
概要
GitHub REST APIにはSub-issue関連のバグがあるため、GraphQL APIを使用する。
Reference: https://github.com/cli/cli/issues/10378
Sub-issue登録
親IssueにSub-issueを紐付けるGraphQL API処理。
処理フロー
def add_sub_issue(parent_issue_id: int, child_issue_id: int) -> bool: """ 親IssueにSub-issueを登録する Args: parent_issue_id: 親Issue番号 child_issue_id: 子Issue番号(Sub-issue) Returns: 成功時True、失敗時False(致命的エラーとしない) """ try: # 1. GraphQL Node IDを取得 parent_node_id = bash( f"gh issue view {parent_issue_id} --json id --jq '.id'" ).stdout.strip() child_node_id = bash( f"gh issue view {child_issue_id} --json id --jq '.id'" ).stdout.strip() if not parent_node_id or not child_node_id: return False # 2. GraphQL APIでSub-issue関係を追加 result = bash(f''' gh api graphql \ -H "GraphQL-Features: sub_issues" \ -f 'query=mutation {{ addSubIssue(input: {{ issueId: "{parent_node_id}", subIssueId: "{child_node_id}" }}) {{ issue {{ number }} subIssue {{ number }} }} }}' ''') return result.exit_code == 0 except Exception: return False # Sub-issue登録失敗は致命的エラーとしない
シェルコマンド版
# 1. Node ID取得 PARENT_NODE_ID=$(gh issue view $PARENT_ISSUE_ID --json id --jq '.id') CHILD_NODE_ID=$(gh issue view $CHILD_ISSUE_ID --json id --jq '.id') # 2. Sub-issue登録 gh api graphql \ -H "GraphQL-Features: sub_issues" \ -f "query=mutation { addSubIssue(input: { issueId: \"$PARENT_NODE_ID\", subIssueId: \"$CHILD_NODE_ID\" }) { issue { number } subIssue { number } } }" || true # エラーでも続行
エラーハンドリング
| エラー | 対応 |
|---|---|
| Node ID取得失敗 | 処理をスキップ(警告ログ出力) |
| GraphQL API失敗 | 処理をスキップ(致命的エラーとしない) |
| ネットワークエラー | リトライ1回後スキップ |
重要: Sub-issue登録の失敗はワークフロー全体を停止させない。Issue自体は作成済みなので、手動でSub-issue関係を設定可能。
使用箇所
| ワークフロー | 用途 |
|---|---|
| 分割したSubtaskを親Issueに紐付け |
| 作成したIssueをEpicに紐付け |
CLIスクリプト
自動化スクリプトが利用可能です:
bash .opencode/skill/github-graphql-api/scripts/add-sub-issue.sh <parent-issue> <child-issue>
| 引数 | 説明 |
|---|---|
| 親Issue番号 |
| Sub-issueとして追加するIssue番号 |
使用例:
bash .opencode/skill/github-graphql-api/scripts/add-sub-issue.sh 10 42