コードからspecを生成するスキル。As-Is spec(現状仕様)を根拠付きで抽出し、3層構造(インターフェース/振る舞い/業務意味)で整理。 使用タイミング: (1)「コードからspecを生成」(2)「仕様書を作成」(3)「APIドキュメント生成」(4)「現状の振る舞いを文書化」(5)「変更で壊れたspecを検出」(6)「コードと仕様の乖離を確認」と言われた時。 生成するのはAs-Is spec(現状仕様)であり、To-Be spec(あるべき仕様)は人間の判断が必要。
/plugin marketplace add CAPHTECH/claude-marketplace/plugin install caphtech-plugin@caphtech-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
references/confidence-labels.mdreferences/diff-detection.mdreferences/output-templates.mdreferences/spec-layers.mdコードから生成できるのはAs-Is spec(現状仕様)のみ
To-Beを推測すると「整った嘘」になる。As-Isとして厳密に抽出し、不明は不明として残す。
| 層 | 生成難易度 | 出力形式 | 説明 |
|---|---|---|---|
| A: インターフェース | 高精度 | YAML | 型/スキーマ/パス/ステータス |
| B: 振る舞い | 中精度 | YAML | 前提/事後/副作用/状態遷移 |
| C: 業務意味 | 低精度 | Markdown | 意図/理由/トレードオフ(草案止まり) |
すべての断定に確度を付与:
| ラベル | 定義 | 扱い |
|---|---|---|
| Verified | テスト/実行で確認済み | 信頼可 |
| Observed | コードで確認(テスト未確認) | 要検証 |
| Assumed | 一般的推測 | 要確認 |
| Unknown | 判断不能 | 明示的に残す |
詳細: references/confidence-labels.md
対象コードのエントリポイントを特定:
- HTTP: ハンドラ/ルーティング
- CLI: コマンド/サブコマンド
- Event: 購読/パブリッシュ
- Job: スケジューラ起点
- Library: public/export
抽出対象:
出力形式: YAML(OpenAPI互換推奨)
# 層A: インターフェースspec
endpoint:
path: /api/users/{id}
method: GET
confidence: Observed
evidence: src/api/users.ts:45
request:
params:
id:
type: string
required: true
confidence: Verified
evidence: tests/api/users.test.ts:23
response:
success:
status: 200
schema:
id: string
name: string
email: string
confidence: Observed
evidence: src/api/users.ts:52
errors:
- status: 404
code: USER_NOT_FOUND
confidence: Observed
evidence: src/api/users.ts:48
抽出対象:
出力形式: YAML
# 層B: 振る舞いspec
behavior:
preconditions:
- condition: "ユーザーIDが存在する"
confidence: Observed
evidence: src/services/user.ts:34
postconditions:
- condition: "ユーザー情報が返却される"
confidence: Verified
evidence: tests/services/user.test.ts:45
side_effects:
- type: db_read
target: users table
confidence: Observed
evidence: src/repositories/user.ts:23
state_transitions:
- from: null
to: null
note: "読み取り専用、状態変更なし"
confidence: Observed
evidence: src/api/users.ts:45-55
invariants:
- statement: "同一IDで常に同一ユーザーが返る"
confidence: Assumed
evidence: null
注意: この層はコードから断定困難。草案として生成し、人間レビュー必須。
出力形式: Markdown
# 業務意味spec(草案)
## 概要
[Assumed] ユーザー情報取得API
## 目的
[Unknown] 具体的なビジネス目的は不明
## 使用コンテキスト
[Assumed] ユーザープロフィール表示に使用される可能性
## 設計判断
[Unknown] なぜこの実装になったかは不明
---
**レビュー依頼**: この層の内容は人間による確認が必要
すべてのevidenceを検証:
[ ] ファイルパスが存在する
[ ] 行番号が有効範囲内
[ ] シンボル名が一致する
[ ] confidence: Verified には対応テストがある
既存specとコードを比較:
# 変更ファイルからspec影響を検出
git diff --name-only HEAD~1 | xargs -I {} grep -l "{}" specs/*.yaml
# 特定コミット範囲のspec影響
git diff --name-only <from>..<to> | while read file; do
grep -r "evidence:.*$file" specs/
done
詳細: references/diff-detection.md
詳細: references/output-templates.md
### 層A(インターフェース)
- [ ] すべてのエンドポイントを網羅したか
- [ ] 型情報に根拠リンクがあるか
- [ ] エラーコードを列挙したか
### 層B(振る舞い)
- [ ] 副作用を列挙したか
- [ ] 前提条件/事後条件を記述したか
- [ ] 状態遷移を図示したか(該当する場合)
### 層C(業務意味)
- [ ] 草案として明示したか
- [ ] Unknown/Assumedを正直に付けたか
- [ ] レビュー依頼を記載したか
### 全体
- [ ] As-IsとTo-Beを混同していないか
- [ ] 根拠のない断定がないか
- [ ] 確度ラベルが適切か