一键导入
syncing-github-project
リリース計画を GitHub Project・Issue・Milestone に反映し同期。GitHub でのプロジェクト管理一元化時に使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
リリース計画を GitHub Project・Issue・Milestone に反映し同期。GitHub でのプロジェクト管理一元化時に使用。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | syncing-github-project |
| description | リリース計画を GitHub Project・Issue・Milestone に反映し同期。GitHub でのプロジェクト管理一元化時に使用。 |
リリース計画を GitHub Project・Issue・Milestone に反映し、プロジェクト管理を GitHub 上で一元化します。
--project : GitHub Project のみを作成--issues : Issue のみを作成(Project が存在する前提)--fields : 各 Issue に対して Project フィールド値を個別に設定--milestones : Milestone のみを作成し Issue に割り当て--sync : release_plan.md と GitHub の差異を確認し、差異があれば同期を実行--status : 現在の GitHub Project 状態を表示# 初回の完全同期(Project、Issue、Milestone すべて作成)
# 「リリース計画を GitHub Project に反映して」
# 差異確認と同期
# --sync
# 「release_plan.md と GitHub の差異を確認して同期して」
# 現在の状態確認
# --status
# 「GitHub Project の現在の状態を表示して」
release_plan.md に基づいて GitHub Project を作成し、カスタムフィールドを設定します。
標準フィールド構成:
| フィールド | タイプ | 説明 |
|---|---|---|
| Status | Single Select | Todo / In Progress / Done(デフォルト) |
| リリース | Single Select | release_plan.md のリリースフェーズに対応 |
| 優先度 | Single Select | ストーリーの優先度 |
| SP | Number | ストーリーポイント(数値) |
| イテレーション | Iteration | スプリント期間(開始日・期間付き) |
プロジェクト固有のフィールド(カテゴリ、担当領域など)は release_plan.md の内容に応じて追加します。
Single Select フィールドの作成:
gh project field-create <PROJECT_NUMBER> --owner <OWNER> \
--name "<フィールド名>" --data-type "SINGLE_SELECT" \
--single-select-options "<選択肢1>,<選択肢2>,<選択肢3>"
Number フィールドの作成:
gh project field-create <PROJECT_NUMBER> --owner <OWNER> \
--name "SP" --data-type "NUMBER"
ユーザーストーリーを GitHub Issue として作成し、Project に追加します。
Issue の構成:
[ストーリーID] ストーリー名gh project item-add で Project に追加# Issue の作成(Milestone 付き)
gh issue create --repo <OWNER>/<REPO> \
--title "<ストーリーID>: <ストーリー名>" \
--milestone "<Milestone 名>" \
--body "..."
# Project への追加
gh project item-add <PROJECT_NUMBER> --owner <OWNER> \
--url "https://github.com/<OWNER>/<REPO>/issues/<NUMBER>"
各 Issue に対して Project のカスタムフィールド値を個別に設定します。
# フィールド一覧の取得
gh project field-list <PROJECT_NUMBER> --owner <OWNER> --format json
# Project Item ID の取得
gh project item-list <PROJECT_NUMBER> --owner <OWNER> --format json --limit 50 \
| jq -r '.items[] | "\(.content.number):\(.id)"'
# Single Select フィールドの設定
gh project item-edit --project-id <PROJECT_ID> --id <ITEM_ID> \
--field-id <FIELD_ID> --single-select-option-id <OPTION_ID>
# Number フィールドの設定
gh project item-edit --project-id <PROJECT_ID> --id <ITEM_ID> \
--field-id <FIELD_ID> --number <VALUE>
Iteration フィールドは Single Select ではなく Iteration 型 で作成します。GraphQL API の createProjectV2Field に iterationConfiguration を含めることで、フィールド作成と同時にイテレーション期間を設定できます。
Iteration フィールドの作成(iterationConfiguration 付き):
gh api graphql -f query='
mutation {
createProjectV2Field(input: {
projectId: "<PROJECT_ID>"
dataType: ITERATION
name: "イテレーション"
iterationConfiguration: {
startDate: "<開始日 YYYY-MM-DD>"
duration: <デフォルト期間(日数)>
iterations: [
{ title: "<IT名>", startDate: "<開始日>", duration: <日数> },
...
]
}
}) {
projectV2Field {
... on ProjectV2IterationField {
id
name
configuration {
iterations { id title startDate duration }
}
}
}
}
}'
GraphQL スキーマ:
CreateProjectV2FieldInput:
projectId: ID!
dataType: ProjectV2CustomFieldType! # ITERATION を指定
name: String!
iterationConfiguration: ProjectV2IterationFieldConfigurationInput
ProjectV2IterationFieldConfigurationInput:
startDate: Date! # フィールド全体の開始日
duration: Int! # デフォルト期間(日数)
iterations: [ProjectV2Iteration!]!
ProjectV2Iteration:
title: String! # イテレーション名(例: "IT1", "Sprint 1")
startDate: Date! # 開始日(YYYY-MM-DD)
duration: Int! # 期間(日数、例: 14)
重要: iterationConfiguration を含めることで Web UI での手動設定は不要です。
Iteration フィールドの ID と各イテレーション ID の取得:
gh api graphql -f query='
query {
node(id: "<PROJECT_ID>") {
... on ProjectV2 {
field(name: "イテレーション") {
... on ProjectV2IterationField {
id
configuration {
iterations { id title startDate duration }
}
}
}
}
}
}'
各 Issue への Iteration 値の設定:
gh api graphql -f query='
mutation {
updateProjectV2ItemFieldValue(input: {
projectId: "<PROJECT_ID>"
itemId: "<ITEM_ID>"
fieldId: "<ITERATION_FIELD_ID>"
value: { iterationId: "<ITERATION_ID>" }
}) {
projectV2Item { id }
}
}'
リリースフェーズを GitHub Milestone として作成し、Issue に割り当てます。
# Milestone の作成
gh api repos/<OWNER>/<REPO>/milestones --method POST \
-f title="<Milestone 名>" \
-f description="<説明>" \
-f due_on="<期限 YYYY-MM-DDT00:00:00Z>"
# Issue 作成時に --milestone で指定するか、既存 Issue に割り当て
gh issue edit <NUMBER> --repo <OWNER>/<REPO> --milestone "<Milestone 名>"
release_plan.md と GitHub Issue/Project の整合性を確認し、差異があれば同期を実行します。
確認項目:
同期動作:
release_plan.md と GitHub Issue/Project の差異を検出
差異レポートを表示(追加/変更/削除項目)
差異がある場合は同期を実行:
設定済みのフィールド値を一覧で確認します。
gh api graphql -f query='
query {
node(id: "<PROJECT_ID>") {
... on ProjectV2 {
items(first: 50) {
nodes {
content {
... on Issue { number title }
}
fieldValues(first: 10) {
nodes {
... on ProjectV2ItemFieldSingleSelectValue {
field { ... on ProjectV2SingleSelectField { name } }
name
}
... on ProjectV2ItemFieldNumberValue {
field { ... on ProjectV2Field { name } }
number
}
... on ProjectV2ItemFieldIterationValue {
field { ... on ProjectV2IterationField { name } }
title
startDate
duration
}
}
}
}
}
}
}
}'
graph TD
A[release_plan.md] --> B{同期開始}
B --> C[GitHub Project 作成]
C --> D[カスタムフィールド設定]
D --> E[Issue 作成]
E --> F[Project に Item 追加]
F --> G[フィールド値設定]
G --> H[Milestone 作成]
H --> I[Issue に Milestone 割当]
I --> J[同期完了]
graph TD
A[release_plan.md] --> B[GitHub Issue/Project 取得]
B --> C{差異検出}
C -->|差異なし| D[一致確認]
C -->|差異あり| E[差異レポート表示]
E --> F{同期実行}
F --> G[新規 Issue 作成]
F --> H[既存 Issue 更新]
F --> I[削除された Issue クローズ]
G --> J[同期完了]
H --> J
I --> J
前提条件:
docs/development/release_plan.md が存在することgh CLI がインストールされ認証済みであることgh auth refresh -s project,read:project)制限事項:
推奨事項:
--sync で差異確認してから同期--sync で差異確認と自動同期--status で進捗状況を定期的に確認--sync で GitHub に反映planning-releases : リリース計画とイテレーション計画の作成tracking-progress : 進捗状況の確認と更新orchestrating-project : 計画・進捗管理フェーズ全体のオーケストレーションgit-commit : 変更のコミット