仕様駆動開発スキルバンドル
Claude Code との協調開発を「アドリブ排除・取りこぼし防止」で構造化する skill bundle
最終更新: 2026-05-01(delta-audit / unification-claim 7 カテゴリ / Stop hook 整備、12 skill / 22 pattern / 7 カテゴリ完成)01 設計思想
AI(Claude)との協調開発を続けるうち、構造的に発生するミスが複数回観測されました。 派生 Q の取りこぼし、GROUP 番号の衝突、既存仕様の誤前提、設計書類のスタイル不統一、 コード ↔ 設計書のトレーサビリティ欠落 — いずれも「AI の心がけだけでは保てない」種類のミスです。
これらを tool 経由化で構造的に排除 するため、Claude Code skill 形式で 作成した汎用ツールキットが本バンドルです。BorgesTag(個人開発の Firefox 拡張)から抽出し、 config.yaml の書換のみで別プロジェクトに流用できる設計を意図しています。
4 つの設計原則
アドリブ排除
人間(Claude)の心がけで担保していた手順を tool 経由化し、構造的に強制。 grep + Read を skill 内蔵、Q を 4 列形式で記録、GROUP 番号を採番ツール経由に。
流用可能(config-driven)
プロジェクト固有値はすべて config.yaml に分離、コード本体は不変。
別プロジェクトへ skill bundle ごとコピー+ config 編集で動作。
違反を即検出
linter が必須欠落 / stale / リンク先不在を warning / error で即検出、ユーザー判断を促す。 silent な失敗を作らない。
段階導入可能
各 skill 単独で価値、組合せで相乗効果。bundle 全部入れずに 1 つだけ流用も可。 既存プロジェクトへの導入もスムーズ。
02 ツールバンドル全体像
計 12 skill + 22 workflow_pattern 同梱(2026-05-01 / delta-audit 新設 + scan-response 7 カテゴリ拡張 + Stop hook wrapper 整備時点)。各 skill の役割:
仕様駆動コア(Phase 1〜3)
| skill 名 | 役割 |
|---|---|
question-builder |
a/b/c/d 選択肢付き Q を plan log + Q ログへ二箇所書込(取りこぼし防止) |
group-id-allocator |
新規 GROUP 番号採番+衝突検出+ renumber(番号衝突予防) |
plan-snapshot |
プランログ未完了項目を 4 列形式で抽出+ stale 候補警告(残タスク提示自動化) |
spec-cite |
機能名 / 関数名 → grep + Read → file:line 引用ブロック自動生成 |
spec-linter |
設計書類 frontmatter 規約準拠 check(必須欠落 / stale / リンク先存在) |
運用層(応答品質・診断・リリース)
| skill 名 | 役割 |
|---|---|
workflow-stamp |
応答ヘッダ inline 付与(compose)/ 7 カテゴリ+ヘッダ存在 gating(scan-response:promise / hypothesis / cleanup / normalcy / unverified-reference / scope-claim / unification-claim、mode で gate / warn / off 切替)/ catalog 全 22 パターン参照(list-patterns、v1.46.3 で #19 skill 仕様報告 / #20 fb 解釈 / #21 違反報告 with 再発防止策同梱、2026-05-01 に #22 双子 UI 改修時 を追加)/ Claude Code Stop hook 用 wrapper stop_hook.py 同梱 |
error-triage |
不具合報告時に 1 ターン目で全レイヤー診断(visual / data / behavior / performance の 4 カテゴリ × 7 レイヤー) |
release-flow |
リリースフロー 4 段階 gate(preflight 6 項目 / pre-tag-check 3 項目 / status / uat-checklist)。Actions 未発火のまま動作確認指示する事故、および移送系リリースの実機確認漏れを予防 |
トレーサビリティ(Phase 4)
| skill 名 | 役割 |
|---|---|
trace-extractor |
コード内 @spec <file>#<anchor> tag を抽出し、AUTO_TRACE.md(コード ↔ 設計書の対応表)を自動生成 |
trace-linter |
AUTO_TRACE.md と設計書 anchor を突合、broken link(参照先 anchor 不在)/ orphan(参照されていない section)を検出 |
運用 hardening(Phase 5、2026-04-30 v1.45.5 saveHistory 全消失事案を受けて追加)
| skill 名 | 役割 |
|---|---|
migration-matrix |
storage key(saveHistory 等)の callsite を 5 経路(read / write / delete / import / export)に分類列挙、aware helper(_readSaveHistory 等)経由でない leak を検出。状態切替(migration)リリース前の preflight で必須。書込側のみ aware 化、import 経路の漏れ → 移送後 import で IDB store.clear()+put により既存全消失する重大事案の再発防止 |
同 Phase で workflow-stamp に第 6 カテゴリ scope-claim も追加(「全 read 経路を統一」「すべての X を Y」「網羅的に」「漏れなく」等の網羅性主張に grep 根拠の併記を強制)、release-flow に uat-checklist サブコマンドを追加(state switch / migration / UI / IPC 系リリースの実機確認チェックリストを git diff から自動カテゴリ検出)。
双子 UI 整合性(2026-05-01、編集パネル乖離事案の Tier 2 構造的予防)
| skill 名 | 役割 |
|---|---|
delta-audit |
双子 UI(機能的に対の UI を別ファイルに 2 重実装する構造)の差異を検出。class prefix ペアから button label / input placeholder / handler 関数名を双方 grep し並列比較、leak 表化。release-flow preflight に組込(git diff で双方変更検知時に自動呼出、leak ≥ 1 件で gate failure)。「編集パネルの bottom-row レイアウトのみ同期、5 項目乖離のまま push」事案の構造的予防 |
連動して workflow-stamp catalog に pattern #22「双子 UI 改修時」を登録。「modal側もsettings側に合わせろ」「バラバラにするな」等の同期指示を受けた際、改修着手前に delta-audit audit <pair-name> で双方の delta 表を取得 → ユーザー提示 → 確定後実装、の 4 step を強制。
応答送信前必須 step 自動内蔵(v1.46.1)
workflow-stamp / scan-response / question-builder / migration-matrix を Claude が手動で呼ばないと発動しない設計だったため、忘れた瞬間に違反が応答に混入する弱点があった。これを構造的に塞ぐため、共通 helper emit_next_step_footer(pattern_num, section_label, skill_used) を _config.py に新設し、5 skill の主要 cmd 末尾でフッタを print(応答送信前必須 3 step:compose / scan-response / 検出補正)。
起動冒頭 banner(v1.46.3、出力切詰時のリマインダ見落とし対策)
skill 出力末尾フッタを head -N で切詰めて読み飛ばすと reminder を見落とす経路が判明。共通 helper emit_next_step_top_banner(pattern_num) を新設し、全 12 skill の主要 cmd 冒頭で 1 行 banner を print(「⚠️ 送信前必須: workflow-stamp compose --pattern N + scan-response(詳細はフッタ参照)」)。冒頭 + 末尾の両端で reminder が見られる設計、CLAUDE.md「skill 出力フィルタ禁止」節も併設。
Pattern #19 / #20 / #21(v1.46.3、運用層拡張)
- #19 skill バンドル仕様の挙動・coverage 報告:spec-cite に
--scope skills追加、skill バンドル自身を grep して coverage 表化、対象外ゼロを強制 - #20 ユーザー fb 解釈時の意図確認:「〜が逆」「〜消えてる」「〜おかしい」等の状態指摘 fb を受けた時、直前変更との照合最優先 + 一意解釈での実装走行禁止
- #21 違反行為の報告(自己違反 / 機構不備 / 設計ギャップの自己申告):再発防止策同梱必須(自己規律のみは無効、Tier 別構造的予防策の提示、plan log / memory への永続化必須)
双子 UI 改修ルール(v1.46.4、CLAUDE.md 節新設)
v1.46.3 で双子 UI(編集パネル)の統一を視覚レイアウト同期だけで完了とみなし、5 項目(保存ラベル / 閉じるラベル / undo button / autosave / save feedback / globalTags merge)が乖離したまま AMO 自動署名 + Release 連鎖発火後に発覚した違反を受けて、CLAUDE.md「双子 UI 改修時」節を新設:spec-cite で双方全件 grep → delta 表をユーザーに提示 → 確定後実装、の 4 step を明文化。Tier 2 = delta-audit skill 新設(2026-05-01 完了)、Tier 3 = scan-response 第 7 カテゴリ「unification-claim」追加(2026-05-01 完了)。
scan-response 第 7 カテゴリ unification-claim(2026-05-01、双子 UI 違反の Tier 3)
応答送信前検査の workflow-stamp scan-response を 6 → 7 カテゴリへ拡張。「両 UI を合わせろ」「双子 UI を統一」「両方統一」「バラバラにするな」「双方への言及」等の双子 UI 統一主張を検出し、近傍(±150 chars)に delta-audit / 双方 grep 根拠(delta-audit / delta_audit / 双方 grep / 両ファイル grep / leak 0 件 / 該当ファイル行引用 等)の併記がない場合 flag。書く前に delta-audit audit <pair-name> で leak 0 を確認し、結果を近傍に書く運用へ強制。Tier 3 構造的予防として実装。
Claude Code Stop hook 連動(2026-05-01、応答送信前検査の手動忘れ対策 Tier 2)
応答送信前 scan-response の手動呼出忘れを構造的に塞ぐため、Claude Code の Stop event hook を整備。.claude/skills/spec-driven/workflow-stamp/stop_hook.py wrapper を新設、stdin から hook context 受領 → transcript_path から最新 assistant text を抽出 → scan-response 実行 → 違反時に {"decision":"block","reason":"..."} を stdout 出力で再生成促進。.claude/settings.local.json に hooks.Stop[0].matcher="*" で登録、enforcement.mode は config.yaml で warn / gate / off 切替可能。Windows cp932 stdout で emoji(🟢 / 🔴)crash を回避するため UTF-8 wrapper も同梱。
連携図
ユーザー依頼受領
↓
[group-id-allocator next] → 新規番号採番
↓
[question-builder issue] → Q を plan log + Q ログへ
↓
[spec-cite cite] → 既存仕様の grep + Read 引用
↓
(実装フェーズ)
↓
[spec-linter validate] → 設計書類 frontmatter 検証
↓
[trace-extractor extract] → AUTO_TRACE.md 生成
[trace-linter validate] → broken link / orphan 検出
↓
[plan-snapshot list] → 未完了項目で残タスク提示
↓
(リリースフェーズ)
↓
[release-flow preflight] → リリース前 6 項目 gate
↓ (commit / push)
[release-flow pre-tag-check] → tag push 前 3 項目 gate
↓ (tag push → Actions 自動発火)
[release-flow status] → Release / XPI 確認手順
各応答送信前:
[workflow-stamp scan-response] → 7 カテゴリ+ヘッダ存在 gate
(+ Claude Code Stop hook で自動発動、enforcement.mode で gate/warn/off)
(promise / hypothesis / cleanup / normalcy / unverified-reference / scope-claim)
不具合報告時:
[error-triage triage <cat>] → 全レイヤー診断(1 ターン目で baseline)
state switch / migration リリース時:
[migration-matrix audit <key>] → 5 経路 callsite の leak 0 件確認
[release-flow uat-checklist] → 実機確認チェックリスト自動生成
03 個別 skill 解説
question-builder:取りこぼし防止
a/b/c/d の選択肢付き Q を発行すると、plan log(プロジェクト統括)と Q ログ(GROUP ごとの YAML バックアップ)の二箇所に同時書込。 prerequisites(既存仕様の引用)が未充足だと warning を出す。
起源:選択肢付き Q をチャットに投げただけで plan log 未記録、 コンテキスト圧縮で本文消失して復元不能になった事故(v1.44.0 着手時)。
group-id-allocator:番号衝突予防
plan log と実装計画書の GROUP-N を全件 grep し、未使用最大 +1 を返す。
さらに既存衝突を検出して renumber も可能。CHANGELOG / commit / tag の番号は
immutable のため historical reference として保護する。
起源:v1.45.0 リリース時に GROUP 番号を別の GROUP と衝突させた事故。 Plan log 内では新規を別番号へ renumber、git 履歴側は残置で対応。
plan-snapshot:残タスク自動抽出
plan log と実装計画書から未完了項目を 4 列形式(グループ/記号/内容/状態)で抽出。
状態列が — / 受領(着手予定) 等のままになっている **stale 候補**を warning。
TodoWrite 整理時に必ず実行することで、TodoWrite と plan log の乖離を予防する。
spec-cite:grep + Read 強制
機能名 / 関数名を入力すると ripgrep(or Python fallback)で全件検索、
各マッチ位置を file:line 注記付き markdown 引用ブロックで出力。
Q の prerequisites、設計提示の根拠、対策案の関連シンボル網羅で経由必須化。
起源:保存経路の冗長性監査検討時に当該機能の挙動を grep + Read せず関数名から推測し、Q 選択肢に誤った仕様を書いた事故。
spec-linter:設計書類規約準拠 check
各設計書類(.md)の frontmatter(title / last_updated / status / scope / related_code / related_specs) を検証。必須欠落 / stale 警告(last_updated が 90 日超古い)/ status 値違反を検出。
workflow-stamp:応答書式固定化+提出物検査
応答セクションに (フローパターン: #N 名称 / skill: ... / 漏れ: K件 → 🟢/🟡/🔴 ...)
の inline ヘッダを付与(compose)。送信前に scan-response で
4 カテゴリ(promise / hypothesis / cleanup / normalcy)+ヘッダ存在チェック、
検出時 gate(mode で warn / off 切替可能)。
鉄則:応答は「発話」ではなく「成果物(提出物)」。送信前に毎回ツール検査。
error-triage:不具合報告全レイヤー診断
ユーザーから不具合報告を受けた 1 ターン目に
triage visual / data / behavior / performance 4 カテゴリのチェックリストを生成。
各カテゴリ × 7 レイヤー(L1 サーバ → L7 体験)で診断、初回 eval / 1 回のコマンドで全件取得を強制。
起源:preview blank 報告に対し、サーバ・DOM だけ確認して「正常」と返答を 5 ターン繰り返した事故(viewport 0×0 を見逃し)。
release-flow:リリースフロー 3 段階 gate
commit / push / tag / Actions / 動作確認の流れを構造化:
preflight --version X.Y.Z:commit 前 6 項目(manifest / CHANGELOG / plan log / node --check / git status / remote sync)pre-tag-check:tag push 直前 3 項目(manifest version 一致 / CHANGELOG entry / main = remote)status:tag push 後の Actions / Release URL + ユーザー側動作確認手順
起源:Actions 未発火のまま「動作確認してください」と指示した事故(保存履歴 IDB 移送シリーズの初期段階)。
trace-extractor / trace-linter:コード ↔ 設計書 トレーサビリティ
コード内に // @spec 02_詳細設計書.md#1-2 のような tag を埋め込むと、
trace-extractor extract で全件抽出 → AUTO_TRACE.md に対応表自動生成。
trace-linter validate で設計書 anchor との突合、broken link(参照先 anchor 不在)と orphan(誰からも参照されていない section)を検出。
BorgesTag では現在 31 件の @spec tag を主要関数に埋め込み、broken link 0 件で運用中(2026-04-29 時点)。
04 別プロジェクトへの流用手順
本バンドルは config-driven 設計のため、config.yaml の書換のみで別プロジェクトに移植可能。
.claude/skills/spec-driven/ディレクトリを丸ごとコピーconfig.yamlの以下を新プロジェクトの値に書換:project.root:config.yaml からプロジェクトルートへの相対 pathdesign.dir:設計書類フォルダ名design.required_frontmatter:自プロジェクトの規約に合わせるplanning.plan_log/planning.impl_plan:プランログのパスsource.scopes:ソースコードのパス(複数可)trace.tag_patterns:コード言語別 @spec tag regexenforcement.mode:scan-response gating(gate / warn / off)enforcement.bypass_patterns:例外パターン(pure-ack 等)workflow_patterns:catalog をプロジェクト固有に編集
- 動作確認:
spec-linter validate/plan-snapshot list/workflow-stamp list-patterns - CLAUDE.md(or 同等の運用ルールファイル)に「skill 経由必須フロー」表を追記
- 既存コードに
@spectag を段階追加 →trace-extractor実行 →trace-linter検証
詳細は README.md(流用手順マニュアル、本バンドルに同梱)参照。
依存関係:Python 3.7+、PyYAML、ripgrep(任意、なければ Python fallback)。外部 SaaS 依存なし、完全ローカル動作。
05 採用判断の経緯
トレーサビリティ実現で 5 方針を評価:
| 方針 | 内容 | 評価 |
|---|---|---|
| A 最小 | 設計書側に手動でコード位置をリンク([foo.js:10](path)) |
保守コスト高、コード変更追従困難 |
| B section-link | 設計書 section に「対応コード」一覧 footer 追加 | A の派生、同じ問題 |
| C code-comment | コード側にコメントで対応 spec を記載(人間可読) | 機械的検証不可、broken link を見逃す |
| D JSDoc tag 自動生成 | コードに @spec tag → 自動 trace 表生成 |
採用:機械検証可、保守容易 |
| E 双方向 graph | 設計書 ↔ コードを GraphViz 等で可視化 | 過剰、依存増、リターン低 |
D 採用後、Phase 4-prep(既存 5 skill の config-driven refactor)→ Phase 4a(trace-extractor 実装) → Phase 4b(trace-linter 実装)→ Phase 4c(重要関数 30+ に @spec tag 埋込) → Phase 4d-final(README + 本ページ + 設計書類 13 確定)の段階展開で 2026-04-29 完了。
06 拡張可能性・将来展望
新 skill 追加時の作法
.claude/skills/spec-driven/<新 skill 名>/ディレクトリ作成SKILL.md(frontmatter + 目的 + when_to_use + 使い方)を既存 skill 構造に揃えて作成<新 skill 名>.pyで_configから共通設定読込config.yamlのworkflow_patternsに対応パターン追加(番号は既存最大 +1)- CLAUDE.md のパターン表と「skill 経由必須フロー」表を更新
- 動作確認 6+ ケース(happy path / edge / error)でテスト
- 第 1 サンプル抽出:実運用 1 回を記録、catalog の
noteに追記
Python 以外の言語対応
現状の skill は全て Python 実装。Node.js / Rust / Go 版への移植は config.yaml の構造をそのまま流用すれば可能だが、
現状未実装(Python の標準ライブラリ + ripgrep があれば十分なため)。
IDE プラグイン化候補
VS Code / Cursor 等で @spec tag を hover 時にプレビュー、broken link を即時 underline、
などの拡張は将来検討。現状は CLI ベースで Claude Code から直接呼び出す運用。
残課題(弱点として残る共通テーマ)
- 「私が呼ぶ判断」のアドリブ依存:tool は揃ったが毎回実行する強制機構(hooks / harness レベル enforcement / skill auto-trigger)が未整備
- compose 自動呼出統合:他 skill から workflow-stamp compose を内部呼出する設計、未着手
- scan-promises ↔ TodoWrite 自動連携:promise 抽出を TodoWrite に自動 push する仕組みなし
- CHANGELOG / git 履歴 ↔ plan log 状態列の自動 cross-ref:plan-snapshot audit は stale 検出のみ、完了済か未着手かは手動判定
派生提案
- 新規 global state(pool / cache / Map)導入時の交点走査 pattern 化(DOM ライフサイクル × global state pool の race 教訓に基づく)
- 引き継ぎ資料作成の patternize(handover-builder skill 新設、本セッションを第 1 サンプルとして抽出)