SPEC Validator (v3.4)
コアコンセプト: SPEC 文書の機械検証可能な部分を自動検証して品質保証
このスキルは SPEC 文書から json:schema/* コードブロックを抽出し、該当メタスキーマで検証し、ハイブリッド API 仕様の Example ↔ Schema 一致を自動検証します。
検証範囲
| 検証項目 |
方式 |
メタスキーマ |
| §0.4.1 TypeScript モデル |
JSON Schema 検証 |
typescript_model.schema.json |
| §0.4.2 DB スキーマ |
JSON Schema 検証 |
db_table.schema.json |
| §0.4.5 Write Operations |
JSON Schema 検証 |
write_operations.schema.json |
| §0.5 API Contract |
JSON Schema 検証 |
api_endpoint.schema.json |
| 必須セクション存在 |
Regex マッチング |
- |
| AC 形式 |
5列テーブル検証 |
- |
| ハイブリッド API 完全性 |
テーブル + Example 存在確認 |
- |
| Example ↔ Schema 一致 |
タイプ/必須フィールド/enum 検証 |
- |
| SSOT パス有効性 |
API Route ファイル存在確認 |
- |
| Write Operations 一貫性 |
API↔Operation マッピング検証 |
- |
プロトコル (Protocol)
Phase 1: SPEC ファイルロード
単一ファイル検証:
/spec-validator docs/features/029-battle/SPEC-029.md
全体 SPEC 検証:
/spec-validator --all
特定機能のみ検証:
/spec-validator 029
Phase 2: JSON Schema ブロック抽出
パターンマッチング:
```json:schema/{type}
{JSON 内容}
サポートタイプ:
json:schema/db_table → DB テーブル定義
json:schema/api_endpoint → API 契約
json:schema/typescript_model → TypeScript モデル
json:schema/write_operations → データ変更仕様 (v3.4 新規)
抽出ロジック:
pattern = r'```json:schema/(\w+)\n(.*?)\n```'
matches = re.findall(pattern, content, re.DOTALL)
Phase 3: メタスキーマ検証
スキーマロード:
docs/_templates/schemas/{type}.schema.json
JSON Schema 検証:
from jsonschema import validate, ValidationError
validate(instance=extracted_json, schema=meta_schema)
エラー収集:
Phase 4: 構造検証
必須セクション確認:
required_sections = [
r'## 0\. AI 実装契約',
r'### 0\.4 Data Schema',
r'### 0\.5 API Contract',
r'## 1\. 概要',
r'## 2\. 機能要求事項',
]
AC 形式検証:
# BDD 5列テーブル検証
ac_pattern = r'\| AC\d+ \|.*\|.*\|.*\|.*\|'
N/A 明示確認:
- 空のセクションは
N/A または 該当なし 明示必須
Phase 5: ハイブリッド API 検証 (v3.1)
Schema テーブル存在確認:
has_schema_table = re.search(r'\|\s*Field\s*\|\s*Type\s*\|', section_content)
Example ブロック存在確認:
has_request_example = re.search(r'Request Example', section_content)
has_response_example = re.search(r'Response Example', section_content)
Example ↔ Schema 一致検証:
- 必須フィールド存在有無
- タイプ一致有無
- enum 値一致有無
- 入れ子オブジェクト再帰検証
SSOT パス有効性:
src/app/api/*/route.ts パス抽出
- ファイル存在有無確認
Phase 5.5: Write Operations 検証 (v3.4 新規)
目的: §0.4.5 Write Operations の一貫性と完全性検証
Operation Mapping 完全性:
# §0.5 API Contract の全ての Write API が §0.4.5 にマッピングされているか確認
api_endpoints = extract_api_endpoints(spec_content)
write_operations = extract_write_operations(spec_content)
write_apis = [api for api in api_endpoints if api['method'] in ['POST', 'PUT', 'PATCH', 'DELETE']]
for api in write_apis:
if not any(op['api'] == f"{api['method']} {api['path']}" for op in write_operations['operations']):
warnings.append(f"§0.4.5 欠落: {api['method']} {api['path']}")
テーブル参照有効性:
# §0.4.5 のテーブルが §0.4.2 に定義されているか確認
db_tables = [t['table'] for t in extract_db_tables(spec_content)]
for op in write_operations['operations']:
if op['table'] not in db_tables:
errors.append(f"§0.4.5 エラー: テーブル '{op['table']}'が §0.4.2 に定義されていない")
トランザクション一貫性:
# トランザクショングループの演算が Operation Mapping に存在するか確認
operation_names = [op['api'] for op in write_operations['operations']]
for tx in write_operations.get('transactions', []):
for op in tx['operations']:
if op not in operation_names:
errors.append(f"§0.4.5 エラー: トランザクション '{tx['name']}'の演算 '{op}'が Operation Mapping にない")
べき等性戦略適合性:
# 非べき等 API に対する戦略が定義されているか確認
non_idempotent_apis = write_operations.get('idempotency', {}).get('non_idempotent_apis', [])
post_apis = [op['api'] for op in write_operations['operations'] if op['api'].startswith('POST')]
for api in post_apis:
if api not in non_idempotent_apis:
warnings.append(f"§0.4.5 警告: POST API '{api}'が idempotency.non_idempotent_apis にない")
監査ポリシー適合性 (Tier 1-2):
# Tier 1-2 機能で audit ポリシーが定義されているか確認
tier = extract_tier(spec_content)
audit = write_operations.get('audit', {})
if tier in [1, 2] and not audit.get('enabled'):
warnings.append("§0.4.5 警告: Tier 1-2 機能だが audit ポリシーが無効化されている")
N/A 明示確認:
# Write Operations セクションがないか空の場合 "N/A" 明示確認
if not write_operations and not re.search(r'0\.4\.5.*N/A', spec_content):
errors.append("§0.4.5 エラー: Write Operations セクションがなく N/A も明示されていない")
Phase 6: 結果出力
## SPEC 検証結果: SPEC-029-battle.md
### JSON Schema 検証
✅ §0.4.1 TypeScript Model: OK (1個モデル)
✅ §0.4.2 DB Table: OK (1個テーブル)
✅ §0.4.5 Write Operations: OK (3個演算)
✅ §0.5 API Contract: OK
### 構造検証
✅ 必須セクション: すべて存在
⚠️ AC 形式: 2個 AC に観測点欠落
- FR-02901 AC2: 観測点コラムが空
- FR-02902 AC1: 観測点コラムが空
### ハイブリッド API 仕様検証 (v3.1)
✅ Schema テーブル: 存在
✅ Request Example: 存在
✅ Response Example: 存在
⚠️ Error Examples: FORBIDDEN エラー例示欠落
### Write Operations 検証 (v3.4)
✅ Operation Mapping: 全ての Write API マッピング済 (3/3)
✅ テーブル参照: 全てのテーブルが §0.4.2 に定義されている
✅ トランザクション一貫性: 全てのトランザクション演算が有効
⚠️ べき等性: POST /battles に対する戦略未定義
✅ 監査ポリシー: Tier 2 機能で audit 活性化済
### SSOT パス検証 (v3.1)
✅ src/app/api/battle/start/route.ts
### 要約
| 項目 | 結果 |
| ---------------- | :---------------------: |
| JSON Schema | ✅ |
| 構造 | ⚠️ 2 warnings |
| ハイブリッド API | ⚠️ 1 warning |
| Write Operations | ⚠️ 1 warning |
| SSOT パス | ✅ |
| 全体 | **PASSED** (4 warnings) |
検証規則詳細
1. DB Table Schema 検証
| フィールド |
必須 |
検証規則 |
table |
✅ |
snake_case パターン |
columns |
✅ |
1個以上 |
columns[].name |
✅ |
snake_case パターン |
columns[].type |
✅ |
許可された PostgreSQL タイプ |
columns[].nullable |
⚪ |
boolean (既定 true) |
rls.policies |
⚪ |
SELECT/INSERT/UPDATE/DELETE 中 |
2. API Endpoint Schema 検証
| フィールド |
必須 |
検証規則 |
id |
✅ |
API-NNN-NN パターン |
method |
✅ |
GET/POST/PUT/PATCH/DELETE |
path |
✅ |
/で開始 |
errors |
⚪ |
http, code, condition, client_action 必須 |
3. TypeScript Model Schema 検証
| フィールド |
必須 |
検証規則 |
name |
✅ |
PascalCase パターン |
fields |
✅ |
1個以上 |
fields[].name |
✅ |
camelCase パターン |
fields[].type |
✅ |
TypeScript タイプ文字列 |
4. Write Operations Schema 検証 (v3.4 新規)
| フィールド |
必須 |
検証規則 |
feature_id |
✅ |
NNN 形式 (3桁数字) |
operations |
✅ |
1個以上 (Write 機能時) |
operations[].api |
✅ |
{METHOD} {path} 形式 |
operations[].action |
✅ |
INSERT/UPDATE/UPSERT/SOFT_DELETE/HARD_DELETE |
operations[].table |
✅ |
snake_case, §0.4.2に定義されたテーブル |
operations[].fields |
✅ |
1個以上のフィールド名 |
transactions |
⚪ |
原子性必要時 |
transactions[].name |
✅ |
識別可能な名前 |
transactions[].operations |
✅ |
operations[].apiとマッチング |
transactions[].isolation_level |
⚪ |
READ_COMMITTED/REPEATABLE_READ/SERIALIZABLE |
transactions[].rollback_scope |
✅ |
ALL/PARTIAL |
idempotency |
⚪ |
非べき等 API ある時推奨 |
idempotency.non_idempotent_apis |
✅* |
POST API リスト (*非べき等時) |
idempotency.strategy |
✅* |
IDEMPOTENCY_KEY/UPSERT/NONE |
audit |
⚪ |
Tier 1-2 推奨 |
audit.enabled |
✅ |
boolean |
audit.operations |
✅ |
CREATE/UPDATE/DELETE 中 |
audit.retention_days |
⚪ |
正の整数 |
Cross-Reference 検証:
| 検証項目 |
参照セクション |
検証ロジック |
| テーブル存在 |
§0.4.2 |
operations[].tableが DB スキーマに定義されている |
| フィールド存在 |
§0.4.2 |
operations[].fieldsが該当テーブルカラムに存在 |
| API マッピング完全性 |
§0.5 |
全ての Write API が operations にマッピングされている |
| トランザクション演算有効性 |
§0.4.5.1 |
transactions[].operations が operations に存在 |
失敗ケース対処
| ケース |
対処 |
| JSON パース失敗 |
該当ブロック位置とパースエラーメッセージ出力 |
| メタスキーマ未存在 |
警告出力、該当ブロックスキップ |
| SPEC ファイル未存在 |
エラー出力、終了 |
| 空セクション |
N/A 明示有無確認、未明示時警告 |
CLI オプション
| オプション |
説明 |
例示 |
--all |
全ての SPEC 検証 |
/spec-validator --all |
--json |
JSON 形式出力 |
/spec-validator 029 --json |
--fix |
自動修正可能な項目修正 (例: N/A 追加) |
/spec-validator 029 --fix |
--strict |
警告も失敗で処理 |
/spec-validator 029 --strict |
Makefile 連動
# SPEC 検証
spec.validate:
@echo "SPEC 検証中..."
@python .claude/skills/spec-validator/scripts/validate.py $(SPEC)
spec.validate-all:
@python .claude/skills/spec-validator/scripts/validate.py --all
使用例示:
make spec.validate SPEC=docs/features/029-battle/SPEC-029.md
make spec.validate-all
統合ワークフロー
[feature-spec-generator]
↓
SPEC.md 生成
↓
[spec-validator] ←── 自動または手動実行
↓
┌────┴────┐
↓ ↓
PASS FAIL
↓ ↓
[実装進行] [SPEC 修正 → 再検証]
参照文書
1---2name: spec-validator-23description: SPEC 文書の JSON Schema ブロックおよびハイブリッド API 仕様を自動検証するスキル。SPEC 品質ゲート役割遂行。4---5
6# SPEC Validator (v3.4)
7
8> **コアコンセプト**: SPEC 文書の機械検証可能な部分を自動検証して品質保証
9
10このスキルは SPEC 文書から `json:schema/*` コードブロックを抽出し、該当メタスキーマで検証し、**ハイブリッド API 仕様の Example ↔ Schema 一致**を自動検証します。
11
12## 検証範囲
13
14| 検証項目 | 方式 | メタスキーマ |
15| ---------------------------- | ------------------------------- | ------------------------------ |
16| **§0.4.1 TypeScript モデル** | JSON Schema 検証 | `typescript_model.schema.json` |
17| **§0.4.2 DB スキーマ** | JSON Schema 検証 | `db_table.schema.json` |
18| **§0.4.5 Write Operations** | JSON Schema 検証 | `write_operations.schema.json` |
19| **§0.5 API Contract** | JSON Schema 検証 | `api_endpoint.schema.json` |
20| **必須セクション存在** | Regex マッチング | - |
21| **AC 形式** | 5列テーブル検証 | - |
22| **ハイブリッド API 完全性** | テーブル + Example 存在確認 | - |
23| **Example ↔ Schema 一致** | タイプ/必須フィールド/enum 検証 | - |
24| **SSOT パス有効性** | API Route ファイル存在確認 | - |
25| **Write Operations 一貫性** | API↔Operation マッピング検証 | - |
26
27---
28
29## プロトコル (Protocol)
30
31### Phase 1: SPEC ファイルロード
32
331. **単一ファイル検証**:
34
35 ```bash
36 /spec-validator docs/features/029-battle/SPEC-029.md
37 ```
38
392. **全体 SPEC 検証**:
40
41 ```bash
42 /spec-validator --all
43 ```
44
453. **特定機能のみ検証**:
46 ```bash
47 /spec-validator 029
48 ```
49
50### Phase 2: JSON Schema ブロック抽出
51
521. **パターンマッチング**:
53
54 ````
55 ```json:schema/{type}
56 {JSON 内容}
57 ````
58
59 ```
60
61 ```
62
632. **サポートタイプ**:
64 - `json:schema/db_table` → DB テーブル定義
65 - `json:schema/api_endpoint` → API 契約
66 - `json:schema/typescript_model` → TypeScript モデル
67 - `json:schema/write_operations` → データ変更仕様 (v3.4 新規)
68
693. **抽出ロジック**:
70 ````python
71 pattern = r'```json:schema/(\w+)\n(.*?)\n```'
72 matches = re.findall(pattern, content, re.DOTALL)
73 ````
74
75### Phase 3: メタスキーマ検証
76
771. **スキーマロード**:
78 - `docs/_templates/schemas/{type}.schema.json`
79
802. **JSON Schema 検証**:
81
82 ```python
83 from jsonschema import validate, ValidationError
84
85 validate(instance=extracted_json, schema=meta_schema)
86 ```
87
883. **エラー収集**:
89 - パス、メッセージ、期待値 vs 実際値
90
91### Phase 4: 構造検証
92
931. **必須セクション確認**:
94
95 ```python
96 required_sections = [
97 r'## 0\. AI 実装契約',
98 r'### 0\.4 Data Schema',
99 r'### 0\.5 API Contract',
100 r'## 1\. 概要',
101 r'## 2\. 機能要求事項',
102 ]
103 ```
104
1052. **AC 形式検証**:
106
107 ```python
108 # BDD 5列テーブル検証
109 ac_pattern = r'\| AC\d+ \|.*\|.*\|.*\|.*\|'
110 ```
111
1123. **N/A 明示確認**:
113 - 空のセクションは `N/A` または `該当なし` 明示必須
114
115### Phase 5: ハイブリッド API 検証 (v3.1)
116
1171. **Schema テーブル存在確認**:
118
119 ```python
120 has_schema_table = re.search(r'\|\s*Field\s*\|\s*Type\s*\|', section_content)
121 ```
122
1232. **Example ブロック存在確認**:
124
125 ```python
126 has_request_example = re.search(r'Request Example', section_content)
127 has_response_example = re.search(r'Response Example', section_content)
128 ```
129
1303. **Example ↔ Schema 一致検証**:
131 - 必須フィールド存在有無
132 - タイプ一致有無
133 - enum 値一致有無
134 - 入れ子オブジェクト再帰検証
135
1364. **SSOT パス有効性**:
137 - `src/app/api/*/route.ts` パス抽出
138 - ファイル存在有無確認
139
140### Phase 5.5: Write Operations 検証 (v3.4 新規)
141
142> **目的**: §0.4.5 Write Operations の一貫性と完全性検証
143
1441. **Operation Mapping 完全性**:
145
146 ```python
147 # §0.5 API Contract の全ての Write API が §0.4.5 にマッピングされているか確認
148 api_endpoints = extract_api_endpoints(spec_content)
149 write_operations = extract_write_operations(spec_content)
150
151 write_apis = [api for api in api_endpoints if api['method'] in ['POST', 'PUT', 'PATCH', 'DELETE']]
152
153 for api in write_apis:
154 if not any(op['api'] == f"{api['method']} {api['path']}" for op in write_operations['operations']):
155 warnings.append(f"§0.4.5 欠落: {api['method']} {api['path']}")
156 ```
157
1582. **テーブル参照有効性**:
159
160 ```python
161 # §0.4.5 のテーブルが §0.4.2 に定義されているか確認
162 db_tables = [t['table'] for t in extract_db_tables(spec_content)]
163
164 for op in write_operations['operations']:
165 if op['table'] not in db_tables:
166 errors.append(f"§0.4.5 エラー: テーブル '{op['table']}'が §0.4.2 に定義されていない")
167 ```
168
1693. **トランザクション一貫性**:
170
171 ```python
172 # トランザクショングループの演算が Operation Mapping に存在するか確認
173 operation_names = [op['api'] for op in write_operations['operations']]
174
175 for tx in write_operations.get('transactions', []):
176 for op in tx['operations']:
177 if op not in operation_names:
178 errors.append(f"§0.4.5 エラー: トランザクション '{tx['name']}'の演算 '{op}'が Operation Mapping にない")
179 ```
180
1814. **べき等性戦略適合性**:
182
183 ```python
184 # 非べき等 API に対する戦略が定義されているか確認
185 non_idempotent_apis = write_operations.get('idempotency', {}).get('non_idempotent_apis', [])
186 post_apis = [op['api'] for op in write_operations['operations'] if op['api'].startswith('POST')]
187
188 for api in post_apis:
189 if api not in non_idempotent_apis:
190 warnings.append(f"§0.4.5 警告: POST API '{api}'が idempotency.non_idempotent_apis にない")
191 ```
192
1935. **監査ポリシー適合性** (Tier 1-2):
194
195 ```python
196 # Tier 1-2 機能で audit ポリシーが定義されているか確認
197 tier = extract_tier(spec_content)
198 audit = write_operations.get('audit', {})
199
200 if tier in [1, 2] and not audit.get('enabled'):
201 warnings.append("§0.4.5 警告: Tier 1-2 機能だが audit ポリシーが無効化されている")
202 ```
203
2046. **N/A 明示確認**:
205 ```python
206 # Write Operations セクションがないか空の場合 "N/A" 明示確認
207 if not write_operations and not re.search(r'0\.4\.5.*N/A', spec_content):
208 errors.append("§0.4.5 エラー: Write Operations セクションがなく N/A も明示されていない")
209 ```
210
211### Phase 6: 結果出力
212
213```markdown
214## SPEC 検証結果: SPEC-029-battle.md
215
216### JSON Schema 検証
217
218✅ §0.4.1 TypeScript Model: OK (1個モデル)
219✅ §0.4.2 DB Table: OK (1個テーブル)
220✅ §0.4.5 Write Operations: OK (3個演算)
221✅ §0.5 API Contract: OK
222
223### 構造検証
224
225✅ 必須セクション: すべて存在
226⚠️ AC 形式: 2個 AC に観測点欠落
227
228- FR-02901 AC2: 観測点コラムが空
229- FR-02902 AC1: 観測点コラムが空
230
231### ハイブリッド API 仕様検証 (v3.1)
232
233✅ Schema テーブル: 存在
234✅ Request Example: 存在
235✅ Response Example: 存在
236⚠️ Error Examples: FORBIDDEN エラー例示欠落
237
238### Write Operations 検証 (v3.4)
239
240✅ Operation Mapping: 全ての Write API マッピング済 (3/3)
241✅ テーブル参照: 全てのテーブルが §0.4.2 に定義されている
242✅ トランザクション一貫性: 全てのトランザクション演算が有効
243⚠️ べき等性: POST /battles に対する戦略未定義
244✅ 監査ポリシー: Tier 2 機能で audit 活性化済
245
246### SSOT パス検証 (v3.1)
247
248✅ src/app/api/battle/start/route.ts
249
250### 要約
251
252| 項目 | 結果 |
253| ---------------- | :---------------------: |
254| JSON Schema | ✅ |
255| 構造 | ⚠️ 2 warnings |
256| ハイブリッド API | ⚠️ 1 warning |
257| Write Operations | ⚠️ 1 warning |
258| SSOT パス | ✅ |
259| 全体 | **PASSED** (4 warnings) |
260```
261
262---
263
264## 検証規則詳細
265
266### 1. DB Table Schema 検証
267
268| フィールド | 必須 | 検証規則 |
269| -------------------- | :--: | ------------------------------ |
270| `table` | ✅ | snake_case パターン |
271| `columns` | ✅ | 1個以上 |
272| `columns[].name` | ✅ | snake_case パターン |
273| `columns[].type` | ✅ | 許可された PostgreSQL タイプ |
274| `columns[].nullable` | ⚪ | boolean (既定 true) |
275| `rls.policies` | ⚪ | SELECT/INSERT/UPDATE/DELETE 中 |
276
277### 2. API Endpoint Schema 検証
278
279| フィールド | 必須 | 検証規則 |
280| ---------- | :--: | ----------------------------------------- |
281| `id` | ✅ | `API-NNN-NN` パターン |
282| `method` | ✅ | GET/POST/PUT/PATCH/DELETE |
283| `path` | ✅ | `/`で開始 |
284| `errors` | ⚪ | http, code, condition, client_action 必須 |
285
286### 3. TypeScript Model Schema 検証
287
288| フィールド | 必須 | 検証規則 |
289| --------------- | :--: | ----------------------- |
290| `name` | ✅ | PascalCase パターン |
291| `fields` | ✅ | 1個以上 |
292| `fields[].name` | ✅ | camelCase パターン |
293| `fields[].type` | ✅ | TypeScript タイプ文字列 |
294
295### 4. Write Operations Schema 検証 (v3.4 新規)
296
297| フィールド | 必須 | 検証規則 |
298| --------------------------------- | :--: | -------------------------------------------- |
299| `feature_id` | ✅ | `NNN` 形式 (3桁数字) |
300| `operations` | ✅ | 1個以上 (Write 機能時) |
301| `operations[].api` | ✅ | `{METHOD} {path}` 形式 |
302| `operations[].action` | ✅ | INSERT/UPDATE/UPSERT/SOFT_DELETE/HARD_DELETE |
303| `operations[].table` | ✅ | snake_case, §0.4.2に定義されたテーブル |
304| `operations[].fields` | ✅ | 1個以上のフィールド名 |
305| `transactions` | ⚪ | 原子性必要時 |
306| `transactions[].name` | ✅ | 識別可能な名前 |
307| `transactions[].operations` | ✅ | operations[].apiとマッチング |
308| `transactions[].isolation_level` | ⚪ | READ_COMMITTED/REPEATABLE_READ/SERIALIZABLE |
309| `transactions[].rollback_scope` | ✅ | ALL/PARTIAL |
310| `idempotency` | ⚪ | 非べき等 API ある時推奨 |
311| `idempotency.non_idempotent_apis` | ✅\* | POST API リスト (\*非べき等時) |
312| `idempotency.strategy` | ✅\* | IDEMPOTENCY_KEY/UPSERT/NONE |
313| `audit` | ⚪ | Tier 1-2 推奨 |
314| `audit.enabled` | ✅ | boolean |
315| `audit.operations` | ✅ | CREATE/UPDATE/DELETE 中 |
316| `audit.retention_days` | ⚪ | 正の整数 |
317
318**Cross-Reference 検証**:
319
320| 検証項目 | 参照セクション | 検証ロジック |
321| -------------------------- | -------------- | ----------------------------------------------------- |
322| テーブル存在 | §0.4.2 | `operations[].table`が DB スキーマに定義されている |
323| フィールド存在 | §0.4.2 | `operations[].fields`が該当テーブルカラムに存在 |
324| API マッピング完全性 | §0.5 | 全ての Write API が operations にマッピングされている |
325| トランザクション演算有効性 | §0.4.5.1 | transactions[].operations が operations に存在 |
326
327---
328
329## 失敗ケース対処
330
331| ケース | 対処 |
332| ----------------------- | -------------------------------------------- |
333| **JSON パース失敗** | 該当ブロック位置とパースエラーメッセージ出力 |
334| **メタスキーマ未存在** | 警告出力、該当ブロックスキップ |
335| **SPEC ファイル未存在** | エラー出力、終了 |
336| **空セクション** | N/A 明示有無確認、未明示時警告 |
337
338---
339
340## CLI オプション
341
342| オプション | 説明 | 例示 |
343| ---------- | ------------------------------------- | ------------------------------ |
344| `--all` | 全ての SPEC 検証 | `/spec-validator --all` |
345| `--json` | JSON 形式出力 | `/spec-validator 029 --json` |
346| `--fix` | 自動修正可能な項目修正 (例: N/A 追加) | `/spec-validator 029 --fix` |
347| `--strict` | 警告も失敗で処理 | `/spec-validator 029 --strict` |
348
349---
350
351## Makefile 連動
352
353```makefile
354# SPEC 検証
355spec.validate:
356 @echo "SPEC 検証中..."
357 @python .claude/skills/spec-validator/scripts/validate.py $(SPEC)
358
359spec.validate-all:
360 @python .claude/skills/spec-validator/scripts/validate.py --all
361```
362
363**使用例示**:
364
365```bash
366make spec.validate SPEC=docs/features/029-battle/SPEC-029.md
367make spec.validate-all
368```
369
370---
371
372## 統合ワークフロー
373
374```
375[feature-spec-generator]
376 ↓
377 SPEC.md 生成
378 ↓
379[spec-validator] ←── 自動または手動実行
380 ↓
381 ┌────┴────┐
382 ↓ ↓
383 PASS FAIL
384 ↓ ↓
385[実装進行] [SPEC 修正 → 再検証]
386```
387
388---
389
390## 参照文書
391
392- [メタスキーマ: db_table](../../docs/_templates/schemas/db_table.schema.json)
393- [メタスキーマ: api_endpoint](../../docs/_templates/schemas/api_endpoint.schema.json)
394- [メタスキーマ: typescript_model](../../docs/_templates/schemas/typescript_model.schema.json)
395- [メタスキーマ: write_operations](../../docs/_templates/schemas/write_operations.schema.json) ← v3.4 新規
396- [SPEC テンプレート](../../docs/_templates/spec_template.md)
397- [SPEC セクションガイド](../feature-spec-generator/references/spec-sections.md)