spec-runner 1.0.7 → 1.0.8
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 +16 -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 +64 -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
package/templates/.spec-runner/steps//343/203/206/343/202/271/343/203/210/350/250/255/350/250/210.md
CHANGED
|
@@ -1,50 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
step_id: test_design
|
|
3
|
+
phase: 5
|
|
4
|
+
primary_output: project.json の test_design.dir(既定 tests)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# テスト設計(Phase 5: TEST DESIGN)
|
|
8
|
+
|
|
9
|
+
**やること**: UC 仕様と受入条件に基づき、**PENDING 状態のテストコード**を `test_design.dir`(既定 `tests`)に作成する。続けて analyze / checklist → 人間承認 → review-pass のち Phase 6 へ。
|
|
10
|
+
|
|
11
|
+
**機械的な前提**(`project.json` の `test_design.require_uc_prefixed_tests` が true のとき): ファイル名は **`UC-N-<slug>.spec.<ext>`**(ブランチの UC 番号と一致)にすること。**これが無いと「次のステップ」は実装フェーズに進みません**(TDD で先にテストを置く流れを強制)。
|
|
1
12
|
|
|
2
|
-
|
|
3
|
-
|
|
13
|
+
| 項目 | 内容 |
|
|
14
|
+
|------|------|
|
|
15
|
+
| **出力先** | `.spec-runner/project.json` の `test_design.dir`(既定: `tests`)、パターンは `test_design.pattern`(既定: `*.spec.*`)。Python は `test_*.py` 等に変更可 |
|
|
16
|
+
| **ドキュメント** | **読み取り専用**(test_design.dir への**追加のみ**)。UC 仕様の修正は「曖昧さ解消」等で別途 |
|
|
17
|
+
| **命名** | spec.md **8-2** に厳守: `UC-N-{ユースケース名}.spec.{拡張子}` |
|
|
18
|
+
| **ピラミッド** | spec セクション 14: Unit : Integration : E2E ≈ 70 : 20 : 10。E2E は UC 1 本あたり最大 2 本目安 |
|
|
4
19
|
|
|
5
20
|
## ユーザー入力
|
|
6
21
|
|
|
22
|
+
`$ARGUMENTS`(空でなければ必ず考慮)
|
|
23
|
+
|
|
7
24
|
```text
|
|
8
25
|
$ARGUMENTS
|
|
9
26
|
```
|
|
10
27
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
## 概要
|
|
14
|
-
|
|
15
|
-
1. **セットアップ**: リポジトリルートから `.spec-runner/scripts/lib/uc-context.sh --json --paths-only` を実行する。現在ブランチは `feature/UC-NNN-xxx`。JSON から FEATURE_SPEC(UC 仕様書)、FEATURE_DIR をパースする。
|
|
16
|
-
|
|
17
|
-
2. **UC 仕様の読み込み**:
|
|
18
|
-
- FEATURE_SPEC から受入条件・成功基準・ユーザーストーリーを抽出する。
|
|
19
|
-
- `docs/03_アーキテクチャ/命名規則.md` の SOURCE_EXTENSIONS でテスト拡張子を決める(例: ts → .spec.ts)。
|
|
20
|
-
- ブランチ名から UC 番号とユースケース名(kebab)を取得する(例: feature/UC-001-order-placement → UC-001, order-placement)。
|
|
28
|
+
## 実行フロー
|
|
21
29
|
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
- **ユニット / UC 対応**: `{test_design.dir}/unit/UC-NNN-{ユースケース名}.spec.{拡張子}`(例: `tests/unit/UC-001-order-placement.spec.ts`)
|
|
25
|
-
- **E2E**: `{test_design.dir}/e2e/UC-NNN-{ユースケース名}.e2e.spec.{拡張子}`(例: `tests/e2e/UC-001-order-placement.e2e.spec.ts`)
|
|
26
|
-
- 集約の不変条件がある場合: `{test_design.dir}/unit/{集約名}.invariants.spec.{拡張子}`
|
|
27
|
-
- 既存のテストディレクトリ構造(unit / integration / e2e)に合わせて配置する。
|
|
30
|
+
1. **セットアップ**
|
|
31
|
+
リポジトリルートで `.spec-runner/spec-runner.sh 次のステップ --json`。ブランチ `feature/UC-N-xxx`。JSON の `feature_spec`・`feature_dir` を使用。
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
- **E2E**: 当該 UC のハッピーパス(例: トップ → 主要画面 → 主操作 1 回)を 1 本以上 PENDING で作成する。Phase 6 完了時には**少なくとも 1 本をグリーンにする**ことを目標とする(起動・主要画面・主操作が通ることで「実際に動く」を保証する)。
|
|
33
|
+
2. **UC 仕様の読み込み**
|
|
34
|
+
- FEATURE_SPEC から受入条件・成功基準・ユーザーストーリーを抽出
|
|
35
|
+
- `docs/04_アーキテクチャ/命名規則.md` の SOURCE_EXTENSIONS でテスト拡張子(例: ts → `.spec.ts`)
|
|
36
|
+
- ブランチ名から UC 番号と kebab 名(例: `feature/UC-1-order-placement` → UC-1, order-placement)
|
|
34
37
|
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
+
3. **配置と命名**(spec.md 8-2)
|
|
39
|
+
- ベース: **`project.json` の `test_design.dir`**、パターンは `test_design.pattern`
|
|
40
|
+
- ユニット/UC: `{dir}/unit/UC-N-{名}.spec.{ext}`(例: `tests/unit/UC-1-order-placement.spec.ts`)
|
|
41
|
+
- E2E: `{dir}/e2e/UC-N-{名}.e2e.spec.{ext}`
|
|
42
|
+
- 集約不変条件: `{dir}/unit/{集約名}.invariants.spec.{ext}`
|
|
43
|
+
- 既存の unit / integration / e2e 構造に合わせる
|
|
38
44
|
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
45
|
+
4. **PENDING で記述**
|
|
46
|
+
- 受入条件・成功基準ごとに **スキップ/TODO**(`it.todo` / `test.skip` / `@pending` 等)
|
|
47
|
+
- 説明文は UC の受入・成功基準と対応。アサーションは仮で可(Phase 6 でグリーン)
|
|
48
|
+
- **E2E**: 当該 UC のハッピーパスを 1 本以上 PENDING。Phase 6 完了時は**少なくとも 1 本グリーン**を目標
|
|
42
49
|
|
|
43
|
-
|
|
50
|
+
5. **コンパイル・実行確認**
|
|
51
|
+
プロジェクトのテストコマンドでコンパイル通過、PENDING がスキップされて実行できること。Gate 5 は「テストコード存在 + コンパイル通過」。
|
|
44
52
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- テストピラミッド方針(spec セクション 14): Unit : Integration : E2E ≈ 70 : 20 : 10。E2E は UC 1 本につき最大 2 本までを目安とする。
|
|
53
|
+
6. **報告**
|
|
54
|
+
作成ファイル一覧と UC・受入条件の対応表。続けて「分析」「チェックリスト」→ 人間承認後 **AI が phase-locks 更新** → Phase 6 へ、と案内。
|
|
48
55
|
|
|
49
56
|
---
|
|
50
|
-
|
|
57
|
+
**次**: 完了後、次のステップへ進む。
|
|
@@ -1,32 +1,52 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
---
|
|
2
|
+
step_id: domain
|
|
3
|
+
phase: 1
|
|
4
|
+
primary_output: docs/03_ドメイン設計/
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ドメイン設計(Domain)
|
|
3
8
|
|
|
4
|
-
|
|
9
|
+
**やること**: `docs/03_ドメイン設計/` にユビキタス言語・ドメインモデル・集約等を整備する。完了後、レビュー通過で `phase-locks.json` の `domain` に `completed: true`。
|
|
5
10
|
|
|
6
|
-
|
|
11
|
+
| 項目 | 内容 |
|
|
12
|
+
|------|------|
|
|
13
|
+
| **成果物** | `docs/03_ドメイン設計/` 配下の各ファイル |
|
|
14
|
+
| **テンプレ** | 無い場合は `.spec-runner/templates/` から `ユビキタス言語辞書.md`, `ドメインモデル.md`, `集約.md` 等を生成してから編集 |
|
|
15
|
+
| **ロック** | 設計書本文に `status: reviewed` は書かない(phase-locks のみ) |
|
|
7
16
|
|
|
8
17
|
## ユーザー入力
|
|
9
18
|
|
|
19
|
+
`$ARGUMENTS`(空でなければ必ず考慮)
|
|
20
|
+
|
|
10
21
|
```text
|
|
11
22
|
$ARGUMENTS
|
|
12
23
|
```
|
|
13
24
|
|
|
14
|
-
|
|
25
|
+
## 前提条件
|
|
26
|
+
|
|
27
|
+
| 状況 | 行動 |
|
|
28
|
+
|------|------|
|
|
29
|
+
| `docs/03_ドメイン設計/` が無い | このフェーズで**新規作成**し、各ファイルを配置する(フェーズごとにフォルダを1つずつ作る想定) |
|
|
30
|
+
| ファイルが無い | テンプレから生成してから編集 |
|
|
15
31
|
|
|
16
|
-
##
|
|
32
|
+
## 実行フロー
|
|
17
33
|
|
|
18
|
-
1.
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
34
|
+
1. **成果物の確認**(spec.md Phase 1 に沿っているか)
|
|
35
|
+
- `ユビキタス言語辞書.md`(禁止語欄付き)
|
|
36
|
+
- `ドメインモデル.md`
|
|
37
|
+
- `集約.md`(各集約に**「対応テーブル」**欄)
|
|
22
38
|
- 必要に応じて `エンティティ.md`・`値オブジェクト.md`
|
|
23
39
|
|
|
24
|
-
2.
|
|
40
|
+
2. **編集・追記**
|
|
41
|
+
ユーザー指示や UC で発見した新概念に基づき上記を更新。骨格(主要集約と境界)を確定。Grade A の UC ループで肉付け。
|
|
42
|
+
不明は推測で確定せず **`[要確認: ...]`** を残す(例: `[要確認: 集約境界の決め手(更新頻度/整合性要件)]`)。
|
|
43
|
+
|
|
44
|
+
3. **レビュー通過後**
|
|
45
|
+
**AI が** `.spec-runner/phase-locks.json` の `domain` に `completed: true` と `locked_at` を設定。
|
|
25
46
|
|
|
26
|
-
3. **レビュー通過**: 人間の承認を得たあと、**AI が** `.spec-runner/phase-locks.json` の `domain` に `completed: true` と `locked_at` を設定する。設計書本体に `status: reviewed` は書かない(phase-locks のみで管理)。
|
|
27
47
|
## 重要ルール
|
|
28
48
|
|
|
29
|
-
-
|
|
49
|
+
- **集約.md** の各集約に **対応テーブル(schema.dbml との対応)** 欄を必ず含める(spec.md Phase 1 ゲート)。
|
|
30
50
|
|
|
31
51
|
---
|
|
32
|
-
|
|
52
|
+
**次**: 完了後、次のステップへ進む。
|
|
@@ -1,219 +1,173 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
---
|
|
2
|
+
step_id: spec
|
|
3
|
+
phase: 3
|
|
4
|
+
primary_output: docs/02_ユースケース仕様/<カテゴリ>/UC-N-xxx.md
|
|
5
|
+
---
|
|
3
6
|
|
|
4
|
-
|
|
7
|
+
# ユースケース仕様(UC 仕様書)
|
|
5
8
|
|
|
6
|
-
|
|
9
|
+
**やること**: 機能説明(`$ARGUMENTS`)から UC ブランチと UC 仕様書を作成し、テンプレに沿って埋める。その後 clarify → analyze / checklist → review-pass。
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
| 項目 | 内容 |
|
|
12
|
+
|------|------|
|
|
13
|
+
| **成果物** | `docs/02_ユースケース仕様/<カテゴリ>/UC-N-xxx.md`(1 UC = 1 本) |
|
|
14
|
+
| **main** | **必ず UC 用ブランチを作成してから**仕様を書く。main で直接編集しない |
|
|
15
|
+
| **品質フロー** | clarify → analyze / checklist → review-pass |
|
|
16
|
+
| **判断ログ(任意)** | `docs/02_.../<カテゴリ>/判断記録/UC-N-MMDD-題名.md`。テンプレ: `.spec-runner/templates/UC-N-MMDD-判断記録テンプレ.md` |
|
|
9
17
|
|
|
10
18
|
## ユーザー入力
|
|
11
19
|
|
|
20
|
+
`$ARGUMENTS` が機能説明。空でコマンドしていない限り、繰り返し入力を求めない。
|
|
21
|
+
|
|
12
22
|
```text
|
|
13
23
|
$ARGUMENTS
|
|
14
24
|
```
|
|
15
25
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
- 開発者ではなくビジネス担当者向けに書く
|
|
162
|
-
- 仕様に埋め込んだチェックリストは作らない。別コマンドで行う
|
|
163
|
-
|
|
164
|
-
### セクション要件
|
|
165
|
-
|
|
166
|
-
- **必須セクション**: 全機能で必ず完了する
|
|
167
|
-
- **任意セクション**: 機能に該当する場合のみ含める
|
|
168
|
-
- 該当しないセクションは「N/A」で残さず削除する
|
|
169
|
-
|
|
170
|
-
### AI 生成時の注意
|
|
171
|
-
|
|
172
|
-
ユーザープロンプトから仕様を作成する際:
|
|
173
|
-
|
|
174
|
-
1. **合理的に推測する**: 文脈・業界標準・一般的なパターンで穴を埋める
|
|
175
|
-
2. **仮定を記録する**: 妥当なデフォルトを「仮定」セクションに書く
|
|
176
|
-
3. **確認は絞る**: [要確認] は最大 3 個。次のような重要な判断にだけ使う:
|
|
177
|
-
- 機能スコープや UX に大きく影響する
|
|
178
|
-
- 複数の解釈があり影響が異なる
|
|
179
|
-
- 妥当なデフォルトがない
|
|
180
|
-
4. **優先順位**: スコープ > セキュリティ/プライバシー > UX > 技術詳細
|
|
181
|
-
5. **テスター目線**: 曖昧な要件は「テスト可能で曖昧でない」チェックで不合格にできるようにする
|
|
182
|
-
6. **確認が必要になりやすい領域**(妥当なデフォルトがない場合のみ):
|
|
183
|
-
- 機能スコープと境界(含める/含めないユースケース)
|
|
184
|
-
- ユーザー種別と権限(解釈が複数あり得る場合)
|
|
185
|
-
- セキュリティ/コンプライアンス要件(法的・金銭的に重要な場合)
|
|
186
|
-
|
|
187
|
-
**推測してよい例**(これらについては質問しない):
|
|
188
|
-
|
|
189
|
-
- データ保持: ドメインの業界標準
|
|
190
|
-
- 性能目標: 特記がなければ一般的な Web/モバイルの期待値
|
|
191
|
-
- エラー処理: 分かりやすいメッセージと適切なフォールバック
|
|
192
|
-
- 認証方式: Web アプリではセッションまたは OAuth2
|
|
193
|
-
- 連携パターン: プロジェクトに合わせる(REST/GraphQL、ライブラリは関数呼び出し、CLI は引数など)
|
|
194
|
-
|
|
195
|
-
### 成功基準のガイドライン
|
|
196
|
-
|
|
197
|
-
成功基準は次を満たすこと:
|
|
198
|
-
|
|
199
|
-
1. **測定可能**: 具体的な指標(時間・割合・件数・率)を含める
|
|
200
|
-
2. **技術に依存しない**: フレームワーク・言語・DB・ツールに言及しない
|
|
201
|
-
3. **ユーザー中心**: ユーザー/ビジネス視点の結果であり、システム内部ではない
|
|
202
|
-
4. **検証可能**: 実装詳細を知らなくてもテスト/検証できる
|
|
203
|
-
|
|
204
|
-
**良い例**:
|
|
205
|
-
|
|
206
|
-
- 「ユーザーは 3 分以内にチェックアウトを完了できる」
|
|
207
|
-
- 「システムは 1 万同時ユーザーをサポートする」
|
|
208
|
-
- 「検索の 95% が 1 秒以内に結果を返す」
|
|
209
|
-
- 「タスク完了率が 40% 向上する」
|
|
210
|
-
|
|
211
|
-
**悪い例**(実装寄り):
|
|
212
|
-
|
|
213
|
-
- 「API 応答が 200ms 未満」(技術的すぎる → 「ユーザーが結果を即座に見る」など)
|
|
214
|
-
- 「DB が 1000 TPS を処理」(実装詳細 → ユーザー向け指標にする)
|
|
215
|
-
- 「React コンポーネントが効率的に描画」(フレームワーク依存)
|
|
216
|
-
- 「Redis キャッシュヒット率 80% 以上」(技術依存)
|
|
26
|
+
## フォルダの作成
|
|
27
|
+
|
|
28
|
+
- **`docs/02_ユースケース仕様/`** が無ければ新規作成。**カテゴリごとにフォルダ**(例: タスク管理、認証)を切り、その中に **UC-N-xxx.md を 1 本**。
|
|
29
|
+
- `uc-next-start.sh` でカテゴリ指定するとそのフォルダ内に作成される。
|
|
30
|
+
|
|
31
|
+
## 実行フロー
|
|
32
|
+
|
|
33
|
+
### 1. ブランチ用短名(2〜4 語)
|
|
34
|
+
|
|
35
|
+
- 機能説明からキーワード抽出。**ブランチ名は ASCII のみ**、kebab-case(例: order-placement, user-auth)。
|
|
36
|
+
- **UC ファイル名は日本語**(`UC-<N>-<題名>.md`)。未確定は `要確認`。
|
|
37
|
+
- 技術略語(OAuth2, API, JWT)はそのまま。日本語のみで DESC が決まらない場合は日本語を渡してよい(スクリプトが `uc-N` 等にフォールバック)。
|
|
38
|
+
- 例: 「ユーザー認証」→ user-auth / 「OAuth2 API」→ oauth2-api-integration 等。
|
|
39
|
+
|
|
40
|
+
### 2. ブランチと仕様の作成
|
|
41
|
+
|
|
42
|
+
- `.spec-runner/scripts/branch/uc-next-start.sh [UC-ID] "$DESC" [カテゴリ] [--yes]`
|
|
43
|
+
- UC-ID 省略で自動採番。カテゴリで配置先が決まる(カテゴリ名は日本語可)。**機能ごとに 1 回だけ**。
|
|
44
|
+
- シングルクォートはエスケープ(例: `'I'\''m Groot'`)またはダブルクォート。
|
|
45
|
+
|
|
46
|
+
### 3. テンプレ読込
|
|
47
|
+
|
|
48
|
+
`.spec-runner/templates/UC-N-ユースケース名.md` で必須セクションを把握。
|
|
49
|
+
|
|
50
|
+
### 4. 本文生成の内訳
|
|
51
|
+
|
|
52
|
+
1. 入力パース。空なら ERROR「機能説明が指定されていません」
|
|
53
|
+
2. 重要概念(アクター・アクション・データ・制約)
|
|
54
|
+
3. 不明点: **推測で確定しない** → **`[要確認: ...]`**。付けるのは影響大・解釈複数・デフォルト無しのときのみ。**上限 3 個**。優先: スコープ > セキュリティ > UX > 技術詳細
|
|
55
|
+
4. 「ユーザーシナリオとテスト」を埋める。フロー特定できなければ ERROR
|
|
56
|
+
5. 機能要件(テスト可能)。仮定は「仮定」セクションへ
|
|
57
|
+
6. 成功基準(測定可能・技術非依存・定量+定性)
|
|
58
|
+
7. データが関わる場合は主要エンティティ
|
|
59
|
+
8. SUCCESS(計画の準備完了)
|
|
60
|
+
|
|
61
|
+
### 5. 書き込み
|
|
62
|
+
|
|
63
|
+
テンプレ構造を保ち、プレースホルダを具体内容で置換し **SPEC_FILE** に保存。
|
|
64
|
+
|
|
65
|
+
### 6. 仕様品質検証
|
|
66
|
+
|
|
67
|
+
**a. チェックリスト(任意)**
|
|
68
|
+
checklists を使う場合のみ `FEATURE_DIR/checklists/requirements.md` を生成。UC のみなら **checklists/ 不要**。作成例は **付録 A**。
|
|
69
|
+
|
|
70
|
+
**b.** 各チェック項目で合格/不合格を判定し問題を記録。
|
|
71
|
+
|
|
72
|
+
**c. 結果の扱い**
|
|
73
|
+
|
|
74
|
+
- 全合格 → ステップ 7 へ
|
|
75
|
+
- 不合格([要確認] 以外): 列挙→仕様更新→最大 3 回反復。残りは注記と警告
|
|
76
|
+
- **[要確認] 残り**: 抽出→3 個超なら影響大 3 個に整理→ユーザーへ質問表(**付録 B** 形式)。Q1–Q3 まで一括提示→回答後に置換→再検証
|
|
77
|
+
|
|
78
|
+
**d.** 反復ごとにチェックリストファイルを更新
|
|
79
|
+
|
|
80
|
+
### 7. 完了報告
|
|
81
|
+
|
|
82
|
+
ブランチ名・仕様パス・チェックリスト結果・次フェーズ(曖昧さ解消 / 実装計画)の準備状況。
|
|
83
|
+
|
|
84
|
+
**注**: スクリプトは書き込み前にブランチ作成・チェックアウトと仕様の初期化を行う。
|
|
85
|
+
|
|
86
|
+
## 付録 A: 仕様品質チェックリスト例
|
|
87
|
+
|
|
88
|
+
```markdown
|
|
89
|
+
# 仕様品質チェックリスト: [機能名]
|
|
90
|
+
|
|
91
|
+
**目的**: 計画に進む前に仕様の完全性・品質を検証する
|
|
92
|
+
**作成日**: [日付]
|
|
93
|
+
**機能**: [spec.md へのリンク]
|
|
94
|
+
|
|
95
|
+
## コンテンツ品質
|
|
96
|
+
|
|
97
|
+
- [ ] 実装詳細(言語・フレームワーク・API)が含まれていない
|
|
98
|
+
- [ ] ユーザー価値とビジネスニーズに焦点がある
|
|
99
|
+
- [ ] 非技術のステークホルダー向けに書かれている
|
|
100
|
+
- [ ] 必須セクションがすべて完了している
|
|
101
|
+
|
|
102
|
+
## 要件の完全性
|
|
103
|
+
|
|
104
|
+
- [ ] [要確認] マーカーが残っていない
|
|
105
|
+
- [ ] 要件がテスト可能で曖昧でない
|
|
106
|
+
- [ ] 成功基準が測定可能
|
|
107
|
+
- [ ] 成功基準が技術に依存しない(実装詳細なし)
|
|
108
|
+
- [ ] 受入シナリオがすべて定義されている
|
|
109
|
+
- [ ] エッジケースが特定されている
|
|
110
|
+
- [ ] スコープが明確に境界づけされている
|
|
111
|
+
- [ ] 依存関係と仮定が特定されている
|
|
112
|
+
|
|
113
|
+
## 機能の準備状況
|
|
114
|
+
|
|
115
|
+
- [ ] 全機能要件に明確な受入基準がある
|
|
116
|
+
- [ ] ユーザーシナリオが主要フローをカバーしている
|
|
117
|
+
- [ ] 成功基準で定義した測定可能な結果を満たしている
|
|
118
|
+
- [ ] 仕様に実装詳細が混入していない
|
|
119
|
+
|
|
120
|
+
## 注記
|
|
121
|
+
|
|
122
|
+
- 未完了の項目は「曖昧さ解消」または「実装計画」の前に仕様を更新すること
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 付録 B: [要確認] 用質問表フォーマット
|
|
126
|
+
|
|
127
|
+
```markdown
|
|
128
|
+
## 質問 [N]: [トピック]
|
|
129
|
+
|
|
130
|
+
**文脈**: [該当仕様セクションの引用]
|
|
131
|
+
|
|
132
|
+
**確認したいこと**: [要確認マーカーからの具体的な質問]
|
|
133
|
+
|
|
134
|
+
**回答案**:
|
|
135
|
+
|
|
136
|
+
| 選択肢 | 回答 | 影響 |
|
|
137
|
+
|--------|------|------|
|
|
138
|
+
| A | [第1案] | [機能への影響] |
|
|
139
|
+
| B | [第2案] | [機能への影響] |
|
|
140
|
+
| C | [第3案] | [機能への影響] |
|
|
141
|
+
| 独自 | 自分で回答する | [独自入力の方法] |
|
|
142
|
+
|
|
143
|
+
**選択**: _[ユーザー応答を待つ]_
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
表のパイプを揃え、区切りは `|--------|` 以上。**質問は Q1–Q3 を一度に出し**、全回答後に仕様を更新。
|
|
147
|
+
|
|
148
|
+
## 付録 C: ガイドライン
|
|
149
|
+
|
|
150
|
+
- **WHAT / WHY** に集中。**HOW(実装)**は書かない
|
|
151
|
+
- ビジネス担当者向け。仕様に埋め込みチェックリストは作らない(別コマンド)
|
|
152
|
+
- **必須セクション**は全機能で完了。**任意**は該当時のみ。N/A で残さず削除
|
|
153
|
+
|
|
154
|
+
### AI 生成時
|
|
155
|
+
|
|
156
|
+
1. 推測で確定しない → `[要確認]`
|
|
157
|
+
2. 仮に進める場合のみ「仮定」に明示
|
|
158
|
+
3. [要確認] は最大 3(スコープ・解釈・デフォルト無しの重要判断のみ)
|
|
159
|
+
4. 優先: スコープ > セキュリティ > UX > 技術詳細
|
|
160
|
+
5. テスター目線で曖昧要件は不合格にできるように
|
|
161
|
+
|
|
162
|
+
**推測してよい例**(通常は質問しない): データ保持の業界標準、一般 Web 性能目標、分かりやすいエラー表現、Web ならセッション/OAuth2、連携は REST/GraphQL 等プロジェクト準拠。
|
|
163
|
+
|
|
164
|
+
### 成功基準
|
|
165
|
+
|
|
166
|
+
- 測定可能(時間・割合・件数等)、技術非依存、ユーザー/ビジネス結果、実装を知らず検証可能
|
|
167
|
+
|
|
168
|
+
**良い例**: 「3 分以内にチェックアウト」「1 万同時ユーザー」「検索 95% が 1 秒以内」
|
|
169
|
+
|
|
170
|
+
**悪い例**: API 200ms、DB TPS、React 描画、Redis ヒット率(実装寄り)
|
|
217
171
|
|
|
218
172
|
---
|
|
219
|
-
|
|
173
|
+
**次**: 完了後、次のステップへ進む。
|