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本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
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
$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. 下の青いボタンを押して
managing-relationships.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
managing-relationshipsフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
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 ノード IDsubIssueId: 子 issue ノード IDsubIssueUrl: 代替 - 子 issue URLreplaceParent: 既存の親を置き換えるブール値
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 を作成する場合:
- 最初にすべての issue を作成します
- 親と子のノード ID を取得します
- 各子を親のサブ issue として追加します
- 関係性を検証します
# ステップ 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 IDsubIssueId: Child issue node IDsubIssueUrl: Alternative - child issue URLreplaceParent: 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:
- Create all issues first
- Get node IDs for parent and children
- Add each child as sub-issue of parent
- 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-parentflag 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:
ghCLI authenticated with appropriate permissions- Repository with Issues enabled
- GraphQL API access
Best Practices
- Create issues first, then relationships - Ensure all issues exist before linking
- Document relationships in body - Add "Part of #X" for visibility
- Check for existing parents - Avoid orphaning issues
- Use hierarchies sparingly - Deep nesting (>3 levels) becomes hard to manage
- Combine with labels - Use
type:epiclabel 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 issueCLI does NOT support relationship management - Always use GraphQL API via
gh api graphqlfor 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` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (12,512 bytes)
- 📎 scripts/manage-relationships.py (15,315 bytes)