issue-split
大きすぎる/複数の関心事を含む既存 GitHub Issue を sub-issue に割り、親を umbrella に作り替える。「issue-split」「issueを分割して」「issueをsub-issueに割って」と指示されたとき。
来源信息
- 仓库
- kasiopeiya/claude-dev-template
- 最近来源活动
- 2026年9月29日 00:27
- 检测到的 SKILL.md 语言
- 日语
- 星标
- 0
- 分支
- 0
安装方式
默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。
检查来源文件
决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。
正在显示 SKILL.md
SKILL.md
来源说明 · 只读预览- name
- issue-split
- description
- 大きすぎる/複数の関心事を含む既存 GitHub Issue を sub-issue に割り、親を umbrella に作り替える。「issue-split」「issueを分割して」「issueをsub-issueに割って」と指示されたとき。
- argument-hint
- <Issue番号>
- allowed-tools
- AskUserQuestion, Bash, Read, Edit, Write
# /issue-split
大きすぎる、または複数の関心事を含む **open な Issue 1件** を sub-issue(縦スライス)に割り、親を umbrella(子への入口)に作り替える。
**Plan を割るのは `/to-issues`、既に Issue になっているものを割るのが本スキルである。** `/to-issues` は「親 Issue はクローズも変更もしてはならない」と定めており、親本文の作り替えを担当できない。その担当が本スキルである。
人間が起動し、AI が Phase 1 以降を実行する。
## 前提
- **いつ割るかは人間が決める。** 親 Issue の本文を書き換えるため、AI は「割った方がよい」と提案するまでに留める。
- **リポジトリのファイルは変更しない。** 触るのは GitHub Issue(本文・ラベル・sub-issue 紐付け)だけ。
- **分割規則と子 Issue の本文テンプレートは書き写さない。** 縦スライスの規則は [`/to-issues`](../to-issues/SKILL.md)、本文テンプレート `<issue-template>` とラベル判定は [`/quick-issue`](../quick-issue/SKILL.md) が正典。2箇所に持つと、片方が古いまま残る。
- **親はクローズしない。** すべての sub-issue が close されるまで親は open のまま置く(`/sweep`・`/issue-check` の「sub-issue が open な親は閉じない」ガードと揃える)。例外は [`/issue-regroup`](../issue-regroup/SKILL.md) だけである。親の open な子が全部ブロッカー待ちになったときに限り、子を他の親へ移してこの親を close する。
## Phase 1: 対象を読む
```bash
gh issue view <番号> --comments
```
本文とコメントをすべて読む。決定はコメント側にだけ書かれていることがある。
既に sub-issue が付いていないか確認する。付いていれば、その範囲は割り済みなので対象から外す。
```bash
gh api graphql -f query='{repository(owner:"<owner>",name:"<repo>"){issue(number:<番号>){subIssues(first:50){nodes{number state title}}}}}'
```
Issue が触れる領域の設計書(`docs/design-hub.md` 経由)とポリシー(`docs/policy-hub.md`)を、割り方を決めるのに要る範囲だけ読む。
## Phase 2: 割るかどうかを決める
次の表を**上から順に評価し、先に当たった行で確定する**。**割れない・割らないと判定したら、ここで終了し Issue には一切触らない。**
| 判定 | 条件(1つでも当たれば該当) | どうするか |
| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| 割れない | ・本文だけでは縦スライスに割れない(仕様が未確定) | `/grill-me` → `/to-plan` → `/to-issues` の経路を案内して終了する |
| 割らない | ・割ると各片が単体でデモ・検証できなくなる(縦スライスにならない。ただし `/to-issues` の縦スライス規則が例外に挙げる開発の道具の立ち上げは、その道具だけの片にしてよい)<br>・タスクが多いだけで関心事は1つ | 終了する。**分量は割る理由にならない** |
| 割る | ・タスク一覧が2つ以上の変更種別にまたがる(実装フローの Skill が2種以上になる)<br>・完了条件が、互いに独立して検証できる2つ以上の塊に分かれる<br>・目的の一文に「〜と〜」で関心事が2つ以上並ぶ | Phase 3 へ進む |
「割れない」で終わるのは失敗ではない。仕様が決まっていない Issue を無理に割ると、決まっていないことが子の数だけ複製される。
ここで終了するときは、**判定・当たった条件・次に取るべき経路**を報告する。Phase 7 の報告表は割った場合のものなので使わない。
## Phase 3: 分割案を人間に確認する
分割案を番号付きリストで提示し、承認を得るまで直す。粒度・依存関係・統合や分割の要否をユーザーに問う(提示の型は `/to-issues` の「ユーザーに確認する」が正典)。
あわせて、親に残す内容(この変更が必要な理由・作るもの・トレース)と子へ移す内容を一覧で示す。**親から消えるものを人間が見ないまま本文を書き換えない。**
## Phase 4: 子 Issue を起票する
承認された案を、依存順(ブロッカーが先)に起票する。
本文は `/quick-issue` の `<issue-template>` に従う。人間が上から3節(「この変更が必要な理由」「対応方針」「タスク一覧」)を読むだけで、何の話で結局何をするのかが分かる型だからである。
分割ではそこに1節を足し、3節を落とす。足す節は「完了条件」の直後に置き、上の3節を動かさない。
- **今回作らないこと(と、作る条件)**:**足す**。親のスコープ境界を子へ渡し、実装者の「ついで」を止める
- **ブロッカー**:**埋める**。テンプレートにある節なので位置は動かさない。先に起票した子の実番号。無ければ「なし(すぐ着手できる)」
- **作るもの**:落とす。「対応方針」と役割が重なる
- **どう気づいたか**:落とす。経緯は親にあり、子ごとに書くと同じ話が子の数だけ増える
- **親Issue**:落とす。Phase 5 の紐付けで親子関係が見えるので、本文に持つと二重管理になる
親の各節は次のように振り分ける。
- **この変更が必要な理由**:同名の節へ、子のスコープに合わせて書き直す(丸写ししない)
- **作るもの(`/to-issues` 産の親では「対応方針」)**:「対応方針」の採る案と「いま→変えた後」の表に書き直す
- **確定済みの決定**:その子に効く決定を「対応方針」の根拠・却下した案へ、確かめた事実は「現状」へ
- **今回作らないこと(と、作る条件)**:同名の節へ、子ごとに書き分けて転記する
- **タスク一覧・完了条件**:同名の節へ該当分を**移す**(親からは消える)
- **実装フロー(使用するSkill)**:同名の節へ、その子が触れる変更種別だけに絞って転記する
- **トレース(要件定義書との対応)**:親に残し、根拠となる機能ID・BR を子の「この変更が必要な理由」で名指しする(要件からの追跡を切らないため)
親に「確定済みの決定」節が無く「grill-me で確定した仕様」節がある場合(`/to-issues` が起票した Issue)も、扱いは同じである。
ラベルは `ai-fixable` / `issue:needs-human-decision` のどちらか一方を必ず付ける(判定は `/quick-issue` が正典)。`boy-scout` は付けない。`issue:needs-human-decision` を付けた子では、上から2番目の節が「対応方針」ではなく「人間に決めてほしいこと」になる。
タスク一覧と完了条件は、起票前にポリシー(`docs/policy-hub.md`)・rules(`.claude/rules/`)と照合する。ポリシーに反する作業を親から引き継いだままにしない。
## Phase 5: sub-issue として紐付ける
親と子の node id を取り、`addSubIssue` で紐付ける。
```bash
gh api graphql -f query='query($o:String!,$r:String!,$n:Int!){repository(owner:$o,name:$r){issue(number:$n){id}}}' \
-F o=<owner> -F r=<repo> -F n=<番号>
```
```bash
gh api graphql -f query='mutation($p:ID!,$c:ID!){addSubIssue(input:{issueId:$p,subIssueId:$c}){clientMutationId}}' \
-F p=<親のid> -F c=<子のid>
```
紐付けに失敗した子があれば、その番号を報告に残す。**成功した分をロールバックしない**——親本文のリンク一覧(Phase 6)があれば、紐付けが無くても親子は辿れる。
## Phase 6: 親を umbrella に作り替える
`gh issue view <番号> --json body --jq .body` でスクラッチパッドに書き出し、Read → Edit で該当セクションだけを差し替えてから反映する。
```bash
gh issue edit <番号> --body-file <スクラッチパッド>/issue-<番号>.md
```
- **タスク一覧**:sub-issue へのリンク一覧(`- [ ] #123 タイトル`)
- **完了条件**:「すべての sub-issue が close されていること」
- **実装フロー(使用するSkill)**:「sub-issue を順に処理する」
- **作るもの**:親のスコープ全体としてそのまま残す
- **この変更が必要な理由・今回作らないこと・トレース・確定済みの決定**:そのまま残す
「この変更が必要な理由」と「作るもの」を消してはならない。子はスコープの一部しか持たないので、全体の意図を保つ場所が親だけになる。
## Phase 7: 報告する
- **親 Issue**:#<番号>(umbrella 化済み/変更なし)
- **子 Issue**:#<番号> ×N(ラベル・ブロッカー付き)
- **紐付け**:成功/失敗した子の番号
- **親から消えた節**:子へ移したタスク・完了条件
## エラーハンドリング
- **対象 Issue が close 済み**:割らずに終了する(close 済みの Issue は着手対象ではない)
- **対象が既に他の Issue の sub-issue**:割ってよいか `AskUserQuestion` で確認する(入れ子が深くなるため)
- **`addSubIssue` が失敗する**:その子の番号を報告に残し、他の子の処理は続ける
- **`gh issue edit` が失敗する**:親の作り替えを中断し、起票済みの子の番号を添えて報告する。紐付けにも失敗した子があれば、その子の本文末尾に親 Issue 番号を追記して親子を辿れるようにする
- **親 Issue に別セッションの更新が入っている**:上書きせず中断し、その事実を報告する
## 使用方法
```
/issue-split 123
```
引数: $ARGUMENTS
在 GitHub 查看