epic-management
大規模なプロジェクト向けの機能です。機能単位でのグループ化が必要な場合に使用できます。エピック追跡用のissueを作成し、関連するissueを共通ラベルで管理し、エピックの進捗を追跡します。またマイルストーンとの連携も可能です。
description の原文を見る
Use for LARGE work requiring feature-level grouping. Creates epic tracking issues, manages related issues under a common label, tracks epic progress, and coordinates with milestones.
SKILL.md 本文
エピック管理
概要
エピックは、機能またはカパビリティを一緒に提供する関連イシューをグループ化します。このスキルは、GitHubのネイティブ機能を使用してエピックを作成、追跡、管理します。
中核原則: エピックは、ユーザー価値を一緒に提供するイシューの集合です。
開始時にアナウンス: 「エピック管理を使用して、この機能を追跡されるエピックと関連イシューに構造化します。」
エピックとは
エピックは以下の特徴があります:
epicラベルを持つ親イシューepic-[name]ラベルを共有する関連イシューの集合- オプションでマイルストーンに関連付け
- イニシアチブの一部(大規模な作業の場合)
GitHubでのエピック構造
Epic (親イシュー)
├── ラベル: epic
├── ラベル: epic-[name]
├── マイルストーン: [オプション]
└── プロジェクト: [エピックフィールド付き]
関連イシュー
├── ラベル: epic-[name]
├── 参照: "Part of #[EPIC_NUMBER]"
└── マイルストーン: [エピックと同じ]
エピックの作成
ステップ1: エピックラベルの作成
# エピック固有のラベルを作成
gh label create "epic-[SHORT-NAME]" \
--color "0E8A16" \
--description "[エピック目標の簡潔な説明]"
ステップ2: エピック追跡イシューの作成
gh issue create \
--title "[Epic] [NAME]" \
--label "epic,epic-[SHORT-NAME]" \
--body "## Epic: [NAME]
## ゴール
[このエピックが完了した時点で提供するもの]
## 成功基準
- [ ] [高レベルの基準1]
- [ ] [高レベルの基準2]
- [ ] [高レベルの基準3]
## コンテキスト
[背景、このエピックが存在する理由、関連するリンク]
## 依存関係
- **必須:** [最初に完了する必要がある他のエピック/イシュー]
- **有効化:** [このエピックに依存する他のエピック/イシュー]
## イシュー
### 準備完了
- [ ] #[N] - [タイトル]
### 進行中
[まだなし]
### 完了
[まだなし]
## 進捗
**イシュー:** 0 / [TOTAL] 完了
**最終更新:** [DATE]
---
## イニシアチブ
[該当する場合は #[INITIATIVE] の一部、またはスタンドアロンエピック]
## マイルストーン
[関連マイルストーン、または「未割り当て」]"
ステップ3: プロジェクトボードに追加(必須ゲート)
このステップはオプションではありません。エピックはプロジェクトボードに入っている必要があります。
# エピックイシューのURLを取得
EPIC_URL=$(gh issue view [EPIC_NUMBER] --json url -q '.url')
# エピックをプロジェクトに追加 - 必須
gh project item-add "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" --url "$EPIC_URL"
if [ $? -ne 0 ]; then
echo "ERROR: Failed to add epic to project. Cannot proceed."
exit 1
fi
# アイテムIDを取得 - 必須
ITEM_ID=$(gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r ".items[] | select(.content.number == [EPIC_NUMBER]) | .id")
if [ -z "$ITEM_ID" ] || [ "$ITEM_ID" = "null" ]; then
echo "ERROR: Epic added but item ID not found."
exit 1
fi
echo "Epic #[EPIC_NUMBER] added to project with item ID: $ITEM_ID"
ステップ3.5: プロジェクトボードフィールドの設定(必須)
すべてのエピックはプロジェクトボードでType = Epicが設定されている必要があります。
# プロジェクトとフィールドIDを取得
PROJECT_ID=$(gh project list --owner "$GH_PROJECT_OWNER" --format json | \
jq -r ".projects[] | select(.number == $GITHUB_PROJECT_NUM) | .id")
STATUS_FIELD_ID=$(gh project field-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r '.fields[] | select(.name == "Status") | .id')
TYPE_FIELD_NAME="Type"
if ! gh project field-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" --format json | jq -e '.fields[] | select(.name == "Type")' >/dev/null 2>&1; then
if gh project field-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" --format json | jq -e '.fields[] | select(.name == "Issue Type")' >/dev/null 2>&1; then
TYPE_FIELD_NAME="Issue Type"
fi
fi
TYPE_FIELD_ID=$(gh project field-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r --arg type_field "$TYPE_FIELD_NAME" '.fields[] | select(.name == $type_field) | .id')
# オプションIDを取得
BACKLOG_OPTION_ID=$(gh project field-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r '.fields[] | select(.name == "Status") | .options[] | select(.name == "Backlog") | .id')
EPIC_TYPE_OPTION_ID=$(gh project field-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r --arg type_field "$TYPE_FIELD_NAME" '.fields[] | select(.name == $type_field) | .options[] | select(.name == "Epic") | .id')
# Status = Backlog に設定(またはまだイシューがない場合はReady)
gh project item-edit --project-id "$PROJECT_ID" --id "$ITEM_ID" \
--field-id "$STATUS_FIELD_ID" --single-select-option-id "$BACKLOG_OPTION_ID"
# Type = Epic に設定
gh project item-edit --project-id "$PROJECT_ID" --id "$ITEM_ID" \
--field-id "$TYPE_FIELD_ID" --single-select-option-id "$EPIC_TYPE_OPTION_ID"
# フィールドが設定されたことを確認
echo "Verifying project board fields..."
VERIFY=$(gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq ".items[] | select(.content.number == [EPIC_NUMBER])")
echo "Status: $(echo "$VERIFY" | jq -r '.status.name')"
echo "Type: $(echo "$VERIFY" | jq -r '.type.name // "not set"')"
スキル: project-board-enforcement
エピック内でのイシュー作成
エピックイシューのテンプレート
gh issue create \
--title "[TYPE] [Title]" \
--label "epic-[SHORT-NAME]" \
--body "## 説明
[このイシューが提供するもの]
エピック #[EPIC_NUMBER]: [エピックタイトル] の一部
## 受け入れ基準
- [ ] [基準1]
- [ ] [基準2]
## 技術的注記
[実装に関する詳細]
## 依存関係
- 必須: #[N](該当する場合)
- ブロック: #[N](該当する場合)"
イシューをエピックにリンク
エピック内のすべてのイシューは以下の要件を満たす必要があります:
epic-[name]ラベルを持つ- 説明内でエピックを参照: 「Part of epic #[N]」
- 同じマイルストーン(設定されている場合)を共有
- プロジェクトボードにStatusとTypeが設定された状態で配置される
- Epicフィールドが存在する場合は親エピック番号に設定される
子イシューをプロジェクトボードに追加(必須)
# 子イシュー作成後、プロジェクトボードに追加
CHILD_URL=$(gh issue view [CHILD_NUMBER] --json url -q '.url')
gh project item-add "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" --url "$CHILD_URL"
# アイテムIDを取得
CHILD_ITEM_ID=$(gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r ".items[] | select(.content.number == [CHILD_NUMBER]) | .id")
# Status = Ready に設定
gh project item-edit --project-id "$PROJECT_ID" --id "$CHILD_ITEM_ID" \
--field-id "$STATUS_FIELD_ID" --single-select-option-id "$READY_OPTION_ID"
# 適切なType(Feature、Bugなど)を設定
gh project item-edit --project-id "$PROJECT_ID" --id "$CHILD_ITEM_ID" \
--field-id "$TYPE_FIELD_ID" --single-select-option-id "$TYPE_OPTION_ID"
# 親エピックにリンク(Epicフィールドが存在する場合)
EPIC_FIELD_ID=$(gh project field-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r '.fields[] | select(.name == "Epic") | .id')
if [ -n "$EPIC_FIELD_ID" ] && [ "$EPIC_FIELD_ID" != "null" ]; then
gh project item-edit --project-id "$PROJECT_ID" --id "$CHILD_ITEM_ID" \
--field-id "$EPIC_FIELD_ID" --text "#[EPIC_NUMBER]"
fi
スキル: project-board-enforcement
エピック進捗の追跡
エピックイシューを定期的に更新
イシューのステータスが変わるとき、エピックを更新します:
gh issue comment [EPIC_NUMBER] --body "## 進捗更新 - [DATE]
**完了:** #[N] - [タイトル]
**現在のステータス:**
- 準備完了: [X] イシュー
- 進行中: [Y] イシュー
- 完了: [Z] イシュー
- 合計: [X+Y+Z] / [TOTAL]
**次:** #[N] - [タイトル]"
エピック本文を再編成
エピック本文を最新に保つ:
## イシュー
### 準備完了
- [ ] #102 - Database schema
- [ ] #103 - API endpoints
### 進行中
- [ ] #101 - Initial setup (担当: @dev)
### 完了
- [x] #100 - Research spike
## 進捗
**イシュー:** 1 / 4 完了 (25%)
**最終更新:** 2025-12-02
エピックのライフサイクル
┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ Planning │────▶│ Active │────▶│ Closing │────▶│ Done │
└────────────┘ └────────────┘ └────────────┘ └────────────┘
│ │ │ │
▼ ▼ ▼ ▼
イシュー イシュー 最後のイシュー すべてのイシュー
作成中 進行中 完了中 完了
エピック状態
| 状態 | プロジェクトステータス | インジケーター |
|---|---|---|
| Planning | Backlog | イシューが作成中、作業未開始 |
| Active | In Progress | 少なくとも1つのイシューが進行中 |
| Closing | In Review | すべてのイシューが完了またはレビュー中 |
| Done | Done | すべてのイシューが完了、エピック完了 |
エピックの完了
完了前チェックリスト
エピックを完了する前に:
- エピック内のすべてのイシューが完了している
- エピックの成功基準がチェック済み
- 依存するエピックが更新されている
- イニシアチブ(該当する場合)が通知されている
エピックを完了
# 最終進捗更新
gh issue comment [EPIC_NUMBER] --body "## エピック完了 🎉
**すべてのイシューが解決:**
- [x] #100 - Research spike
- [x] #101 - Initial setup
- [x] #102 - Database schema
- [x] #103 - API endpoints
**成功基準を満たしました:**
- [x] 基準1
- [x] 基準2
- [x] 基準3
**完了日:** [DATE]
**期間:** [X日/週]"
# エピックを完了
gh issue close [EPIC_NUMBER]
# 該当する場合、イニシアチブを更新
gh issue comment [INITIATIVE_NUMBER] --body "## エピック完了: #[EPIC_NUMBER]
[エピック名]が完了しました。[X]個のイシューが解決されました。
**残りのエピック:** [一覧]"
エピックの依存関係
依存関係を文書化
エピック本文内:
## 依存関係
### このエピックが必要なもの
- #[EPIC_A] - [タイトル] - **ステータス:** [完了/進行中]
- このエピックでブロックされるアイテム: #101、#102
### このエピックが有効化するもの
- #[EPIC_B] - [タイトル] - これが完了したときにブロック解除
ブロック済みイシューの管理
イシューが別のエピックでブロックされている場合:
gh issue edit [ISSUE_NUMBER] --add-label "blocked"
gh issue comment [ISSUE_NUMBER] --body "**ブロック元:** エピック #[OTHER_EPIC]
待機中: #[SPECIFIC_ISSUE] の完了を待っています。
ブロック解除条件: [条件]"
イニシアチブなしのエピック
スタンドアロンエピック(より大きなイニシアチブの一部ではない場合):
gh issue create \
--title "[Epic] [NAME]" \
--label "epic,epic-[SHORT-NAME]" \
--body "## Epic: [NAME]
## ゴール
[このエピックが提供するもの]
## 成功基準
- [ ] [基準1]
- [ ] [基準2]
## イシュー
[作成予定]
## 進捗
**イシュー:** 0 / 0 完了
---
**タイプ:** スタンドアロンエピック
**マイルストーン:** [該当する場合]"
例: ダークモードエピック
エピックの作成
gh label create "epic-dark-mode" --color "1D76DB" \
--description "Dark mode theme implementation"
gh issue create \
--title "[Epic] Dark Mode Support" \
--label "epic,epic-dark-mode" \
--milestone "Q1 2026" \
--body "## Epic: Dark Mode Support
## ゴール
ユーザーがライトテーマとダークテーマを切り替え、設定を永続化できます。
## 成功基準
- [ ] 設定のテーマ切り替え
- [ ] すべてのコンポーネントがテーマを適用
- [ ] セッション間で設定を永続化
- [ ] システム設定の検出
## イシュー
### 準備完了
- [ ] #201 - Design tokens for dark theme
- [ ] #202 - Theme context provider
- [ ] #203 - Settings toggle UI
- [ ] #204 - Component theme updates
- [ ] #205 - Preference persistence
- [ ] #206 - System preference detection
## 進捗
**イシュー:** 0 / 6 完了
**最終更新:** 2025-12-02"
イシューの作成
gh issue create \
--title "[Feature] Design tokens for dark theme" \
--label "epic-dark-mode,feature" \
--body "エピック #200: Dark Mode Support の一部
## 説明
ダークテーマ用のCSS カスタムプロパティを作成します。
## 受け入れ基準
- [ ] ダークテーマカラーパレットが定義されている
- [ ] すべてのテーマカラーのCSS変数
- [ ] トークン使用方法のドキュメント"
メモリ統合
mcp__memory__create_entities([{
"name": "Epic-[NAME]",
"entityType": "Epic",
"observations": [
"Created: [DATE]",
"Goal: [GOAL]",
"Issue: #[NUMBER]",
"Label: epic-[SHORT-NAME]",
"Status: [Planning/Active/Done]",
"Issues: [COUNT]",
"Initiative: #[N] or Standalone"
]
}])
チェックリスト
- エピック固有ラベルを作成した
- エピック追跡イシューを作成した
- エピックをプロジェクトボードに追加した(ITEM_IDで確認)
- プロジェクトStatus = BacklogまたはReadyに設定した
- プロジェクトType = Epicに設定した
- 成功基準を定義した
- 依存関係を文書化した
- 最初のイシューをエピックラベル付きで作成した
- すべての子イシューをプロジェクトボードに追加した
- すべての子イシューのStatusとTypeを設定した
- 子をエピックにリンクした(Epicフィールドが利用可能な場合)
- マイルストーンを設定した(該当する場合)
- イニシアチブにリンクした(該当する場合)
- ナレッジグラフに保存した
ゲート: エピックとすべてのイシューがプロジェクトボードに配置されていない場合、子イシューを作成することも作業を開始することもできません。
スキル: project-board-enforcement
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- majiayu000
- ライセンス
- MIT
- 最終更新
- 2026/5/4
Source: https://github.com/majiayu000/claude-skill-registry / ライセンス: MIT