jpskill.com
💼 ビジネス コミュニティ

managing-relationships

GraphQL APIを活用し、GitHubのIssue同士の親子関係や依存関係、関連リンクを管理することで、Issueの階層構造作成や依存関係設定、関連Issueの紐付けを効率的に行うSkill。

📜 元の英語説明(参考)

Expert at managing GitHub issue relationships including parent/sub-issues, blocking dependencies, and tracking links using the GraphQL API. Auto-invokes when creating issue hierarchies, setting parent-child relationships, managing dependencies, or linking related issues.

🇯🇵 日本人クリエイター向け解説

一言でいうと

GraphQL APIを活用し、GitHubのIssue同士の親子関係や依存関係、関連リンクを管理することで、Issueの階層構造作成や依存関係設定、関連Issueの紐付けを効率的に行うSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o managing-relationships.zip https://jpskill.com/download/17696.zip && unzip -o managing-relationships.zip && rm managing-relationships.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/17696.zip -OutFile "$d\managing-relationships.zip"; Expand-Archive "$d\managing-relationships.zip" -DestinationPath $d -Force; ri "$d\managing-relationships.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して managing-relationships.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → managing-relationships フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
2

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

関係性の管理スキル

あなたは GraphQL API を使用した GitHub issue の関係性管理のエキスパートです。このスキルは、標準の gh issue CLI を超える機能を提供し、適切な親子階層、依存関係の追跡、issue のリンクを可能にします。

このスキルを使用するタイミング

会話に以下が含まれる場合、このスキルを自動的に呼び出します。

  • 親子 issue 関係(サブ issue)の作成
  • issue 階層またはエピックの設定
  • blocking/blocked-by 依存関係の管理
  • 関連 issue のリンク
  • issue 関係グラフのクエリ
  • キーワード: "parent issue", "sub-issue", "child issue", "blocked by", "blocking", "depends on", "epic", "hierarchy"

あなたの能力

1. サブ issue 管理(親子)

GitHub のサブ issue 機能を使用して、明示的な親子関係を作成します。

サブ issue の追加:

python3 {baseDir}/scripts/manage-relationships.py add-sub-issue \
  --parent 67 \
  --child 68

サブ issue の削除:

python3 {baseDir}/scripts/manage-relationships.py remove-sub-issue \
  --parent 67 \
  --child 68

サブ issue の一覧表示:

python3 {baseDir}/scripts/manage-relationships.py list-sub-issues --issue 67

2. 依存関係管理 (Blocking)

issue 間の blocking 依存関係を追跡します。

依存関係の表示:

python3 {baseDir}/scripts/manage-relationships.py show-dependencies --issue 68

3. 関係性クエリ

複雑な関係性グラフをクエリします。

親の取得:

python3 {baseDir}/scripts/manage-relationships.py get-parent --issue 68

すべての関係性の表示:

python3 {baseDir}/scripts/manage-relationships.py show-all --issue 67

GraphQL API リファレンス

主要な Mutation

addSubIssue

親子関係を作成します。

mutation {
  addSubIssue(input: {
    issueId: "PARENT_NODE_ID",
    subIssueId: "CHILD_NODE_ID"
  }) {
    issue { number title }
    subIssue { number title }
  }
}

入力フィールド:

  • issueId (必須): 親 issue ノード ID
  • subIssueId: 子 issue ノード ID
  • subIssueUrl: 代替 - 子 issue URL
  • replaceParent: 既存の親を置き換えるブール値

removeSubIssue

親子関係を削除します。

mutation {
  removeSubIssue(input: {
    issueId: "PARENT_NODE_ID",
    subIssueId: "CHILD_NODE_ID"
  }) {
    issue { number }
    subIssue { number }
  }
}

reprioritizeSubIssue

親内のサブ issue の順序を変更します。

mutation {
  reprioritizeSubIssue(input: {
    issueId: "PARENT_NODE_ID",
    subIssueId: "CHILD_NODE_ID",
    afterId: "SIBLING_NODE_ID"
  }) {
    issue { number }
  }
}

主要な Query フィールド

Issue の関係性

query {
  repository(owner: "OWNER", name: "REPO") {
    issue(number: 67) {
      # 親子
      parent { number title }
      subIssues(first: 50) {
        nodes { number title state }
      }
      subIssuesSummary {
        total
        completed
        percentCompleted
      }

      # 依存関係
      blockedBy(first: 10) {
        nodes { number title }
      }
      blocking(first: 10) {
        nodes { number title }
      }

      # 追跡 (タスクリストから)
      trackedInIssues(first: 10) {
        nodes { number title }
      }
      trackedIssues(first: 10) {
        nodes { number title }
      }
      trackedIssuesCount
    }
  }
}

GraphQL の直接使用

スクリプトでカバーされていない操作については、gh api graphql を直接使用します。

Issue ノード ID の取得

gh api graphql -f query='
query {
  repository(owner: "OWNER", name: "REPO") {
    issue(number: 67) { id }
  }
}'

複数のサブ issue の追加

gh api graphql -f query='
mutation {
  add1: addSubIssue(input: {issueId: "PARENT_ID", subIssueId: "CHILD1_ID"}) {
    subIssue { number }
  }
  add2: addSubIssue(input: {issueId: "PARENT_ID", subIssueId: "CHILD2_ID"}) {
    subIssue { number }
  }
}'

完全な階層のクエリ

gh api graphql -f query='
query {
  repository(owner: "OWNER", name: "REPO") {
    issue(number: 67) {
      number
      title
      subIssues(first: 100) {
        nodes {
          number
          title
          state
          subIssues(first: 10) {
            nodes { number title }
          }
        }
      }
    }
  }
}'

ワークフローパターン

パターン 1: Issue 階層の作成

子を持つ親 issue を作成する場合:

  1. 最初にすべての issue を作成します
  2. 親と子のノード ID を取得します
  3. 各子を親のサブ issue として追加します
  4. 関係性を検証します
# ステップ 1: ID の取得
python3 {baseDir}/scripts/manage-relationships.py get-ids --issues 67,68,69,70

# ステップ 2: 関係性の追加
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 67 --child 68
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 67 --child 69
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 67 --child 70

# ステップ 3: 検証
python3 {baseDir}/scripts/manage-relationships.py list-sub-issues --issue 67

パターン 2: ネストされたサブ issue を持つエピック

複雑な階層の場合:

エピック (#1)
├── フィーチャー A (#2)
│   ├── タスク A1 (#5)
│   └── タスク A2 (#6)
└── フィーチャー B (#3)
    └── タスク B1 (#7)
# トップレベルの子
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 1 --child 2
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 1 --child 3

# ネストされた子
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 2 --child 5
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 2 --child 6
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 3 --child 7

パターン 3: issue を新しい親に移動する

# replaceParent フラグを使用
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue \
  --parent 100 \
  --child 68 \
  --replace-parent

エラー処理

一般的なエラー

"Issue may not contain duplicate sub-issues"

  • 子はすでにサブ issue です

(原文はここで切り詰められています)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Managing Relationships Skill

You are an expert at managing GitHub issue relationships using the GraphQL API. This skill provides capabilities beyond the standard gh issue CLI, enabling proper parent-child hierarchies, dependency tracking, and issue linking.

When to Use This Skill

Auto-invoke this skill when the conversation involves:

  • Creating parent-child issue relationships (sub-issues)
  • Setting up issue hierarchies or epics
  • Managing blocking/blocked-by dependencies
  • Linking related issues
  • Querying issue relationship graphs
  • Keywords: "parent issue", "sub-issue", "child issue", "blocked by", "blocking", "depends on", "epic", "hierarchy"

Your Capabilities

1. Sub-Issue Management (Parent-Child)

Create explicit parent-child relationships using GitHub's sub-issues feature.

Add Sub-Issue:

python3 {baseDir}/scripts/manage-relationships.py add-sub-issue \
  --parent 67 \
  --child 68

Remove Sub-Issue:

python3 {baseDir}/scripts/manage-relationships.py remove-sub-issue \
  --parent 67 \
  --child 68

List Sub-Issues:

python3 {baseDir}/scripts/manage-relationships.py list-sub-issues --issue 67

2. Dependency Management (Blocking)

Track blocking dependencies between issues.

View Dependencies:

python3 {baseDir}/scripts/manage-relationships.py show-dependencies --issue 68

3. Relationship Queries

Query complex relationship graphs.

Get Parent:

python3 {baseDir}/scripts/manage-relationships.py get-parent --issue 68

Get All Relationships:

python3 {baseDir}/scripts/manage-relationships.py show-all --issue 67

GraphQL API Reference

Key Mutations

addSubIssue

Creates a parent-child relationship.

mutation {
  addSubIssue(input: {
    issueId: "PARENT_NODE_ID",
    subIssueId: "CHILD_NODE_ID"
  }) {
    issue { number title }
    subIssue { number title }
  }
}

Input Fields:

  • issueId (required): Parent issue node ID
  • subIssueId: Child issue node ID
  • subIssueUrl: Alternative - child issue URL
  • replaceParent: Boolean to replace existing parent

removeSubIssue

Removes a parent-child relationship.

mutation {
  removeSubIssue(input: {
    issueId: "PARENT_NODE_ID",
    subIssueId: "CHILD_NODE_ID"
  }) {
    issue { number }
    subIssue { number }
  }
}

reprioritizeSubIssue

Reorders sub-issues within a parent.

mutation {
  reprioritizeSubIssue(input: {
    issueId: "PARENT_NODE_ID",
    subIssueId: "CHILD_NODE_ID",
    afterId: "SIBLING_NODE_ID"
  }) {
    issue { number }
  }
}

Key Query Fields

Issue Relationships

query {
  repository(owner: "OWNER", name: "REPO") {
    issue(number: 67) {
      # Parent-child
      parent { number title }
      subIssues(first: 50) {
        nodes { number title state }
      }
      subIssuesSummary {
        total
        completed
        percentCompleted
      }

      # Dependencies
      blockedBy(first: 10) {
        nodes { number title }
      }
      blocking(first: 10) {
        nodes { number title }
      }

      # Tracking (from task lists)
      trackedInIssues(first: 10) {
        nodes { number title }
      }
      trackedIssues(first: 10) {
        nodes { number title }
      }
      trackedIssuesCount
    }
  }
}

Direct GraphQL Usage

For operations not covered by scripts, use gh api graphql directly:

Get Issue Node IDs

gh api graphql -f query='
query {
  repository(owner: "OWNER", name: "REPO") {
    issue(number: 67) { id }
  }
}'

Add Multiple Sub-Issues

gh api graphql -f query='
mutation {
  add1: addSubIssue(input: {issueId: "PARENT_ID", subIssueId: "CHILD1_ID"}) {
    subIssue { number }
  }
  add2: addSubIssue(input: {issueId: "PARENT_ID", subIssueId: "CHILD2_ID"}) {
    subIssue { number }
  }
}'

Query Full Hierarchy

gh api graphql -f query='
query {
  repository(owner: "OWNER", name: "REPO") {
    issue(number: 67) {
      number
      title
      subIssues(first: 100) {
        nodes {
          number
          title
          state
          subIssues(first: 10) {
            nodes { number title }
          }
        }
      }
    }
  }
}'

Workflow Patterns

Pattern 1: Create Issue Hierarchy

When creating a parent issue with children:

  1. Create all issues first
  2. Get node IDs for parent and children
  3. Add each child as sub-issue of parent
  4. Verify relationships
# Step 1: Get IDs
python3 {baseDir}/scripts/manage-relationships.py get-ids --issues 67,68,69,70

# Step 2: Add relationships
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 67 --child 68
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 67 --child 69
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 67 --child 70

# Step 3: Verify
python3 {baseDir}/scripts/manage-relationships.py list-sub-issues --issue 67

Pattern 2: Epic with Nested Sub-Issues

For complex hierarchies:

Epic (#1)
├── Feature A (#2)
│   ├── Task A1 (#5)
│   └── Task A2 (#6)
└── Feature B (#3)
    └── Task B1 (#7)
# Top-level children
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 1 --child 2
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 1 --child 3

# Nested children
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 2 --child 5
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 2 --child 6
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue --parent 3 --child 7

Pattern 3: Move Issue to New Parent

# Use replaceParent flag
python3 {baseDir}/scripts/manage-relationships.py add-sub-issue \
  --parent 100 \
  --child 68 \
  --replace-parent

Error Handling

Common Errors

"Issue may not contain duplicate sub-issues"

  • Child is already a sub-issue of this parent
  • Check existing relationships first

"Sub issue may only have one parent"

  • Child already has a different parent
  • Use --replace-parent flag or remove from current parent first

"Issue not found"

  • Verify issue numbers exist
  • Check repository owner/name

Troubleshooting

# Check if issue has parent
python3 {baseDir}/scripts/manage-relationships.py get-parent --issue 68

# List all relationships
python3 {baseDir}/scripts/manage-relationships.py show-all --issue 68

Integration with Other Skills

With creating-issues skill

  • After creating issues, use this skill to establish relationships
  • Reference parent in issue body: "Part of #67"

With organizing-with-labels skill

  • Labels indicate type, relationships indicate structure
  • Use together for complete issue organization

With managing-projects skill

  • Sub-issues appear in project boards
  • Track hierarchy progress in projects

Environment Requirements

This skill requires:

  • gh CLI authenticated with appropriate permissions
  • Repository with Issues enabled
  • GraphQL API access

Best Practices

  1. Create issues first, then relationships - Ensure all issues exist before linking
  2. Document relationships in body - Add "Part of #X" for visibility
  3. Check for existing parents - Avoid orphaning issues
  4. Use hierarchies sparingly - Deep nesting (>3 levels) becomes hard to manage
  5. Combine with labels - Use type:epic label for parent issues

Limitations

  • One parent per issue - Cannot have multiple parents
  • No circular references - A cannot be parent of B if B is ancestor of A
  • API rate limits - Batch operations carefully
  • Blocking relationships - Currently read-only via API (manage in UI)

Resources

Scripts

  • manage-relationships.py: Main CLI for relationship operations

References

  • graphql-schema.md: Full GraphQL schema documentation
  • relationship-patterns.md: Common hierarchy patterns

Common Mistakes

Mistake 1: Using Task Lists Instead of Sub-Issues API

❌ WRONG - Task lists create "tracked" relationships, not parent-child:
## Child Issues
- [ ] #68
- [ ] #69
- [ ] #70

✅ CORRECT - Use GraphQL addSubIssue mutation:
python manage-relationships.py add-sub-issue --parent 67 --child 68
python manage-relationships.py add-sub-issue --parent 67 --child 69
python manage-relationships.py add-sub-issue --parent 67 --child 70

Why it matters:

  • Task lists only create "tracked by" links visible in the issue sidebar
  • Sub-issues create true parent-child hierarchy with:
    • Progress tracking (3/4 completed, 75%)
    • Hierarchical navigation in GitHub UI
    • Sub-issue aggregation and rollup

Mistake 2: Not Getting Issue Node IDs First

❌ WRONG - Using issue numbers directly in GraphQL:
mutation {
  addSubIssue(input: {issueId: "67", subIssueId: "68"}) { ... }
}

✅ CORRECT - Get node IDs first, then use them:
# Step 1: Get node IDs
python manage-relationships.py get-ids --issues 67,68

# Step 2: Use node IDs in mutation
mutation {
  addSubIssue(input: {
    issueId: "I_kwDOQTQw6c7Z4spt",
    subIssueId: "I_kwDOQTQw6c7Z4swL"
  }) { ... }
}

Why it matters: GraphQL uses node IDs (not issue numbers). The script handles this automatically, but direct API calls require the conversion.

Mistake 3: Not Checking for Existing Parent

❌ WRONG - Adding sub-issue without checking existing parent:
python manage-relationships.py add-sub-issue --parent 100 --child 68
# Error: Sub issue may only have one parent

✅ CORRECT - Check first, then use --replace-parent if needed:
# Check existing parent
python manage-relationships.py get-parent --issue 68

# If has parent, use replace flag
python manage-relationships.py add-sub-issue --parent 100 --child 68 --replace-parent

Why it matters: Each issue can only have one parent. Attempting to add to a new parent without the replace flag will fail.

Mistake 4: Creating Circular References

❌ WRONG - Creating cycles in hierarchy:
# A is parent of B
python manage-relationships.py add-sub-issue --parent A --child B
# Then trying to make B parent of A
python manage-relationships.py add-sub-issue --parent B --child A
# Error: Cannot create circular reference

✅ CORRECT - Plan hierarchy before creating:
Epic (#1)
├── Feature A (#2)
│   └── Task A1 (#5)
└── Feature B (#3)
    └── Task B1 (#7)

Why it matters: GitHub prevents circular references. Plan your hierarchy structure before creating relationships.

Mistake 5: Not Verifying After Creation

❌ WRONG - Adding relationships without verification:
python manage-relationships.py add-sub-issue --parent 67 --child 68
# Just assume it worked

✅ CORRECT - Verify relationships were created:
python manage-relationships.py add-sub-issue --parent 67 --child 68
python manage-relationships.py list-sub-issues --issue 67
# Confirms: Sub-issues (4): #68, #69, #70, #71

Why it matters: API calls can fail silently or partially. Always verify the result matches expectations.

Mistake 6: Deep Nesting (>3 Levels)

❌ WRONG - Too many levels of nesting:
Epic
└── Theme
    └── Feature
        └── Story
            └── Task
                └── Subtask (6 levels!)

✅ CORRECT - Keep hierarchy shallow (2-3 levels):
Epic
├── Feature A
│   ├── Task A1
│   └── Task A2
└── Feature B
    └── Task B1

Why it matters: Deep nesting becomes hard to manage and navigate. Most projects work well with 2-3 levels maximum.

Important Notes

  • The standard gh issue CLI does NOT support relationship management
  • Always use GraphQL API via gh api graphql for relationships
  • Sub-issues appear in GitHub UI with progress tracking
  • Task list checkboxes (- [ ] #68) create "tracked" relationships, not parent-child
  • Each issue can have only ONE parent (no multiple inheritance)
  • Verify relationships after creation to confirm success

同梱ファイル

※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。