@careerchain/stdd 0.1.0 → 0.1.2
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/assets/.claude/agents/implementer.md +4 -4
- package/assets/.claude/agents/plan-writer.md +7 -7
- package/assets/.claude/agents/qa-engineer.md +58 -6
- package/assets/.claude/agents/spec-reviewer.md +24 -18
- package/assets/.claude/agents/spec-writer.md +42 -38
- package/assets/.claude/agents/test-reviewer.md +21 -21
- package/assets/.claude/hooks/spec-first-check.sh +201 -0
- package/assets/.claude/rules/stdd-spec-first.md +36 -0
- package/assets/.claude/settings.json +16 -2
- package/assets/.claude/skills/auto-implement/SKILL.md +1 -1
- package/assets/.claude/skills/auto-implement/references/phases.md +14 -12
- package/assets/.claude/skills/documenting-plans/SKILL.md +3 -3
- package/assets/.claude/skills/documenting-specifications/SKILL.md +326 -300
- package/assets/.claude/skills/documenting-specifications/guides/error-handling.md +23 -21
- package/assets/.claude/skills/documenting-specifications/guides/stdd-violations.md +2 -2
- package/assets/.claude/skills/documenting-specifications/templates/api-spec-common.md +97 -0
- package/assets/.claude/skills/documenting-specifications/templates/architecture-common.md +188 -0
- package/assets/.claude/skills/documenting-specifications/templates/design-common.md +57 -0
- package/assets/.claude/skills/documenting-specifications/templates/requirements-common.md +104 -0
- package/assets/.claude/skills/documenting-specifications/templates/requirements.md +105 -125
- package/assets/.claude/skills/documenting-specifications/templates/table-definition-common.md +78 -0
- package/assets/.claude/skills/documenting-specifications/templates/tech-design.md +110 -183
- package/assets/.claude/skills/documenting-specifications/templates/test-plan.md +58 -0
- package/assets/.claude/skills/generating-wireframes/SKILL.md +10 -10
- package/assets/.claude/skills/generating-wireframes/guides/from-requirements.md +13 -13
- package/assets/.claude/skills/generating-wireframes/templates/index.html +1 -1
- package/assets/.claude/skills/introducing-stdd/SKILL.md +3 -0
- package/assets/.claude/skills/reverse-engineering-common-spec/SKILL.md +22 -11
- package/assets/.claude/skills/reverse-engineering-feature-spec/SKILL.md +53 -32
- package/assets/.claude/skills/reverse-engineering-feature-spec/guides/figma-capture.md +9 -9
- package/assets/.claude/skills/starting-new-with-stdd/SKILL.md +43 -17
- package/assets/.claude/skills/starting-new-with-stdd/templates/bootstrap-plan.md +16 -7
- package/assets/.claude/skills/tailoring-spec-format/SKILL.md +7 -7
- package/assets/.claude/skills/verifying-consistency/SKILL.md +1 -1
- package/assets/mcp.json +9 -0
- package/assets/stdd.config.yml.tpl +4 -0
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/install.js +20 -1
- package/dist/install.js.map +1 -1
- package/package.json +1 -1
- package/assets/.claude/docs/spec-driven-development-guide.md +0 -436
- package/assets/.claude/skills/documenting-specifications/templates/screen-items-definition.md +0 -179
package/dist/install.js
CHANGED
|
@@ -9,6 +9,8 @@ export class InstallError extends Error {
|
|
|
9
9
|
const CLAUDE_DIR = ".claude";
|
|
10
10
|
const CONFIG_FILE = ".stdd.config.yml";
|
|
11
11
|
const CONFIG_TEMPLATE = "stdd.config.yml.tpl";
|
|
12
|
+
const MCP_FILE = ".mcp.json";
|
|
13
|
+
const MCP_TEMPLATE = "mcp.json";
|
|
12
14
|
const DOCS_DIR = "docs";
|
|
13
15
|
/**
|
|
14
16
|
* カレントプロジェクト(新規・既存いずれも)へ STDD 一式を導入する。
|
|
@@ -23,8 +25,9 @@ export async function install(opts) {
|
|
|
23
25
|
await fs.mkdir(targetDir, { recursive: true });
|
|
24
26
|
const claude = await installClaude(assetsRoot, targetDir, overwriteClaude);
|
|
25
27
|
const config = await installConfig(assetsRoot, targetDir, projectName);
|
|
28
|
+
const mcp = await installMcp(assetsRoot, targetDir);
|
|
26
29
|
const docs = await ensureDocs(targetDir);
|
|
27
|
-
return { claude, config, docs };
|
|
30
|
+
return { claude, config, mcp, docs };
|
|
28
31
|
}
|
|
29
32
|
async function assertAssets(assetsRoot) {
|
|
30
33
|
const claudeSrc = path.join(assetsRoot, CLAUDE_DIR);
|
|
@@ -35,6 +38,10 @@ async function assertAssets(assetsRoot) {
|
|
|
35
38
|
if (!(await isFile(tplSrc))) {
|
|
36
39
|
throw new InstallError(`設定テンプレートが見つかりません: ${tplSrc}`);
|
|
37
40
|
}
|
|
41
|
+
const mcpSrc = path.join(assetsRoot, MCP_TEMPLATE);
|
|
42
|
+
if (!(await isFile(mcpSrc))) {
|
|
43
|
+
throw new InstallError(`MCP 設定テンプレートが見つかりません: ${mcpSrc}`);
|
|
44
|
+
}
|
|
38
45
|
}
|
|
39
46
|
async function installClaude(assetsRoot, targetDir, overwrite) {
|
|
40
47
|
const src = path.join(assetsRoot, CLAUDE_DIR);
|
|
@@ -56,6 +63,18 @@ async function installConfig(assetsRoot, targetDir, projectName) {
|
|
|
56
63
|
await fs.writeFile(dst, rendered);
|
|
57
64
|
return "created";
|
|
58
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Playwright MCP(ブラウザ動作確認用)を有効化する .mcp.json を配置する。
|
|
68
|
+
* テンプレートは静的(プレースホルダ無し)。既存があれば破壊しない(維持)。
|
|
69
|
+
*/
|
|
70
|
+
async function installMcp(assetsRoot, targetDir) {
|
|
71
|
+
const dst = path.join(targetDir, MCP_FILE);
|
|
72
|
+
if (await pathExists(dst))
|
|
73
|
+
return "kept";
|
|
74
|
+
const raw = await fs.readFile(path.join(assetsRoot, MCP_TEMPLATE), "utf8");
|
|
75
|
+
await fs.writeFile(dst, raw);
|
|
76
|
+
return "created";
|
|
77
|
+
}
|
|
59
78
|
async function ensureDocs(targetDir) {
|
|
60
79
|
const dir = path.join(targetDir, DOCS_DIR);
|
|
61
80
|
if (await pathExists(dir))
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,436 +0,0 @@
|
|
|
1
|
-
# Spec and Test Driven Development (STDD): 開発ガイド
|
|
2
|
-
|
|
3
|
-
## 目次
|
|
4
|
-
|
|
5
|
-
1. [概要](#概要)
|
|
6
|
-
2. [なぜSpec and Test Driven Developmentなのか](#なぜspec-and-test-driven-developmentなのか)
|
|
7
|
-
3. [仕様ドキュメントの役割](#仕様ドキュメントの役割)
|
|
8
|
-
4. [テスト戦略](#テスト戦略)
|
|
9
|
-
5. [開発フロー](#開発フロー)
|
|
10
|
-
6. [ベストプラクティス](#ベストプラクティス)
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## 概要
|
|
15
|
-
|
|
16
|
-
### Spec and Test Driven Development (STDD) とは
|
|
17
|
-
|
|
18
|
-
**仕様を先に定義し、その仕様に基づいてテストを作成し、それに基づいて実装を行う開発手法**
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
Spec and Test Driven Development (STDD):
|
|
22
|
-
仕様 → テスト → 実装 → 検証
|
|
23
|
-
(仕様が常に最新のSSoT)
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## なぜSpec and Test Driven Developmentなのか
|
|
29
|
-
|
|
30
|
-
**1. 仕様ドキュメント↔テスト↔実装の一貫性を保つ**
|
|
31
|
-
|
|
32
|
-
- ✅ 仕様ドキュメント = ビジネス要件のSSoT(Single Source of Truth)
|
|
33
|
-
- ✅ テスト = 仕様の実行可能な証明
|
|
34
|
-
- ✅ 実装 = テストを通すための手段
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
REQUIREMENTS.md (What & Why)
|
|
38
|
-
↓ Test Strategyで対応を明示
|
|
39
|
-
Test (E2E/Integration/Unit)
|
|
40
|
-
↓ テストを通すために実装
|
|
41
|
-
Implementation
|
|
42
|
-
↓ 仕様を満たしていることを証明
|
|
43
|
-
Test Pass ✅
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
**2. 仕様ドキュメントさえあれば、機能性が担保された実装をAIが行うことができる**
|
|
49
|
-
|
|
50
|
-
Claude Codeは仕様ドキュメント(REQUIREMENTS.md + TECH_DESIGN.md)を読み込み、Test Strategy に従ってテストを作成し、テストを通す実装を自動生成します。
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
Human: REQUIREMENTS.md作成(ビジネス要件)
|
|
54
|
-
↓
|
|
55
|
-
Human: TECH_DESIGN.md作成(技術設計)
|
|
56
|
-
↓
|
|
57
|
-
Human: レビュー・承認
|
|
58
|
-
↓
|
|
59
|
-
Claude Code: テスト作成(E2E/Integration/Unit)
|
|
60
|
-
↓
|
|
61
|
-
Claude Code: 実装(テストを通すために)
|
|
62
|
-
↓
|
|
63
|
-
Claude Code: テスト実行・検証
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
**メリット**:
|
|
67
|
-
|
|
68
|
-
- 人間は「何を作るか(What)」に集中
|
|
69
|
-
- 仕様さえ正確なら、実装の品質が担保される
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
**3. 仕様ドキュメントをビジネス要件のSSoT(Single Source of Truth)として利用することができる**
|
|
74
|
-
|
|
75
|
-
REQUIREMENTS.mdは以下の情報を集約します:
|
|
76
|
-
|
|
77
|
-
- ユーザージャーニー(すべて記述、エラーケース含む)
|
|
78
|
-
- 各JourneyのPriority(P0/P1/P2)
|
|
79
|
-
- 成功基準、エッジケース
|
|
80
|
-
|
|
81
|
-
これにより:
|
|
82
|
-
|
|
83
|
-
- ✅ ステークホルダーとの合意形成が容易
|
|
84
|
-
- ✅ 仕様レビュー段階で方向性を確定(手戻りを最小化)
|
|
85
|
-
- ✅ 常に最新のビジネス要件が参照可能
|
|
86
|
-
- ✅ ドキュメントと実装の乖離がない
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## 仕様ドキュメントの役割
|
|
91
|
-
|
|
92
|
-
- 以下で表すものはすべて同じものを指す
|
|
93
|
-
- Specドキュメント
|
|
94
|
-
- Spec
|
|
95
|
-
- 仕様ドキュメント
|
|
96
|
-
- 仕様書
|
|
97
|
-
- 仕様ドキュメントは以下2つがある
|
|
98
|
-
|
|
99
|
-
### REQUIREMENTS.md
|
|
100
|
-
|
|
101
|
-
**目的**: ビジネス要件とユーザージャーニーを定義し、SSoT(Single Source of Truth)として機能させる
|
|
102
|
-
|
|
103
|
-
**記述内容**:
|
|
104
|
-
|
|
105
|
-
- Problem Statement: このFeatureが解決する問題
|
|
106
|
-
- Business Goals: ビジネス目標
|
|
107
|
-
- **すべてのUser Journeyを記述**(正常系、エラーケース、エッジケース含む)
|
|
108
|
-
- **各JourneyにPriority(P0/P1/P2)を付与**
|
|
109
|
-
- Out of Scope: 対応しない項目
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
### TECH_DESIGN.md
|
|
114
|
-
|
|
115
|
-
**目的**: Feature固有の技術設計と内部仕様を定義し、実装の指針とする
|
|
116
|
-
|
|
117
|
-
**記述内容**:
|
|
118
|
-
|
|
119
|
-
- Feature-Specific Architecture: この機能固有のアーキテクチャとデータフロー
|
|
120
|
-
- Key Design Decisions: 設計判断とその理由
|
|
121
|
-
- Data Model: ER図、TypeScript型定義、バリデーションルール
|
|
122
|
-
- API Design: エンドポイント、型定義、エラーハンドリング
|
|
123
|
-
- **Test Strategy**: 各Journeyおよび内部仕様とテストレベルの対応表
|
|
124
|
-
- **Error Handling Strategy**: エラーコード定義、HTTPステータス、実装方針
|
|
125
|
-
- Security Requirements: セキュリティ要件
|
|
126
|
-
- Performance Requirements: パフォーマンス目標
|
|
127
|
-
- Integration Points: 外部システムとの統合
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
### REQUIREMENTS.md と TECH_DESIGN.md の違い
|
|
132
|
-
|
|
133
|
-
| 項目 | REQUIREMENTS.md | TECH_DESIGN.md |
|
|
134
|
-
| -------- | -------------------------------- | ----------------------------------------------------- |
|
|
135
|
-
| **視点** | ユーザー視点(What & Why) | 技術視点(How) |
|
|
136
|
-
| **読者** | ステークホルダー、PM、デザイナー | エンジニア、アーキテクト |
|
|
137
|
-
| **内容** | ユーザージャーニー、ビジネス目標 | アーキテクチャ、API設計、内部仕様、仕様とテストの対応 |
|
|
138
|
-
|
|
139
|
-
**⚠️ 重要**: Specドキュメントには「対応済み」「実装中」などの**実装過程の記述を含めない**こと。Specドキュメントは常にSSoTとして最新の要件・仕様のみを記載する。
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## テスト戦略
|
|
144
|
-
|
|
145
|
-
### テストレベルの定義
|
|
146
|
-
|
|
147
|
-
| テストレベル | 対象 | 目的 |
|
|
148
|
-
| --------------- | ------------------------------------- | ---------------------------- |
|
|
149
|
-
| **E2E** | 機能(feature)またはページ(page) | Critical Pathsのみ |
|
|
150
|
-
| **Integration** | ページ(page)以下のReactコンポーネント | エラーケース、統合動作 |
|
|
151
|
-
| **Unit** | 関数、メソッド単体 | 詳細ロジック、バリデーション |
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
### Priority(P0/P1/P2)の定義
|
|
156
|
-
|
|
157
|
-
| Priority | 定義 | テスト戦略 |
|
|
158
|
-
| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
|
|
159
|
-
| **P0** | **Critical Path**<br>・ビジネスに直結する最重要フロー<br>・頻度が非常に高い<br>・複数システムをまたぐ統合<br>・データ損失やセキュリティに関わる | E2E必須<br>+ Integration |
|
|
160
|
-
| **P1** | **Important**<br>・重要だがCritical Pathではない<br>・頻度が高い<br>・エラーケースの大半 | E2E検討(複雑さ・コストで判断)<br>Integration必須 |
|
|
161
|
-
| **P2** | **Nice to Have**<br>・エッジケース<br>・頻度が低い<br>・ユーザー体験の改善 | E2E不要<br>Integration<br>Unit |
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## 開発フロー
|
|
166
|
-
|
|
167
|
-
### 新機能開発の全体フロー
|
|
168
|
-
|
|
169
|
-
```
|
|
170
|
-
1. REQUIREMENTS.md作成
|
|
171
|
-
- すべてのUser Journey記述(エラーケース含む)
|
|
172
|
-
- 各JourneyにPriority付与(P0/P1/P2)
|
|
173
|
-
↓
|
|
174
|
-
2. ステークホルダーレビュー
|
|
175
|
-
↓
|
|
176
|
-
3. TECH_DESIGN.md作成
|
|
177
|
-
- Feature固有の技術設計
|
|
178
|
-
- Test Strategy(各Journeyとテストレベルの対応)
|
|
179
|
-
- ここでREQUIREMENTS.mdのJourneyを含めて仕様とテストの対応を明確にする
|
|
180
|
-
↓
|
|
181
|
-
4. アーキテクトレビュー
|
|
182
|
-
↓
|
|
183
|
-
5. ★ PLANドキュメント作成
|
|
184
|
-
- 開発者に実装スコープを確認
|
|
185
|
-
- Test Strategyに従ってタスクを分解
|
|
186
|
-
- Unit → Integration → E2Eの順でテスト作成タスクを記載
|
|
187
|
-
- その後、実装タスクを記載
|
|
188
|
-
↓
|
|
189
|
-
6. テスト作成(Red状態)(PLANドキュメントに従う)
|
|
190
|
-
- Unit test
|
|
191
|
-
- Integration test
|
|
192
|
-
- E2E test
|
|
193
|
-
↓
|
|
194
|
-
7. 実装(PLANドキュメントに従う)
|
|
195
|
-
↓
|
|
196
|
-
8. テスト実行
|
|
197
|
-
- Unit
|
|
198
|
-
- Integration
|
|
199
|
-
- E2E
|
|
200
|
-
↓
|
|
201
|
-
9. テスト通過確認(Green)
|
|
202
|
-
↓
|
|
203
|
-
10. PR作成 → 開発者によるレビュー → マージ
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
### 既存機能への追加・変更の全体フロー
|
|
207
|
-
|
|
208
|
-
```
|
|
209
|
-
1. ★ PLANドキュメント作成
|
|
210
|
-
- 開発者に実装スコープを確認
|
|
211
|
-
- タスクの一つとしてSpecドキュメントの更新を含める
|
|
212
|
-
↓
|
|
213
|
-
2. REQUIREMENTS.md更新
|
|
214
|
-
- 新しいJourneyを追加、または既存を変更
|
|
215
|
-
- Priority付与
|
|
216
|
-
↓
|
|
217
|
-
3. ステークホルダーレビュー
|
|
218
|
-
↓
|
|
219
|
-
4. TECH_DESIGN.md更新
|
|
220
|
-
- 技術設計の変更を反映
|
|
221
|
-
- Test Strategyを更新
|
|
222
|
-
↓
|
|
223
|
-
5. アーキテクトレビュー
|
|
224
|
-
↓
|
|
225
|
-
6. PLANドキュメント更新
|
|
226
|
-
- テスト・実装計画をTest Strategyに基づいて更新
|
|
227
|
-
↓
|
|
228
|
-
7. テスト作成・更新(Red状態)(PLANドキュメントに従う)
|
|
229
|
-
↓
|
|
230
|
-
8. 実装(PLANドキュメントに従う)
|
|
231
|
-
↓
|
|
232
|
-
9. テスト実行
|
|
233
|
-
↓
|
|
234
|
-
10. テスト通過確認
|
|
235
|
-
↓
|
|
236
|
-
11. PR作成 → 開発者によるレビュー → マージ
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
### Phase 1: 仕様定義
|
|
242
|
-
|
|
243
|
-
#### 1-1. REQUIREMENTS.md作成/更新
|
|
244
|
-
|
|
245
|
-
**配置**: `docs/<app>/<path>/REQUIREMENTS.md`
|
|
246
|
-
|
|
247
|
-
**新機能の場合**: 新規作成
|
|
248
|
-
|
|
249
|
-
**既存機能への追加の場合**: 直接更新
|
|
250
|
-
|
|
251
|
-
**含めるべき内容**:
|
|
252
|
-
|
|
253
|
-
- Problem Statement、Target Users、Business Goals
|
|
254
|
-
- すべてのUser Journey(エラーケース、エッジケース含む)
|
|
255
|
-
- 各JourneyにPriority(P0/P1/P2)を付与
|
|
256
|
-
- Success Criteria、Edge Cases、Out of Scope
|
|
257
|
-
|
|
258
|
-
#### 1-2. ステークホルダーレビュー
|
|
259
|
-
|
|
260
|
-
- PMやデザイナーと仕様を確認
|
|
261
|
-
- ビジネス要件が満たされているか確認
|
|
262
|
-
- 修正が必要な場合は、REQUIREMENTS.mdを更新
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
### Phase 2: 技術設計
|
|
267
|
-
|
|
268
|
-
#### 2-1. TECH_DESIGN.md作成/更新
|
|
269
|
-
|
|
270
|
-
**配置**: `docs/<app>/<path>/TECH_DESIGN.md`
|
|
271
|
-
|
|
272
|
-
**新機能の場合**: 新規作成
|
|
273
|
-
|
|
274
|
-
**既存機能への追加の場合**: 直接更新
|
|
275
|
-
|
|
276
|
-
**含めるべき内容**:
|
|
277
|
-
|
|
278
|
-
- Feature-Specific Architecture
|
|
279
|
-
- Key Design Decisions(設計判断とその理由)
|
|
280
|
-
- Data Model(ER図、TypeScript型定義)
|
|
281
|
-
- API Design(エンドポイント、型定義)
|
|
282
|
-
- **Test Strategy**(各Journeyをどのテストレベルでカバーするか)
|
|
283
|
-
- REQUIREMENTS.mdのすべてのJourneyを含める
|
|
284
|
-
- 各Journeyとテストレベル(E2E/Integration/Unit)の対応を明示
|
|
285
|
-
- Error Handling Strategy
|
|
286
|
-
- Security/Performance Requirements
|
|
287
|
-
- Integration Points
|
|
288
|
-
|
|
289
|
-
#### 2-2. アーキテクトレビュー
|
|
290
|
-
|
|
291
|
-
- 技術設計が適切か確認
|
|
292
|
-
- アーキテクチャパターンに従っているか
|
|
293
|
-
- パフォーマンス・セキュリティ要件を満たせるか
|
|
294
|
-
- Test Strategyが適切か(E2E/Integration/Unitの役割分担)
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
### Phase 3: PLANドキュメント作成
|
|
299
|
-
|
|
300
|
-
PLANドキュメントはセッションごとの実装タスクを管理するドキュメントです。
|
|
301
|
-
|
|
302
|
-
**配置**: `docs/<app>/<feature-path>/plans/[yyyy-mm-dd].md`
|
|
303
|
-
|
|
304
|
-
**詳細**: [documenting-plans Skill](../.claude/skills/documenting-plans/SKILL.md) を参照
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
### Phase 4: テスト作成(Red状態)
|
|
309
|
-
|
|
310
|
-
**TDDの原則**: テスト作成 → **Red確認** → 実装 → **Green確認** → Refactor
|
|
311
|
-
|
|
312
|
-
TECH_DESIGN.mdのTest Strategyに従ってテストを作成:
|
|
313
|
-
|
|
314
|
-
1. **Unit test**: バリデーションロジック、ビジネスロジック
|
|
315
|
-
2. **Integration test**: エラーケース、コンポーネント統合
|
|
316
|
-
3. **E2E test**: Critical Paths(P0の一部)
|
|
317
|
-
|
|
318
|
-
#### 重要: Red状態の確認
|
|
319
|
-
|
|
320
|
-
**テスト作成後、必ずテストを実行してRed(失敗)を確認すること**
|
|
321
|
-
|
|
322
|
-
**なぜRedを確認するのか**:
|
|
323
|
-
|
|
324
|
-
- ✅ テストが正しく動作していることを証明
|
|
325
|
-
- ✅ テストが実装をチェックしていることを保証
|
|
326
|
-
- ✅ "テストが最初から通ってしまう"バグを防ぐ
|
|
327
|
-
|
|
328
|
-
**Red確認の手順**:
|
|
329
|
-
|
|
330
|
-
```bash
|
|
331
|
-
# テストを実行してRedを確認(<commands.test> は .stdd.config.yml の commands.test)
|
|
332
|
-
<commands.test> -- <test-file>
|
|
333
|
-
|
|
334
|
-
# 期待される結果: テストが失敗する(Red状態)
|
|
335
|
-
# ❌ FAIL: "実装がないため失敗" → 正常
|
|
336
|
-
# ✅ PASS: "テストが通った" → 異常(テストが何もチェックしていない)
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
**もしテストが最初から通ってしまった場合**:
|
|
340
|
-
|
|
341
|
-
- テストが正しく実装をチェックしていない
|
|
342
|
-
- テストを修正し、Redになることを確認
|
|
343
|
-
- 例: アサーションが甘い、モックが実装を含んでいる
|
|
344
|
-
|
|
345
|
-
---
|
|
346
|
-
|
|
347
|
-
### Phase 5: 実装(Green状態)
|
|
348
|
-
|
|
349
|
-
PLANドキュメントに従って順次実装:
|
|
350
|
-
|
|
351
|
-
1. Unit testに対応する実装
|
|
352
|
-
2. Integration testに対応する実装
|
|
353
|
-
3. E2E testに対応する実装
|
|
354
|
-
|
|
355
|
-
**実装時の原則(Red → Green → Refactorサイクル)**:
|
|
356
|
-
|
|
357
|
-
1. **Red**: テストが失敗することを確認(Phase 4で完了)
|
|
358
|
-
2. **Green**: 実装してテストを通す
|
|
359
|
-
- 1タスクずつ完成させる
|
|
360
|
-
- テストが通ることを確認してから次へ
|
|
361
|
-
3. **Refactor**: コードを整理(必要に応じて)
|
|
362
|
-
4. 各タスク完了後にcommit
|
|
363
|
-
|
|
364
|
-
**Greenになったら**:
|
|
365
|
-
|
|
366
|
-
```bash
|
|
367
|
-
# すべてのテストを実行(<commands.test> は .stdd.config.yml の commands.test)
|
|
368
|
-
<commands.test>
|
|
369
|
-
|
|
370
|
-
# 期待される結果: すべてのテストが通る(Green状態)
|
|
371
|
-
# ✅ PASS: すべてのテスト → Phase 6へ進む
|
|
372
|
-
# ❌ FAIL: 一部のテストが失敗 → 実装を修正
|
|
373
|
-
```
|
|
374
|
-
|
|
375
|
-
---
|
|
376
|
-
|
|
377
|
-
### Phase 6: テスト実行と検証
|
|
378
|
-
|
|
379
|
-
すべてのテストを実行し、Greenであることを確認:
|
|
380
|
-
|
|
381
|
-
- Unit test
|
|
382
|
-
- Integration test
|
|
383
|
-
- E2E test
|
|
384
|
-
|
|
385
|
-
---
|
|
386
|
-
|
|
387
|
-
### Phase 7: PR作成とマージ
|
|
388
|
-
|
|
389
|
-
#### 7-1. PR作成
|
|
390
|
-
|
|
391
|
-
- CIが通っていることを確認
|
|
392
|
-
- PR descriptionに仕様ドキュメントへのリンクを記載
|
|
393
|
-
- テストカバレッジを確認
|
|
394
|
-
|
|
395
|
-
#### 7-2. 開発者によるレビューとマージ
|
|
396
|
-
|
|
397
|
-
レビュアーは以下を確認:
|
|
398
|
-
|
|
399
|
-
- ✅ REQUIREMENTS.mdの要件を満たしているか
|
|
400
|
-
- ✅ TECH_DESIGN.mdの設計に従っているか
|
|
401
|
-
- ✅ Test Strategyに従ってテストが書かれているか
|
|
402
|
-
- ✅ すべてのテストが通っているか
|
|
403
|
-
- ✅ コード品質(可読性、保守性)
|
|
404
|
-
|
|
405
|
-
承認後、マージを実行。
|
|
406
|
-
|
|
407
|
-
---
|
|
408
|
-
|
|
409
|
-
## ベストプラクティス
|
|
410
|
-
|
|
411
|
-
### 1. 仕様レビューを最優先する
|
|
412
|
-
|
|
413
|
-
実装前にREQUIREMENTS.mdとTECH_DESIGN.mdをレビューし、方向性を確定。手戻りを最小化。
|
|
414
|
-
|
|
415
|
-
### 2. E2Eテストは「Critical Pathsのみ」
|
|
416
|
-
|
|
417
|
-
すべてのJourneyをE2E化しない。P0の一部のみE2E化し、その他はIntegration/Unitで検証。
|
|
418
|
-
|
|
419
|
-
### 3. エラーケースもUser Journeyとして記述
|
|
420
|
-
|
|
421
|
-
エラーケースを「その他」として扱わず、Priorityを付与。
|
|
422
|
-
|
|
423
|
-
### 4. Test StrategyをTECH_DESIGN.mdで明示
|
|
424
|
-
|
|
425
|
-
各JourneyにどのテストレベルでカバーするかをTECH_DESIGN.mdで明記し、「なぜこのテストレベルか」の理由も記載。
|
|
426
|
-
|
|
427
|
-
### 5. ドキュメントは実装ディレクトリに従う
|
|
428
|
-
|
|
429
|
-
実装ファイル: `<app.path>/app/login/page.tsx`(`app.path` は `.stdd.config.yml` の `apps[].path`)
|
|
430
|
-
→ ドキュメント: `docs/<app.id>/login/REQUIREMENTS.md`, `TECH_DESIGN.md`(`docs.layout.*` テンプレートに従う。`<app.id>` は `apps[].id`)
|
|
431
|
-
|
|
432
|
-
### 6. セッション開始時にスコープを確認する
|
|
433
|
-
|
|
434
|
-
PLANドキュメント作成前に、必ず開発者に実装スコープを確認する。大きな機能は複数セッションに分割して実装することが多いため、スコープを明確にすることで認識齟齬を防ぐ。
|
|
435
|
-
|
|
436
|
-
**詳細**: [documenting-plans Skill](../.claude/skills/documenting-plans/SKILL.md) を参照
|