spec-runner 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -9
- package/bin/spec-runner.js +112 -144
- package/package.json +1 -6
- package/templates/.spec-runner/hooks/pre-commit +25 -11
- package/templates/.spec-runner/project.json.example +10 -8
- package/templates/.spec-runner/scripts/branch/uc-next-start.sh +100 -9
- package/templates/.spec-runner/scripts/check.sh +396 -13
- package/templates/.spec-runner/scripts/spec-runner-core.sh +286 -157
- package/templates/.spec-runner/scripts/test/require-tests-green.sh +7 -63
- package/templates/.spec-runner/steps/steps.json +171 -0
- package/templates/.spec-runner/steps//343/201/235/343/201/256/344/273/226/344/275/234/346/245/255.md +25 -13
- package/templates/.spec-runner/steps//343/202/277/343/202/271/343/202/257/344/270/200/350/246/247.md +67 -104
- package/templates/.spec-runner/steps//343/203/201/343/202/247/343/203/203/343/202/257/343/203/252/343/202/271/343/203/210.md +52 -78
- package/templates/.spec-runner/steps//343/203/206/343/202/271/343/203/210/350/250/255/350/250/210.md +41 -34
- package/templates/.spec-runner/steps//343/203/211/343/203/241/343/202/244/343/203/263/350/250/255/350/250/210.md +34 -14
- package/templates/.spec-runner/steps//344/273/225/346/247/230/347/255/226/345/256/232.md +161 -207
- package/templates/.spec-runner/steps//345/210/206/346/236/220.md +65 -127
- package/templates/.spec-runner/steps//345/256/237/350/243/205.md +67 -79
- package/templates/.spec-runner/steps//345/256/237/350/243/205/350/250/210/347/224/273.md +56 -56
- package/templates/.spec-runner/steps//346/206/262/347/253/240.md +67 -46
- package/templates/.spec-runner/steps//346/233/226/346/230/247/343/201/225/350/247/243/346/266/210.md +88 -148
- package/templates/.spec-runner/templates/UC-N-MMDD-/345/210/244/346/226/255/350/250/230/351/214/262/343/203/206/343/203/263/343/203/227/343/203/254.md +33 -0
- package/templates/.spec-runner/templates/{UC-NNN- → UC-N-}/343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/345/220/215.md +1 -3
- package/templates/.spec-runner/templates/grade-history.json +5 -0
- package/templates/.spec-runner/templates/phase-locks.json +29 -0
- package/templates/.spec-runner/templates//343/203/211/343/203/241/343/202/244/343/203/263/343/203/242/343/203/207/343/203/253.md +21 -0
- package/templates/.spec-runner/templates//343/203/246/343/203/223/343/202/255/343/202/277/343/202/271/350/250/200/350/252/236/350/276/236/346/233/270.md +16 -0
- package/templates/.spec-runner/templates//346/206/262/347/253/240.md +51 -0
- package/templates/.spec-runner/templates//351/233/206/347/264/204.md +46 -0
- package/templates/.spec-runner/scripts/branch/create-uc-branch.sh +0 -105
- package/templates/.spec-runner/scripts/branch/uc-next-id.sh +0 -17
- package/templates/.spec-runner/scripts/check/drift.sh +0 -66
- package/templates/.spec-runner/scripts/check/health.sh +0 -103
- package/templates/.spec-runner/scripts/check/naming.sh +0 -51
- package/templates/.spec-runner/scripts/check/schema-drift.sh +0 -74
- package/templates/.spec-runner/scripts/check/schema-sync.sh +0 -153
- package/templates/.spec-runner/scripts/lib/uc-context.sh +0 -75
- package/templates/.spec-runner/scripts/openapi/openapi-generate.sh +0 -207
- package/templates/.spec-runner/scripts/setup/init-project.sh +0 -152
|
@@ -1,167 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
step_id: analyze
|
|
3
|
+
phase: null
|
|
4
|
+
readonly: true
|
|
5
|
+
note: 任意フェーズで実行可能(読み取り専用)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 分析(品質フロー)
|
|
1
9
|
|
|
2
|
-
|
|
10
|
+
**やること**: 任意フェーズで、**読み取り専用**で UC 仕様・憲章の一貫性・矛盾・カバレッジを分析し、構造化レポートを出力する(ファイルは変更しない)。
|
|
11
|
+
|
|
12
|
+
| 項目 | 内容 |
|
|
13
|
+
|------|------|
|
|
14
|
+
| **対象** | UC 仕様(## 実装方針・## タスク含む)、`docs/01_憲章/憲章.md` |
|
|
15
|
+
| **憲章** | **非交渉**。憲章矛盾は **CRITICAL**。原則の無視・勝手な解釈変更は禁止。原則変更は憲章更新手続きで |
|
|
3
16
|
|
|
4
17
|
## ユーザー入力
|
|
5
18
|
|
|
19
|
+
`$ARGUMENTS`(空でなければ必ず考慮)。文末「文脈」にも。
|
|
20
|
+
|
|
6
21
|
```text
|
|
7
22
|
$ARGUMENTS
|
|
8
23
|
```
|
|
9
24
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
## 目的
|
|
13
|
-
|
|
14
|
-
実装前に、**UC 仕様書**(一番下の ## 実装方針・## タスクを含む)の不整合・重複・曖昧さ・不足を特定する。UC 仕様書と憲章を対象に分析する。
|
|
15
|
-
|
|
16
|
-
## 制約
|
|
17
|
-
|
|
18
|
-
**読み取り専用**: ファイルを変更しない。構造化された分析レポートを出力し、必要に応じて修正案を提示する(編集はユーザーが明示的に承認した場合のみ手動で実行)。
|
|
19
|
-
|
|
20
|
-
**憲章の優先**: プロジェクト憲章(`docs/01_憲章/憲章.md`)は分析範囲内で**非交渉**。憲章との矛盾は自動的に CRITICAL とし、仕様・計画・タスクの修正を求める(原則の解釈変更や無視は禁止)。原則自体の変更は、別途の憲章更新手続きで行う。
|
|
21
|
-
|
|
22
|
-
## 実行手順
|
|
23
|
-
|
|
24
|
-
### 1. 分析コンテキストの初期化
|
|
25
|
-
|
|
26
|
-
リポジトリルートから `.spec-runner/scripts/lib/uc-context.sh --json` を 1 回実行する。現在ブランチは feature/UC-NNN-xxx。JSON から絶対パスを導出する:
|
|
27
|
-
|
|
28
|
-
- SPEC = FEATURE_SPEC(UC 仕様書。**必須**)
|
|
29
|
-
実装方針・タスクは UC 仕様書(FEATURE_SPEC)の「## 実装方針」「## タスク」に記載されている。
|
|
30
|
-
|
|
31
|
-
FEATURE_SPEC が無ければエラーで中止。UC 仕様書の一番下に実装方針・タスクの見出しがあることが健全性確認で検証される。
|
|
32
|
-
引数にシングルクォートを含む場合はエスケープ(例: 'I'\''m Groot')またはダブルクォートを使う。
|
|
33
|
-
|
|
34
|
-
### 2. 成果物の読み込み(段階的開示)
|
|
35
|
-
|
|
36
|
-
各成果物から必要最小限の文脈だけを読み込む:
|
|
25
|
+
## 実行フロー
|
|
37
26
|
|
|
38
|
-
|
|
39
|
-
- 概要/コンテキスト
|
|
40
|
-
- 機能要件
|
|
41
|
-
- 非機能要件
|
|
42
|
-
- ユーザーストーリー
|
|
43
|
-
- エッジケース(あれば)
|
|
27
|
+
### 1. コンテキスト初期化
|
|
44
28
|
|
|
45
|
-
|
|
46
|
-
|
|
29
|
+
`.spec-runner/spec-runner.sh 次のステップ --json` を 1 回。`feature/UC-N-xxx`。
|
|
30
|
+
**SPEC** = FEATURE_SPEC(**必須**)。実装方針・タスクは UC の「## 実装方針」「## タスク」。
|
|
31
|
+
無ければエラー中止。引数のシングルクォートはエスケープ。
|
|
47
32
|
|
|
48
|
-
|
|
49
|
-
- タスク ID、説明、フェーズ分け、並列マーカー [P]、参照ファイルパス
|
|
33
|
+
### 2. 段階的読み込み
|
|
50
34
|
|
|
51
|
-
|
|
35
|
+
| ソース | 読む範囲 |
|
|
36
|
+
|--------|----------|
|
|
37
|
+
| UC 仕様 | 概要、機能/非機能要件、ユーザーストーリー、エッジケース |
|
|
38
|
+
| ## 実装方針 | アーキテクチャ、データ参照、フェーズ、技術制約 |
|
|
39
|
+
| ## タスク | タスク ID、説明、フェーズ、[P]、参照パス |
|
|
40
|
+
| 憲章 | 原則検証用に全文 |
|
|
52
41
|
|
|
53
|
-
|
|
54
|
-
- `docs/01_憲章/憲章.md` を原則検証用に読み込む
|
|
42
|
+
### 3. 内部モデル(出力に生データを含めない)
|
|
55
43
|
|
|
56
|
-
|
|
44
|
+
- 要件一覧(安定キー付与)
|
|
45
|
+
- ユーザーストーリー/アクション一覧
|
|
46
|
+
- タスク→要件/ストーリーのマッピング
|
|
47
|
+
- 憲章ルールセット(MUST/SHOULD)
|
|
57
48
|
|
|
58
|
-
|
|
49
|
+
### 4. 検出パス(所見は合計 **50 件まで**、残りはオーバーフロー要約)
|
|
59
50
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
51
|
+
| ID | 内容 |
|
|
52
|
+
|----|------|
|
|
53
|
+
| A | 重複(ほぼ同一要件、統合候補) |
|
|
54
|
+
| B | 曖昧さ(測定なし形容詞、TODO/TKTK/???/placeholder) |
|
|
55
|
+
| C | 仕様不足(動詞のみ、受入なしストーリー、未定義ファイル参照タスク) |
|
|
56
|
+
| D | 憲章整合(MUST 違反、ゲート欠落) |
|
|
57
|
+
| E | カバレッジ(要件にタスク 0、孤児タスク、非機能のタスク漏れ) |
|
|
58
|
+
| F | 不整合(用語ずれ、エンティティの有無矛盾、タスク順序矛盾、要件矛盾) |
|
|
64
59
|
|
|
65
|
-
###
|
|
60
|
+
### 5. 重要度
|
|
66
61
|
|
|
67
|
-
|
|
62
|
+
| レベル | 目安 |
|
|
63
|
+
|--------|------|
|
|
64
|
+
| CRITICAL | 憲章 MUST 違反、コア成果物欠落、基本機能を阻害するカバレッジゼロ |
|
|
65
|
+
| HIGH | 重複・矛盾要件、曖昧なセキュリティ/性能、テスト不可能な受入 |
|
|
66
|
+
| MEDIUM | 用語ずれ、非機能のタスク不足、エッジ仕様不足 |
|
|
67
|
+
| LOW | 文体、軽微な重複 |
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
- ほぼ同一の要件を特定
|
|
71
|
-
- 統合のため品質の低い表現に印を付ける
|
|
72
|
-
|
|
73
|
-
#### B. 曖昧さ検出
|
|
74
|
-
- 測定基準のない曖昧な形容詞(速い・スケーラブル・安全・直感的・堅牢)にフラグ
|
|
75
|
-
- 未解決のプレースホルダ(TODO, TKTK, ???, `<placeholder>` 等)にフラグ
|
|
76
|
-
|
|
77
|
-
#### C. 仕様不足
|
|
78
|
-
- 動詞はあるが対象や測定可能な結果がない要件
|
|
79
|
-
- 受入基準との対応がないユーザーストーリー
|
|
80
|
-
- 仕様/計画で定義されていないファイル・コンポーネントを参照するタスク
|
|
81
|
-
|
|
82
|
-
#### D. 憲章との整合
|
|
83
|
-
- MUST 原則に反する要件や計画要素
|
|
84
|
-
- 憲章で求められているセクションや品質ゲートの欠落
|
|
85
|
-
|
|
86
|
-
#### E. カバレッジギャップ
|
|
87
|
-
- 対応タスクが 0 の要件
|
|
88
|
-
- 対応する要件/ストーリーがないタスク
|
|
89
|
-
- タスクに反映されていない非機能要件(性能・セキュリティなど)
|
|
90
|
-
|
|
91
|
-
#### F. 不整合
|
|
92
|
-
- 用語のずれ(同一概念がファイル間で異なる名前)
|
|
93
|
-
- 計画では参照されているが仕様にないデータエンティティ(または逆)
|
|
94
|
-
- タスク順序の矛盾(例: 基盤セットアップより前に統合タスクがあり、依存の注記がない)
|
|
95
|
-
- 矛盾する要件(例: 一方は Next.js、他方は Vue を指定)
|
|
96
|
-
|
|
97
|
-
### 5. 重要度の付与
|
|
98
|
-
|
|
99
|
-
所見の優先付けに次のヒューリスティックを使う:
|
|
100
|
-
|
|
101
|
-
- **CRITICAL**: 憲章の MUST 違反、コア仕様成果物の欠落、基本機能を阻害するカバレッジゼロの要件
|
|
102
|
-
- **HIGH**: 重複・矛盾する要件、曖昧なセキュリティ/性能属性、テスト不可能な受入基準
|
|
103
|
-
- **MEDIUM**: 用語のずれ、非機能のタスクカバレッジ不足、仕様不足のエッジケース
|
|
104
|
-
- **LOW**: 文体・表現の改善、実行順序に影響しない軽微な重複
|
|
105
|
-
|
|
106
|
-
### 6. 簡潔な分析レポートの出力
|
|
107
|
-
|
|
108
|
-
マークダウンでレポートを出力する(ファイルは書かない)。構成:
|
|
69
|
+
### 6. レポート出力(ファイルに書かない)
|
|
109
70
|
|
|
71
|
+
```markdown
|
|
110
72
|
## 仕様分析レポート
|
|
111
73
|
|
|
112
74
|
| ID | カテゴリ | 重要度 | 場所 | 概要 | 推奨対応 |
|
|
113
75
|
|----|----------|--------|------|------|----------|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
(所見ごとに 1 行。ID はカテゴリ頭文字付きの安定 ID。)
|
|
117
|
-
|
|
118
|
-
**カバレッジ概要表:**
|
|
119
|
-
|
|
120
|
-
| 要件キー | タスクあり | タスクID | 注記 |
|
|
121
|
-
|----------|------------|----------|------|
|
|
76
|
+
```
|
|
122
77
|
|
|
123
|
-
|
|
78
|
+
所見 1 行 1 件。ID はカテゴリ頭文字+連番。
|
|
124
79
|
|
|
125
|
-
|
|
80
|
+
**カバレッジ概要表** | 要件キー | タスクあり | タスクID | 注記 |
|
|
126
81
|
|
|
127
|
-
|
|
128
|
-
- 要件総数
|
|
129
|
-
- タスク総数
|
|
130
|
-
- カバレッジ %(タスクが 1 本以上ある要件の割合)
|
|
131
|
-
- 曖昧さの件数
|
|
132
|
-
- 重複の件数
|
|
133
|
-
- CRITICAL の件数
|
|
82
|
+
**憲章整合性の問題** / **未マッピングのタスク**(あれば)
|
|
134
83
|
|
|
135
|
-
|
|
84
|
+
**メトリクス**: 要件数、タスク数、カバレッジ%、曖昧さ件数、重複件数、CRITICAL 件数
|
|
136
85
|
|
|
137
|
-
|
|
86
|
+
### 7. 次のアクション
|
|
138
87
|
|
|
139
|
-
- CRITICAL
|
|
140
|
-
- LOW/MEDIUM
|
|
141
|
-
-
|
|
88
|
+
- CRITICAL あり → 「実装」の前に解消推奨
|
|
89
|
+
- LOW/MEDIUM のみ → 改善案のうえ進行可
|
|
90
|
+
- 次コマンドを明示(仕様修正・実装方針追記・実装計画調整等)
|
|
142
91
|
|
|
143
|
-
### 8.
|
|
92
|
+
### 8. 修正案オファー
|
|
144
93
|
|
|
145
|
-
|
|
94
|
+
「上位 N 件について具体的な修正案を出しましょうか?」と尋ねる(自動適用しない)。
|
|
146
95
|
|
|
147
96
|
## 運用原則
|
|
148
97
|
|
|
149
|
-
|
|
150
|
-
- **最小限の高シグナルトークン**: 実行可能な所見に集中し、網羅的な文書化はしない
|
|
151
|
-
- **段階的開示**: 成果物を少しずつ読み込み、全内容を分析に流し込まない
|
|
152
|
-
- **トークン効率**: 所見表は 50 行まで、オーバーフローは要約
|
|
153
|
-
- **再現性**: 変更なしで再実行すると、同じ ID と件数になる
|
|
154
|
-
|
|
155
|
-
### 分析ガイドライン
|
|
156
|
-
- **ファイルを変更しない**(読み取り専用)
|
|
157
|
-
- **存在しないセクションを捏造しない**(ない場合はその旨報告)
|
|
158
|
-
- **憲章違反を最優先**(常に CRITICAL)
|
|
159
|
-
- **ルールより具体例**(汎用パターンではなく実例を引用)
|
|
160
|
-
- **所見ゼロのときも丁寧に**(カバレッジ統計付きの成功レポートを出す)
|
|
98
|
+
- 高シグナル・最小トークン、段階的開示、所見表 50 行、再実行で同じ ID・件数
|
|
161
99
|
|
|
162
100
|
## 文脈
|
|
163
101
|
|
|
164
|
-
|
|
102
|
+
`$ARGUMENTS`
|
|
165
103
|
|
|
166
104
|
---
|
|
167
|
-
|
|
105
|
+
**次**: 完了後、次のステップへ進む。
|
|
@@ -1,91 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
step_id: implement
|
|
3
|
+
phase: 6
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 実装(Phase 6: IMPLEMENTATION)
|
|
1
7
|
|
|
2
|
-
|
|
8
|
+
**やること**: Phase 5 の **PENDING テストをグリーン**にする。**完了**はコードだけでなく **起動確認**(dev で `/` と主要画面)と **可能なら E2E 1 本グリーン**。Phase 5 レビュー後は AGENTS.md / CLAUDE.md の更新を検討。
|
|
3
9
|
|
|
4
|
-
|
|
10
|
+
| 項目 | 内容 |
|
|
11
|
+
|------|------|
|
|
12
|
+
| **UC 配置** | カテゴリ内 **UC-N-xxx.md 1 本**。**## 実装方針**・**## タスク**(または **## タスク一覧**)は **一番下** |
|
|
13
|
+
| **検証** | 完了は check.sh。テストは **`require-tests-green.sh`**(`project.json` の `test_command.run`)が **exit 0** まで「完了」報告しない |
|
|
5
14
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
15
|
+
## フォルダ構造
|
|
16
|
+
|
|
17
|
+
| 種別 | ルール |
|
|
18
|
+
|------|--------|
|
|
19
|
+
| docs | リポジトリルート直下のみ |
|
|
20
|
+
| アプリコード | **src/** 下(domain / infrastructure / application / app)。docs 隣に domain を置かない |
|
|
21
|
+
| paths 例 | `"@/*": ["./src/*"]` |
|
|
9
22
|
|
|
10
23
|
## ユーザー入力
|
|
11
24
|
|
|
25
|
+
`$ARGUMENTS`(空でなければ必ず考慮)
|
|
26
|
+
|
|
12
27
|
```text
|
|
13
28
|
$ARGUMENTS
|
|
14
29
|
```
|
|
15
30
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
## 実行前チェック
|
|
19
|
-
|
|
20
|
-
**拡張フック(実装前)**:
|
|
21
|
-
- プロジェクトルートに `.spec-runner/extensions.yml` があるか確認する(任意。なければスキップ)
|
|
22
|
-
- あれば `hooks.before_implement` のエントリを読む。YAML が不正なら静かにスキップ
|
|
23
|
-
- `enabled: true` のフックのみ。`condition` の解釈・評価は行わない
|
|
24
|
-
- 任意フック: 拡張名・コマンド・説明・プロンプトを表示。必須フック: コマンドを実行し結果を待ってから概要に進む
|
|
25
|
-
- フックがなければ静かにスキップする
|
|
26
|
-
|
|
27
|
-
## 概要
|
|
28
|
-
|
|
29
|
-
1. リポジトリルートから `.spec-runner/scripts/lib/uc-context.sh --json` を実行する。現在ブランチは feature/UC-NNN-xxx。JSON から FEATURE_DIR(カテゴリフォルダ)、FEATURE_SPEC をパースする。**カテゴリ内には UC-NNN-xxx.md を 1 本置く。実装方針・タスクは UC 仕様書の一番下(## 実装方針、## タスク)に記載する。**
|
|
30
|
-
|
|
31
|
-
2. **チェックリストの状態確認**(FEATURE_DIR/checklists/ が存在する場合のみ):
|
|
32
|
-
- checklists/ 内の全ファイルをスキャンする
|
|
33
|
-
- 各チェックリストで、`- [ ]` / `- [X]` / `- [x]` にマッチする行から総数・完了数・未完了数を数える
|
|
34
|
-
- 状態表を作成する(チェックリスト名 | 総数 | 完了 | 未完了 | 状態)
|
|
35
|
-
- **全チェックリストで未完了 0 → PASS**、そうでなければ **FAIL**
|
|
36
|
-
- **未完了がある場合**: 表を表示し「チェックリストに未完了があります。このまま実装を進めますか?(yes/no)」で停止し、ユーザー応答を待つ。no/待つ/ストップなら停止。yes/進める/続行ならステップ 3 へ
|
|
37
|
-
- **すべて完了している場合**: 表で全 PASS を表示し、自動でステップ 3 へ
|
|
38
|
-
|
|
39
|
-
3. **実装文脈の読み込みと分析**:
|
|
40
|
-
- **必須**: FEATURE_SPEC(UC 仕様書)。ここから受入条件・フロー・成果物を読み取る。
|
|
41
|
-
- **実装方針・タスクは UC の .md の一番下に書く**: 「## 実装方針」「## タスク」(または「## タスク一覧」)の見出しで記載する。
|
|
42
|
-
|
|
43
|
-
4. **プロジェクトセットアップの確認**:
|
|
44
|
-
- **テストコマンド**: `.spec-runner/project.json` の `test_command.run` が無い、またはプロジェクトに合っていない場合は作成・更新する。「実装完了の必須条件」として実行するコマンドを 1 本で書く(例: `npm test`、`docker compose run --rm app npm test`、`poetry run pytest`)。AI は package.json / pyproject.toml / docker-compose.yml 等から推奨を決めてよい。設定は project.json に集約。
|
|
45
|
-
- リポジトリが git かは `git rev-parse --git-dir 2>/dev/null` で判定。git なら .gitignore を確認・作成する
|
|
46
|
-
- Dockerfile* または UC の「## 実装方針」に Docker の記述があれば .dockerignore、.eslintrc* があれば .eslintignore、eslint.config.* なら `ignores` を確認、.prettierrc* なら .prettierignore、.npmrc や package.json があれば(公開する場合) .npmignore、*.tf があれば .terraformignore、Helm があれば .helmignore を確認・作成する
|
|
47
|
-
- 既存の ignore ファイルには必須パターンが含まれているか確認し、不足している重要なパターンのみ追加する。存在しない場合は検出した技術に合わせたパターン一式で作成する
|
|
48
|
-
- **技術別の共通パターン**: UC 仕様書の「## 実装方針」から技術スタックを読む。無ければプロジェクトの package.json / pyproject.toml 等から判定。Node/TS は node_modules/, dist/, .env*。Python は __pycache__/, .venv/。その他も同様。
|
|
49
|
-
- **ツール別**: Docker・ESLint・Prettier・Terraform・Kubernetes 等の一般的な除外パターンを追加する
|
|
50
|
-
|
|
51
|
-
5. **実装すべき内容の整理**: UC 仕様書の「## タスク」または「## タスク一覧」からタスクを解析。受入条件・基本フロー・代替フローと合わせて実装すべき項目を列挙する。
|
|
52
|
-
|
|
53
|
-
6. **実装の実行**:
|
|
54
|
-
- UC の「## タスク」に従い、タスクの順序で実行する。
|
|
55
|
-
- **UC のみの場合**: 仕様書の受入条件・フローに沿って実装する。テスト → コア実装 → 統合の順を推奨。
|
|
56
|
-
- 同一ファイルを触る作業は順次実行。各単位完了を確認してから次に進む。
|
|
57
|
-
|
|
58
|
-
7. **実装のルール**:
|
|
59
|
-
- まずセットアップ: プロジェクト構造・依存・設定の初期化
|
|
60
|
-
- コードより先にテスト: 契約・エンティティ・統合シナリオのテストを書く場合は先に実行
|
|
61
|
-
- コア開発: モデル・サービス・CLI コマンド・エンドポイントの実装
|
|
62
|
-
- 統合: DB 接続・ミドルウェア・ログ・外部サービス
|
|
63
|
-
- 仕上げと検証: ユニットテスト・性能最適化・ドキュメント
|
|
64
|
-
|
|
65
|
-
8. **進捗とエラー処理**:
|
|
66
|
-
- タスク完了ごとに進捗を報告する
|
|
67
|
-
- 非並列タスクが失敗したら実行を停止する
|
|
68
|
-
- [P] タスクは成功したものは続行し、失敗したものを報告する
|
|
69
|
-
- デバッグに役立つ文脈付きの明確なエラーメッセージを出し、続行できない場合は次のステップを提案する
|
|
70
|
-
- UC の「## タスク」内で完了した項目は [x] にマークする。進捗を簡潔に報告する。
|
|
71
|
-
|
|
72
|
-
9. **完了検証**:
|
|
73
|
-
- 必須タスクがすべて完了していることを確認する
|
|
74
|
-
- 実装した機能が元の仕様と一致していることを確認する
|
|
75
|
-
- **テストグリーン(必須・強制)**: 完了を報告する前に、必ず **`.spec-runner/scripts/test/require-tests-green.sh`** を実行する。このスクリプトは **`.spec-runner/project.json` の `test_command.run`**(未設定時は package.json / pyproject.toml 等から検出)を実行し、1 件でも失敗すると終了コード 1 を返す。**終了コードが 0 でない場合は「実装完了」とみなさず**、テストを修正してから再度スクリプトを実行する。0 を返すまで完了報告をしてはならない。Docker や Python などは **初期化**(init-project.sh)で `project.json` の `test_command.run` を設定する。
|
|
76
|
-
- 技術計画に従っていることを確認する
|
|
77
|
-
- **起動確認(必須)**: アプリが実際に動くことを確認する。
|
|
78
|
-
- プロジェクトの dev コマンド(例: `npm run dev`)で起動し、ルート(`/`)および当該 UC の主要画面(例: `/dashboard`、該当 API)が 200 または期待どおり応答することを確認する。
|
|
79
|
-
- 必要なら `.env.example` を `.env` にコピーし DATABASE_URL 等を設定する。README や .env.example に「起動前に .env を作成すること」を記載する。
|
|
80
|
-
- 起動できない・404 や 500 が返る場合は「完了」とせず、設定・ルーティング・環境を修正してから再度確認する。
|
|
81
|
-
- **E2E(推奨)**: `tests/e2e/` に当該 UC の E2E がある場合、少なくとも 1 本(ハッピーパス)をグリーンにしてから「実装完了」とする。DB とアプリ起動が必要な場合は手動で実行して確認する。E2E が未作成の場合はユニットテストと起動確認で完了可。
|
|
82
|
-
- 完了した作業の概要とともに最終状態を報告する
|
|
83
|
-
|
|
84
|
-
注意: **実装方針・タスクは UC 仕様書の一番下に必須で記載する**(## 実装方針、## タスク)。完了は健全性確認(check.sh)で検証される。
|
|
85
|
-
|
|
86
|
-
10. **拡張フック(完了検証後)**: `.spec-runner/extensions.yml` の `hooks.after_implement` があれば確認する(なければスキップ)。上記と同様のルールで任意/必須フックを表示または実行する。
|
|
31
|
+
## 実行前チェック: hooks.before_implement
|
|
87
32
|
|
|
88
|
-
|
|
89
|
-
|
|
33
|
+
- `extensions.yml` の `hooks.before_implement`(無ければスキップ、YAML 不正もスキップ)
|
|
34
|
+
- `enabled: true` のみ。condition は評価しない
|
|
35
|
+
- 任意: 表示のみ。必須: 実行して待つ
|
|
36
|
+
|
|
37
|
+
## 実行フロー
|
|
38
|
+
|
|
39
|
+
1. **JSON**
|
|
40
|
+
`次のステップ --json`。`feature_dir`・`feature_spec`。`feature/UC-N-xxx`。
|
|
41
|
+
|
|
42
|
+
2. **チェックリスト(FEATURE_DIR/checklists/ がある場合)**
|
|
43
|
+
`- [ ]` / `- [x]` を数え表化。未完了 0 → PASS。未完了あり → 「このまま進めますか? yes/no」で待つ。no で停止。yes で続行。
|
|
44
|
+
|
|
45
|
+
3. **読込**
|
|
46
|
+
FEATURE_SPEC **必須**。実装方針・タスクは UC 一番下。
|
|
90
47
|
|
|
91
|
-
|
|
48
|
+
4. **プロジェクトセットアップ確認**
|
|
49
|
+
- **test_command.run** が無い/不適なら `project.json` を更新(1 本のコマンド)
|
|
50
|
+
- git なら .gitignore。Docker/ESLint/Prettier/Terraform/Helm 等に応じ ignore を確認・不足のみ追加
|
|
51
|
+
- 技術スタックは実装方針または package.json 等から
|
|
52
|
+
|
|
53
|
+
5. **実装範囲**
|
|
54
|
+
## タスク と受入・フローから項目列挙。
|
|
55
|
+
|
|
56
|
+
6. **実行**
|
|
57
|
+
タスク順。UC のみなら受入・フローに沿い **テスト→コア→統合** 推奨。同一ファイルは順次。
|
|
58
|
+
|
|
59
|
+
7. **ルールの目安**
|
|
60
|
+
セットアップ →(必要なら)テスト先行 → モデル・サービス・EP → 統合 → 仕上げ
|
|
61
|
+
|
|
62
|
+
8. **進捗・エラー**
|
|
63
|
+
タスクごと報告。非並列失敗で停止。[P] は成功分続行。UC タスクの完了は `[x]`。
|
|
64
|
+
|
|
65
|
+
9. **完了検証**
|
|
66
|
+
- 必須タスク完了・仕様一致
|
|
67
|
+
- **`require-tests-green.sh`** が 0 になるまで完了報告禁止
|
|
68
|
+
- **起動確認(必須)**: dev で `/` と当該 UC の主要画面が 200 等。不可なら修正まで
|
|
69
|
+
- **E2E(推奨)**: `tests/e2e/` に該当 UC があればハッピーパス 1 本グリーンを目標。無ければユニット+起動で可
|
|
70
|
+
|
|
71
|
+
10. **hooks.after_implement**
|
|
72
|
+
あれば同様に表示/実行。
|
|
73
|
+
|
|
74
|
+
## 次の UC
|
|
75
|
+
|
|
76
|
+
`.spec-runner/scripts/branch/uc-next-start.sh` — 実行前に確認。`--yes` で確認省略。main に切り替えて次ブランチ作成。
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
**次**: 完了後、次のステップへ。次 UC は上記スクリプト。
|
|
@@ -1,60 +1,72 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
---
|
|
2
|
+
step_id: implementation_plan
|
|
3
|
+
phase: "2,4"
|
|
4
|
+
note: アーキテクチャ + Grade A インフラ
|
|
5
|
+
---
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
- **Phase 4(Grade A・インフラ詳細設計)**: **`docs/04_インフラ設計/`** が存在しない場合、このフェーズで新規作成し、クラウド構成・ネットワーク・**schema.dbml**(DB 構造の単一ソース)等を配置する。ルートの **`migrations/`** は Atlas を使う場合のみ必要に応じて作成する(必須ではない)。
|
|
8
|
-
- **API を公開する場合**: **`docs/06_API仕様/`** が存在しない場合、このフェーズ(または API 仕様を初めて書くフェーズ)で新規作成し、openapi.yaml を配置する。Gate 3 で参照される。
|
|
7
|
+
# 実装計画(Phase 2 アーキテクチャ / Phase 4 インフラ Grade A)
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
**やること**: Phase 2 では `docs/04_アーキテクチャ/` に設計を置く。Phase 4(Grade A)または UC ブランチでは **実装方針を UC の .md の一番下(## 実装方針)** に書き、計画ワークフローを回す。
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- `--list`: 登録済みターゲット一覧。Generator 一覧: https://openapi-generator.tech/docs/generators/
|
|
11
|
+
| 項目 | 内容 |
|
|
12
|
+
|------|------|
|
|
13
|
+
| **docs/02** | カテゴリフォルダ内に **UC-N-xxx.md を 1 本ずつ**。実装方針・タスクは **各 UC .md の一番下** |
|
|
14
|
+
| **動的設定** | 必須ドキュメント・命名規則は **`.spec-runner/project.json` を AI が直接編集** |
|
|
15
|
+
| **Phase 4 Grade A** | `docs/05_インフラ設計`(schema.dbml 等)も対象。`migrations/` は Atlas 利用時のみ任意 |
|
|
18
16
|
|
|
19
17
|
## ユーザー入力
|
|
20
18
|
|
|
19
|
+
`$ARGUMENTS`(空でなければ必ず考慮)
|
|
20
|
+
|
|
21
21
|
```text
|
|
22
22
|
$ARGUMENTS
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
## フォルダの作成
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
| フェーズ | パス | 内容の例 |
|
|
28
|
+
|----------|------|----------|
|
|
29
|
+
| Phase 2 | `docs/04_アーキテクチャ/` | パターン選定・インフラ方針・命名・設計判断(`MMDD-題名.md`。年はフォルダ分け可) |
|
|
30
|
+
| Phase 4(Grade A) | `docs/05_インフラ設計/` | クラウド・ネットワーク・**schema.dbml**(DB の単一ソース) |
|
|
31
|
+
| API 公開時 | `docs/06_API仕様/` | openapi.yaml(Gate 3 で参照) |
|
|
28
32
|
|
|
29
|
-
|
|
33
|
+
## API 仕様(openapi.yaml)
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
- **単一ソース**: `docs/06_API仕様/openapi.yaml`。型・クライアントはここから生成すると設計と一致。`tags` で分類、`$ref` 分割可。
|
|
36
|
+
- **生成手段**: プロジェクト標準(openapi-generator / openapi-typescript / orval 等)。spec-runner は固定しない。
|
|
32
37
|
|
|
33
|
-
|
|
38
|
+
## Phase 2(main/develop、UC ブランチにいない場合)
|
|
34
39
|
|
|
35
|
-
|
|
40
|
+
`docs/01_憲章/憲章.md` と `docs/03_ドメイン設計/` を読み、**`docs/04_アーキテクチャ/`** にパターン選定・インフラ方針・命名・設計判断記録を作成。フォルダが無ければこのフェーズで作成。
|
|
36
41
|
|
|
37
|
-
|
|
38
|
-
- 技術コンテキストを埋める(不明点は "要確認" とマーク)
|
|
39
|
-
- 憲章から憲章チェックセクションを埋める
|
|
40
|
-
- ゲートを評価する(違反が正当化されない場合は ERROR)
|
|
41
|
-
- **ファイル構成**: docs はルート直下。アプリケーションコード(app / domain / application / infrastructure)は **src/** に配置する(憲章・アーキテクチャで既に決まっていればそのまま)。
|
|
42
|
-
- Phase 0: research.md は任意(要確認がある場合のみ)。
|
|
43
|
-
- Phase 1: **data-model.md / contracts/ は任意**。データモデルは 集約.md と schema.dbml・コードで正とする。API 契約は openapi.yaml でよい。必要なら FEATURE_DIR に data-model.md / contracts/ を追加してよい。
|
|
44
|
-
- 設計後に憲章チェックを再評価する
|
|
42
|
+
## Phase 4 または UC 上での計画(実装方針セクション)
|
|
45
43
|
|
|
46
|
-
4
|
|
44
|
+
以下 1–4 を実行。
|
|
47
45
|
|
|
48
|
-
|
|
46
|
+
1. **セットアップ**
|
|
47
|
+
`.spec-runner/spec-runner.sh 次のステップ --json`。`feature_spec`・`feature_dir`。UC ブランチ上であること。
|
|
49
48
|
|
|
50
|
-
|
|
49
|
+
2. **文脈**
|
|
50
|
+
FEATURE_SPEC(**必須**)、`docs/01_憲章/憲章.md`、UC の「## 実装方針」。UC 1 本で計画。
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
52
|
+
3. **計画ワークフロー**
|
|
53
|
+
- 技術コンテキスト(不明は「要確認」)
|
|
54
|
+
- 憲章チェックを憲章から埋める
|
|
55
|
+
- ゲート評価(正当化されない違反は ERROR)
|
|
56
|
+
- **ファイル構成**: docs はルート直下。アプリコードは **src/**(憲章・アーキで決まっていれば従う)
|
|
57
|
+
- Phase 0: research.md は任意(要確認がある場合のみ)
|
|
58
|
+
- Phase 1: **data-model.md / contracts/ は任意**。正は 集約.md・schema.dbml・コード。API は openapi.yaml。必要なら FEATURE_DIR や docs/04 に追加可
|
|
59
|
+
- 設計後に憲章チェックを再評価
|
|
56
60
|
|
|
57
|
-
|
|
61
|
+
4. **停止と報告**
|
|
62
|
+
コマンドは Phase 2 計画の後で終了。ブランチ・FEATURE_SPEC・生成物を報告。
|
|
63
|
+
|
|
64
|
+
## サブフェーズ詳細
|
|
65
|
+
|
|
66
|
+
### Phase 0: 概要とリサーチ
|
|
67
|
+
|
|
68
|
+
1. 技術コンテキストの「要確認」→ リサーチタスク、依存→ベストプラクティス、連携→パターンタスク
|
|
69
|
+
2. リサーチタスク例:
|
|
58
70
|
|
|
59
71
|
```text
|
|
60
72
|
技術コンテキストの各不明点について:
|
|
@@ -63,34 +75,22 @@ $ARGUMENTS
|
|
|
63
75
|
タスク: 「{ドメイン} における {技術} のベストプラクティスを調べる」
|
|
64
76
|
```
|
|
65
77
|
|
|
66
|
-
3.
|
|
67
|
-
|
|
68
|
-
- 理由: [選んだ理由]
|
|
69
|
-
- 検討した代替案: [評価した他の案]
|
|
70
|
-
|
|
71
|
-
**成果物**: 要確認がすべて解消された research.md
|
|
78
|
+
3. **research.md** に集約: 決定 / 理由 / 検討した代替案
|
|
79
|
+
**成果物**: 要確認が解消された research.md
|
|
72
80
|
|
|
73
81
|
### Phase 1: 設計と契約
|
|
74
82
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
1. **機能仕様からエンティティを抽出** → `data-model.md`:
|
|
78
|
-
- エンティティ名・フィールド・リレーション
|
|
79
|
-
- 要件からのバリデーションルール
|
|
80
|
-
- 該当する場合は状態遷移
|
|
83
|
+
**前提**: research.md 完了(使う場合)
|
|
81
84
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
- プロジェクトタイプに合った契約形式で文書化する
|
|
85
|
-
- 例: ライブラリの公開 API、CLI のコマンドスキーマ、Web サービスのエンドポイント、パーサの文法、アプリの UI 契約
|
|
86
|
-
- purely 内部(ビルドスクリプト・単発ツール等)の場合はスキップする
|
|
85
|
+
1. 機能仕様からエンティティ抽出 → `data-model.md`(フィールド・リレ・バリデ・状態遷移)
|
|
86
|
+
2. 外部 IF がある場合 → `/contracts/`(公開 API・CLI・Web 等)。純内部はスキップ可
|
|
87
87
|
|
|
88
|
-
**成果物**: data-model
|
|
88
|
+
**成果物**: data-model / contracts / quickstart は**任意**。コードと 集約.md・openapi で足りなければ作る。
|
|
89
89
|
|
|
90
90
|
## 重要ルール
|
|
91
91
|
|
|
92
92
|
- 絶対パスを使用する
|
|
93
|
-
-
|
|
93
|
+
- ゲート違反・未解消の確認事項は ERROR
|
|
94
94
|
|
|
95
95
|
---
|
|
96
|
-
|
|
96
|
+
**次**: 完了後、次のステップへ進む。
|