@sk8metal/michi-cli 0.10.1 → 0.12.0
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 +71 -848
- package/dist/scripts/constants/environments.d.ts +1 -1
- package/dist/scripts/constants/environments.d.ts.map +1 -1
- package/dist/scripts/constants/environments.js +0 -20
- package/dist/scripts/constants/environments.js.map +1 -1
- package/dist/scripts/phase-runner.js +1 -1
- package/dist/scripts/phase-runner.js.map +1 -1
- package/dist/scripts/utils/multi-repo-validator.d.ts +18 -0
- package/dist/scripts/utils/multi-repo-validator.d.ts.map +1 -1
- package/dist/scripts/utils/multi-repo-validator.js +42 -0
- package/dist/scripts/utils/multi-repo-validator.js.map +1 -1
- package/dist/scripts/utils/tasks-format-validator.js +3 -3
- package/dist/scripts/utils/tasks-format-validator.js.map +1 -1
- package/dist/scripts/utils/template-finder.d.ts +2 -2
- package/dist/scripts/utils/template-finder.d.ts.map +1 -1
- package/dist/scripts/utils/template-finder.js +3 -8
- package/dist/scripts/utils/template-finder.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +0 -8
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/init.d.ts +0 -4
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +6 -30
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/setup-existing.d.ts +2 -6
- package/dist/src/commands/setup-existing.d.ts.map +1 -1
- package/dist/src/commands/setup-existing.js +8 -142
- package/dist/src/commands/setup-existing.js.map +1 -1
- package/docs/README.md +20 -83
- package/docs/getting-started/configuration.md +350 -0
- package/docs/getting-started/installation.md +59 -0
- package/docs/getting-started/quick-start.md +76 -0
- package/docs/guides/atlassian-integration.md +116 -0
- package/docs/guides/claude-code.md +155 -0
- package/docs/guides/multi-repo.md +117 -0
- package/docs/guides/workflow.md +382 -0
- package/docs/reference/ai-commands.md +92 -0
- package/docs/reference/cli.md +752 -0
- package/docs/reference/environment-variables.md +192 -0
- package/docs/troubleshooting.md +498 -0
- package/package.json +1 -3
- package/scripts/__tests__/create-project.test.ts +12 -12
- package/scripts/__tests__/setup-existing-project.test.ts +22 -22
- package/scripts/constants/__tests__/environments.test.ts +7 -50
- package/scripts/constants/environments.ts +1 -27
- package/scripts/phase-runner.ts +1 -1
- package/scripts/template/__tests__/renderer.test.ts +21 -21
- package/scripts/utils/__tests__/multi-repo-validator.test.ts +159 -1
- package/scripts/utils/multi-repo-validator.ts +50 -0
- package/scripts/utils/tasks-format-validator.ts +3 -3
- package/scripts/utils/template-finder.ts +5 -11
- package/templates/claude/agents/e2e-first-planner/AGENT.md +1 -1
- package/templates/claude/agents/pr-resolver/AGENT.md +15 -3
- package/templates/claude/commands/michi/e2e-plan.md +1 -1
- package/templates/claude/commands/michi/spec-design.md +2 -2
- package/templates/claude/commands/michi/spec-tasks.md +156 -0
- package/templates/claude/commands/michi/test-planning.md +1 -1
- package/templates/claude/commands/michi/validate-design.md +3 -3
- package/templates/claude/commands/michi-multi-repo/impl-all.md +30 -1
- package/templates/claude/commands/michi-multi-repo/propagate-specs.md +14 -1
- package/templates/claude/commands/michi-multi-repo/spec-review.md +16 -2
- package/templates/claude-agent/agents/repo-spec-executor.md +1 -1
- package/templates/claude-agent/commands/michi/spec-tasks.md +117 -0
- package/templates/claude-agent/rules/code-size-monitor.md +26 -0
- package/templates/claude-agent/rules/code-size-rules.md +32 -0
- package/templates/michi/cc-sdd-overrides/settings/rules/design-review-michi.md +1 -1
- package/docs/context.md +0 -59
- package/docs/michi-development/contributing/development.md +0 -341
- package/docs/michi-development/contributing/release.md +0 -365
- package/docs/michi-development/design/config-unification.md +0 -733
- package/docs/michi-development/design/design-config-current-state.md +0 -330
- package/docs/michi-development/design/design-config-implementation.md +0 -628
- package/docs/michi-development/design/design-config-migration.md +0 -952
- package/docs/michi-development/design/design-config-security.md +0 -771
- package/docs/michi-development/design/design-config-solution.md +0 -583
- package/docs/michi-development/design/design-config-testing.md +0 -892
- package/docs/michi-development/testing/manual-verification-flow.md +0 -871
- package/docs/michi-development/testing/manual-verification-other-tools.md +0 -1279
- package/docs/michi-development/testing/manual-verification-troubleshooting.md +0 -122
- package/docs/michi-development/testing/pre-publish-checklist.md +0 -560
- package/docs/michi-development/testing-strategy.md +0 -87
- package/docs/plan.md +0 -275
- package/docs/user-guide/getting-started/github-token-setup.md +0 -510
- package/docs/user-guide/getting-started/new-repository-setup.md +0 -704
- package/docs/user-guide/getting-started/quick-start.md +0 -212
- package/docs/user-guide/getting-started/setup.md +0 -819
- package/docs/user-guide/guides/agent-skills-integration.md +0 -222
- package/docs/user-guide/guides/customization.md +0 -537
- package/docs/user-guide/guides/internationalization.md +0 -540
- package/docs/user-guide/guides/migration-guide.md +0 -138
- package/docs/user-guide/guides/multi-project.md +0 -368
- package/docs/user-guide/guides/multi-repo-guide.md +0 -1590
- package/docs/user-guide/guides/phase-automation.md +0 -419
- package/docs/user-guide/guides/workflow.md +0 -574
- package/docs/user-guide/hands-on/README.md +0 -142
- package/docs/user-guide/hands-on/claude-agent-setup.md +0 -597
- package/docs/user-guide/hands-on/claude-setup.md +0 -452
- package/docs/user-guide/hands-on/cursor-setup.md +0 -353
- package/docs/user-guide/hands-on/troubleshooting.md +0 -964
- package/docs/user-guide/hands-on/verification-checklist.md +0 -439
- package/docs/user-guide/hands-on/workflow-walkthrough.md +0 -1078
- package/docs/user-guide/reference/config.md +0 -589
- package/docs/user-guide/reference/multi-repo-api.md +0 -771
- package/docs/user-guide/reference/quick-reference.md +0 -297
- package/docs/user-guide/reference/security-test-payloads.md +0 -50
- package/docs/user-guide/reference/tasks-template.md +0 -550
- package/docs/user-guide/release/ci-setup-java.md +0 -114
- package/docs/user-guide/release/ci-setup-nodejs.md +0 -94
- package/docs/user-guide/release/ci-setup-php.md +0 -102
- package/docs/user-guide/release/ci-setup-troubleshooting.md +0 -94
- package/docs/user-guide/release/ci-setup.md +0 -188
- package/docs/user-guide/release/release-flow.md +0 -476
- package/docs/user-guide/templates/test-specs/README.md +0 -173
- package/docs/user-guide/templates/test-specs/e2e-test-spec-template.md +0 -553
- package/docs/user-guide/templates/test-specs/integration-test-spec-template.md +0 -435
- package/docs/user-guide/templates/test-specs/performance-test-spec-template.md +0 -454
- package/docs/user-guide/templates/test-specs/security-test-spec-template.md +0 -625
- package/docs/user-guide/templates/test-specs/unit-test-spec-template.md +0 -328
- package/docs/user-guide/testing/integration-tests.md +0 -312
- package/docs/user-guide/testing/tdd-cycle.md +0 -349
- package/docs/user-guide/testing/test-execution-flow.md +0 -396
- package/docs/user-guide/testing/test-failure-handling.md +0 -521
- package/docs/user-guide/testing/test-planning-flow.md +0 -185
- package/docs/user-guide/testing-strategy.md +0 -185
- package/docs/verification-guide.md +0 -518
- package/templates/cline/rules/atlassian-integration.md +0 -36
- package/templates/cline/rules/michi-core.md +0 -56
- package/templates/codex/AGENTS.override.md +0 -277
- package/templates/codex/prompts/confluence-sync.md +0 -177
- package/templates/codex/rules/README.md +0 -210
- package/templates/cursor/commands/kiro/kiro-spec-impl.md +0 -244
- package/templates/cursor/commands/kiro/kiro-spec-tasks.md +0 -354
- package/templates/cursor/commands/michi/confluence-sync.md +0 -76
- package/templates/cursor/commands/michi/project-switch.md +0 -69
- package/templates/cursor/rules/atlassian-mcp.mdc +0 -188
- package/templates/cursor/rules/github-ssot.mdc +0 -151
- package/templates/cursor/rules/multi-project.mdc +0 -81
- package/templates/gemini/commands/README.md +0 -41
- package/templates/gemini/rules/GEMINI.md +0 -80
|
@@ -1,521 +0,0 @@
|
|
|
1
|
-
# テスト失敗時の対応
|
|
2
|
-
|
|
3
|
-
このドキュメントでは、michiを使用したプロジェクトでテストが失敗した場合の対応手順について説明します。
|
|
4
|
-
|
|
5
|
-
## テスト失敗時の基本フロー
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
テスト失敗
|
|
9
|
-
↓
|
|
10
|
-
1. エラーログを確認
|
|
11
|
-
↓
|
|
12
|
-
2. 失敗原因を特定
|
|
13
|
-
↓
|
|
14
|
-
3. 問題の分類
|
|
15
|
-
├─ コードのバグ → バグ修正
|
|
16
|
-
├─ テストコードの問題 → テスト修正
|
|
17
|
-
├─ 環境の問題 → 環境修正
|
|
18
|
-
└─ 仕様変更 → 仕様確認後、修正
|
|
19
|
-
↓
|
|
20
|
-
4. 修正を実装
|
|
21
|
-
↓
|
|
22
|
-
5. テストを再実行
|
|
23
|
-
↓
|
|
24
|
-
6. すべて成功 → 次のステップへ
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Phase A(PR前)でのテスト失敗
|
|
28
|
-
|
|
29
|
-
Phase Aでは、以下のテストが実行されます:
|
|
30
|
-
- 単体テスト
|
|
31
|
-
- Lint
|
|
32
|
-
- ビルド
|
|
33
|
-
|
|
34
|
-
### ケース1: 単体テストが失敗
|
|
35
|
-
|
|
36
|
-
**症状**:
|
|
37
|
-
```
|
|
38
|
-
❌ FAIL tests/unit/calculator.test.ts
|
|
39
|
-
calculateTotal
|
|
40
|
-
✗ should return sum of array elements
|
|
41
|
-
Expected: 60
|
|
42
|
-
Received: 70
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**対応手順**:
|
|
46
|
-
|
|
47
|
-
1. **失敗したテストを特定**
|
|
48
|
-
```bash
|
|
49
|
-
npm test -- --reporter=verbose
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
2. **該当するテストケースのみを実行**
|
|
53
|
-
```bash
|
|
54
|
-
# Node.js (Vitest)
|
|
55
|
-
npm test -- tests/unit/calculator.test.ts
|
|
56
|
-
|
|
57
|
-
# Java (Gradle)
|
|
58
|
-
./gradlew test --tests CalculatorTest
|
|
59
|
-
|
|
60
|
-
# PHP
|
|
61
|
-
composer test -- tests/Unit/CalculatorTest.php
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
3. **原因を特定**
|
|
65
|
-
- **コードのバグ**: 実装コードが間違っている
|
|
66
|
-
- **テストの誤り**: テストの期待値が間違っている
|
|
67
|
-
- **仕様変更**: 仕様が変更されたが、テストが更新されていない
|
|
68
|
-
|
|
69
|
-
4. **修正を実装**
|
|
70
|
-
|
|
71
|
-
**パターンA: コードのバグ**
|
|
72
|
-
```typescript
|
|
73
|
-
// ❌ 間違った実装
|
|
74
|
-
export function calculateTotal(numbers: number[]): number {
|
|
75
|
-
return numbers.reduce((sum, num) => sum + num, 10); // 初期値が10になっている
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// ✅ 正しい実装
|
|
79
|
-
export function calculateTotal(numbers: number[]): number {
|
|
80
|
-
return numbers.reduce((sum, num) => sum + num, 0);
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**パターンB: テストの誤り**(注意: 実装に合わせてテストを変更するのは避ける)
|
|
85
|
-
```typescript
|
|
86
|
-
// テストが間違っている場合のみ修正
|
|
87
|
-
// ただし、「実装がこうなっているから」という理由で修正してはいけない
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
5. **テストを再実行して確認**
|
|
91
|
-
```bash
|
|
92
|
-
npm test
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### ケース2: Lintエラー
|
|
96
|
-
|
|
97
|
-
**症状**:
|
|
98
|
-
```
|
|
99
|
-
❌ ESLint: 5 errors found
|
|
100
|
-
|
|
101
|
-
src/calculator.ts
|
|
102
|
-
10:1 error Missing semicolon semi
|
|
103
|
-
15:3 error 'result' is never reassigned prefer-const
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
**対応手順**:
|
|
107
|
-
|
|
108
|
-
1. **自動修正を試みる**
|
|
109
|
-
```bash
|
|
110
|
-
# Node.js
|
|
111
|
-
npm run lint:fix
|
|
112
|
-
|
|
113
|
-
# または
|
|
114
|
-
npx eslint src/**/*.ts --fix
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
2. **自動修正できないエラーは手動で修正**
|
|
118
|
-
```typescript
|
|
119
|
-
// ❌ Before
|
|
120
|
-
let result = calculateTotal([10, 20, 30])
|
|
121
|
-
|
|
122
|
-
// ✅ After
|
|
123
|
-
const result = calculateTotal([10, 20, 30]);
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
3. **Lintを再実行して確認**
|
|
127
|
-
```bash
|
|
128
|
-
npm run lint
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### ケース3: ビルドエラー
|
|
132
|
-
|
|
133
|
-
**症状**:
|
|
134
|
-
```
|
|
135
|
-
❌ ERROR in src/calculator.ts:10:15
|
|
136
|
-
TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
**対応手順**:
|
|
140
|
-
|
|
141
|
-
1. **型エラーを確認**
|
|
142
|
-
```bash
|
|
143
|
-
# Node.js
|
|
144
|
-
npm run type-check
|
|
145
|
-
|
|
146
|
-
# または
|
|
147
|
-
npx tsc --noEmit
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
2. **型定義を修正**
|
|
151
|
-
```typescript
|
|
152
|
-
// ❌ 間違った型
|
|
153
|
-
function calculateTotal(numbers: string[]): number {
|
|
154
|
-
// ...
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// ✅ 正しい型
|
|
158
|
-
function calculateTotal(numbers: number[]): number {
|
|
159
|
-
// ...
|
|
160
|
-
}
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
3. **ビルドを再実行**
|
|
164
|
-
```bash
|
|
165
|
-
npm run build
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
## Phase B(リリース準備時)でのテスト失敗
|
|
169
|
-
|
|
170
|
-
Phase Bでは、以下のテストが実行されます:
|
|
171
|
-
- 統合テスト
|
|
172
|
-
- E2Eテスト
|
|
173
|
-
- パフォーマンステスト(任意)
|
|
174
|
-
- セキュリティテスト(任意)
|
|
175
|
-
|
|
176
|
-
### ケース4: 統合テストが失敗
|
|
177
|
-
|
|
178
|
-
**症状**:
|
|
179
|
-
```
|
|
180
|
-
❌ FAIL tests/integration/user-api.test.ts
|
|
181
|
-
User Registration
|
|
182
|
-
✗ should register user and save to database
|
|
183
|
-
Database connection refused
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
**対応手順**:
|
|
187
|
-
|
|
188
|
-
1. **環境を確認**
|
|
189
|
-
```bash
|
|
190
|
-
# データベースが起動しているか確認
|
|
191
|
-
docker ps | grep postgres
|
|
192
|
-
|
|
193
|
-
# 起動していなければ起動
|
|
194
|
-
docker-compose up -d postgres
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
2. **接続設定を確認**
|
|
198
|
-
```typescript
|
|
199
|
-
// テスト用の接続設定が正しいか確認
|
|
200
|
-
const dbConfig = {
|
|
201
|
-
host: process.env.TEST_DB_HOST || 'localhost',
|
|
202
|
-
port: process.env.TEST_DB_PORT || 5432,
|
|
203
|
-
database: process.env.TEST_DB_NAME || 'testdb',
|
|
204
|
-
};
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
3. **テストデータを確認**
|
|
208
|
-
```bash
|
|
209
|
-
# テストデータが正しく準備されているか
|
|
210
|
-
npm run db:seed:test
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
4. **テストを再実行**
|
|
214
|
-
```bash
|
|
215
|
-
npm run test:integration
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
### ケース5: E2Eテストが失敗
|
|
219
|
-
|
|
220
|
-
**症状**:
|
|
221
|
-
```
|
|
222
|
-
❌ FAIL tests/e2e/user-registration.test.ts
|
|
223
|
-
User Registration Flow
|
|
224
|
-
✗ should complete registration
|
|
225
|
-
Timeout: element not found: button[type="submit"]
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
**対応手順**:
|
|
229
|
-
|
|
230
|
-
1. **セレクターを確認**
|
|
231
|
-
```typescript
|
|
232
|
-
// ❌ 間違ったセレクター
|
|
233
|
-
await page.click('button[type="submit"]');
|
|
234
|
-
|
|
235
|
-
// ✅ 正しいセレクター(実際のHTMLに合わせる)
|
|
236
|
-
await page.click('[data-testid="register-button"]');
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
2. **待機時間を調整**
|
|
240
|
-
```typescript
|
|
241
|
-
// 要素が表示されるまで待機
|
|
242
|
-
await page.waitForSelector('[data-testid="register-button"]', {
|
|
243
|
-
timeout: 10000,
|
|
244
|
-
});
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
3. **スクリーンショットで確認**
|
|
248
|
-
```typescript
|
|
249
|
-
// 失敗時点のスクリーンショットを撮る
|
|
250
|
-
await page.screenshot({ path: 'debug-screenshot.png' });
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
4. **テストを再実行**
|
|
254
|
-
```bash
|
|
255
|
-
npx playwright test tests/e2e/user-registration.test.ts
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
## 問題の分類と対応
|
|
259
|
-
|
|
260
|
-
### 1. コードのバグ
|
|
261
|
-
|
|
262
|
-
**特徴**:
|
|
263
|
-
- 実装ロジックが間違っている
|
|
264
|
-
- 期待される動作と異なる結果が返される
|
|
265
|
-
|
|
266
|
-
**対応**:
|
|
267
|
-
1. バグを修正
|
|
268
|
-
2. Phase Aのテストを再実行
|
|
269
|
-
3. PRを作成してマージ
|
|
270
|
-
4. Phase Bを再実行
|
|
271
|
-
|
|
272
|
-
### 2. テストコードの問題
|
|
273
|
-
|
|
274
|
-
**特徴**:
|
|
275
|
-
- テストの期待値が間違っている
|
|
276
|
-
- テストのセットアップが不適切
|
|
277
|
-
|
|
278
|
-
**重要**: **実装に合わせてテストを変更してはいけない**
|
|
279
|
-
|
|
280
|
-
**対応**:
|
|
281
|
-
1. テストの期待値が仕様と一致しているか確認
|
|
282
|
-
2. 仕様が正しい場合のみテストを修正
|
|
283
|
-
3. 仕様が変更された場合は、ステークホルダーに確認
|
|
284
|
-
|
|
285
|
-
### 3. 環境の問題
|
|
286
|
-
|
|
287
|
-
**特徴**:
|
|
288
|
-
- ローカルでは成功するがCI/CDで失敗
|
|
289
|
-
- データベースや外部サービスの接続エラー
|
|
290
|
-
|
|
291
|
-
**対応**:
|
|
292
|
-
1. 環境変数を確認
|
|
293
|
-
2. 依存サービスの起動状態を確認
|
|
294
|
-
3. ネットワーク設定を確認
|
|
295
|
-
4. タイムゾーンなどの環境依存要因を確認
|
|
296
|
-
|
|
297
|
-
### 4. 仕様変更
|
|
298
|
-
|
|
299
|
-
**特徴**:
|
|
300
|
-
- 以前は成功していたテストが失敗
|
|
301
|
-
- 機能追加や仕様変更後に発生
|
|
302
|
-
|
|
303
|
-
**対応**:
|
|
304
|
-
1. ステークホルダーに仕様変更を確認
|
|
305
|
-
2. 仕様変更が正しい場合、テストを更新
|
|
306
|
-
3. 関連ドキュメントを更新
|
|
307
|
-
|
|
308
|
-
## Phase別の対応フロー
|
|
309
|
-
|
|
310
|
-
### Phase Aで失敗した場合
|
|
311
|
-
|
|
312
|
-
```
|
|
313
|
-
Phase A失敗
|
|
314
|
-
↓
|
|
315
|
-
ローカルで修正
|
|
316
|
-
↓
|
|
317
|
-
ローカルでPhase Aを再実行
|
|
318
|
-
↓
|
|
319
|
-
すべて成功?
|
|
320
|
-
YES → コミット → プッシュ → CI/CD自動実行
|
|
321
|
-
NO → 修正を続ける
|
|
322
|
-
↓
|
|
323
|
-
CI/CD成功?
|
|
324
|
-
YES → PRレビュー依頼
|
|
325
|
-
NO → ローカルで修正 → 再プッシュ
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
**重要**: Phase Aが成功するまでPRを作成しない
|
|
329
|
-
|
|
330
|
-
### Phase Bで失敗した場合
|
|
331
|
-
|
|
332
|
-
```
|
|
333
|
-
Phase B失敗
|
|
334
|
-
↓
|
|
335
|
-
問題を特定
|
|
336
|
-
↓
|
|
337
|
-
バグ修正のPRを作成
|
|
338
|
-
↓
|
|
339
|
-
Phase Aを通過させる(CI/CD自動実行)
|
|
340
|
-
↓
|
|
341
|
-
PRをマージ
|
|
342
|
-
↓
|
|
343
|
-
Phase Bを再実行
|
|
344
|
-
↓
|
|
345
|
-
すべて成功?
|
|
346
|
-
YES → リリースタグ作成
|
|
347
|
-
NO → 再度バグ修正
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
**重要**: Phase Bで見つかった問題は、必ず**PR → Phase A → マージ**のフローを経て修正
|
|
351
|
-
|
|
352
|
-
## トラブルシューティングチェックリスト
|
|
353
|
-
|
|
354
|
-
### 単体テスト失敗時
|
|
355
|
-
|
|
356
|
-
- [ ] テストケースを単独で実行して確認
|
|
357
|
-
- [ ] 実装コードのロジックを確認
|
|
358
|
-
- [ ] テストの期待値が仕様と一致しているか確認
|
|
359
|
-
- [ ] モックやスタブが正しく設定されているか確認
|
|
360
|
-
- [ ] テストデータが適切か確認
|
|
361
|
-
|
|
362
|
-
### 統合テスト失敗時
|
|
363
|
-
|
|
364
|
-
- [ ] データベースが起動しているか
|
|
365
|
-
- [ ] データベースの接続設定が正しいか
|
|
366
|
-
- [ ] テストデータが準備されているか
|
|
367
|
-
- [ ] 外部サービスのモックが適切か
|
|
368
|
-
- [ ] トランザクションが適切にロールバックされているか
|
|
369
|
-
|
|
370
|
-
### E2Eテスト失敗時
|
|
371
|
-
|
|
372
|
-
- [ ] アプリケーションが起動しているか
|
|
373
|
-
- [ ] セレクターが正しいか(最新のHTMLに対応)
|
|
374
|
-
- [ ] 待機時間が十分か
|
|
375
|
-
- [ ] テストブラウザのバージョンが適切か
|
|
376
|
-
- [ ] スクリーンショットで状態を確認
|
|
377
|
-
|
|
378
|
-
### パフォーマンステスト失敗時
|
|
379
|
-
|
|
380
|
-
- [ ] 負荷生成ツールが正しく動作しているか
|
|
381
|
-
- [ ] ターゲットサーバーのリソースが十分か
|
|
382
|
-
- [ ] ネットワーク帯域が十分か
|
|
383
|
-
- [ ] テストシナリオが適切か
|
|
384
|
-
- [ ] 閾値設定が現実的か
|
|
385
|
-
|
|
386
|
-
### セキュリティテスト失敗時
|
|
387
|
-
|
|
388
|
-
- [ ] 脆弱性の重要度を確認(Critical/High/Medium/Low)
|
|
389
|
-
- [ ] 誤検知(False Positive)ではないか確認
|
|
390
|
-
- [ ] 該当箇所のコードを確認
|
|
391
|
-
- [ ] 修正方法を検討
|
|
392
|
-
- [ ] 修正後、再スキャンで検証
|
|
393
|
-
|
|
394
|
-
## よくあるエラーと解決方法
|
|
395
|
-
|
|
396
|
-
### Error: Cannot find module
|
|
397
|
-
|
|
398
|
-
**原因**: 依存パッケージがインストールされていない
|
|
399
|
-
|
|
400
|
-
**解決方法**:
|
|
401
|
-
```bash
|
|
402
|
-
# Node.js
|
|
403
|
-
npm install
|
|
404
|
-
|
|
405
|
-
# Java
|
|
406
|
-
./gradlew build
|
|
407
|
-
|
|
408
|
-
# PHP
|
|
409
|
-
composer install
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
### Error: Port already in use
|
|
413
|
-
|
|
414
|
-
**原因**: 別のプロセスがポートを使用している
|
|
415
|
-
|
|
416
|
-
**解決方法**:
|
|
417
|
-
```bash
|
|
418
|
-
# 使用中のポートを確認
|
|
419
|
-
lsof -i :3000
|
|
420
|
-
|
|
421
|
-
# プロセスを終了
|
|
422
|
-
kill -9 <PID>
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
### Error: Database connection refused
|
|
426
|
-
|
|
427
|
-
**原因**: データベースが起動していない
|
|
428
|
-
|
|
429
|
-
**解決方法**:
|
|
430
|
-
```bash
|
|
431
|
-
# Dockerの場合
|
|
432
|
-
docker-compose up -d postgres
|
|
433
|
-
|
|
434
|
-
# ローカルの場合
|
|
435
|
-
sudo service postgresql start
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
### Error: Timeout waiting for element
|
|
439
|
-
|
|
440
|
-
**原因**: 要素の表示に時間がかかっている
|
|
441
|
-
|
|
442
|
-
**解決方法**:
|
|
443
|
-
```typescript
|
|
444
|
-
// 待機時間を延長
|
|
445
|
-
await page.waitForSelector('button', { timeout: 30000 });
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
## 緊急時の対応
|
|
449
|
-
|
|
450
|
-
### Phase Aで繰り返し失敗する場合
|
|
451
|
-
|
|
452
|
-
1. **一時的にCI/CDをスキップ**(推奨しない)
|
|
453
|
-
- 緊急の場合のみ
|
|
454
|
-
- 必ず後で修正
|
|
455
|
-
|
|
456
|
-
2. **別のブランチで調査**
|
|
457
|
-
```bash
|
|
458
|
-
git checkout -b debug/test-failure
|
|
459
|
-
# 調査と修正
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
3. **チームメンバーに相談**
|
|
463
|
-
- 同じ問題に遭遇していないか確認
|
|
464
|
-
- ペアプログラミングで解決
|
|
465
|
-
|
|
466
|
-
### Phase Bで致命的なバグが見つかった場合
|
|
467
|
-
|
|
468
|
-
1. **リリースを延期**
|
|
469
|
-
- ステークホルダーに報告
|
|
470
|
-
- 修正スケジュールを調整
|
|
471
|
-
|
|
472
|
-
2. **緊急修正を実施**
|
|
473
|
-
```bash
|
|
474
|
-
# hotfixブランチを作成
|
|
475
|
-
git checkout -b hotfix/critical-bug
|
|
476
|
-
|
|
477
|
-
# 修正を実装
|
|
478
|
-
# Phase A → マージ → Phase B
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
3. **リリース後に問題が発覚した場合**
|
|
482
|
-
- 即座にロールバック
|
|
483
|
-
- hotfixで修正
|
|
484
|
-
- 再リリース
|
|
485
|
-
|
|
486
|
-
## ベストプラクティス
|
|
487
|
-
|
|
488
|
-
### 1. エラーログを必ず保存
|
|
489
|
-
|
|
490
|
-
```bash
|
|
491
|
-
# ログをファイルに保存
|
|
492
|
-
npm test 2>&1 | tee test-output.log
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
### 2. 再現手順を記録
|
|
496
|
-
|
|
497
|
-
```markdown
|
|
498
|
-
## 再現手順
|
|
499
|
-
1. `npm test` を実行
|
|
500
|
-
2. `tests/unit/calculator.test.ts` が失敗
|
|
501
|
-
3. エラーメッセージ: "Expected: 60, Received: 70"
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
### 3. 失敗したテストは必ず修正してからマージ
|
|
505
|
-
|
|
506
|
-
**絶対にしてはいけないこと**:
|
|
507
|
-
- ❌ テストをコメントアウトしてスキップ
|
|
508
|
-
- ❌ `expect(true).toBe(true)` のようなダミーテストに変更
|
|
509
|
-
- ❌ 「後で直す」と言ってマージ
|
|
510
|
-
|
|
511
|
-
### 4. TDDの原則を守る
|
|
512
|
-
|
|
513
|
-
- テストが失敗したら、まず実装を疑う
|
|
514
|
-
- 実装を修正してテストを通す
|
|
515
|
-
- テストを変更するのは、仕様変更時のみ
|
|
516
|
-
|
|
517
|
-
## 次のステップ
|
|
518
|
-
|
|
519
|
-
- [テスト実行フロー](./test-execution-flow.md): Phase A/Bの詳細
|
|
520
|
-
- [TDDサイクル](./tdd-cycle.md): テスト駆動開発の実践方法
|
|
521
|
-
- [リリースフロー](../release/release-flow.md): テスト成功後のリリース手順
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
# テスト計画フロー
|
|
2
|
-
|
|
3
|
-
> **Michi 固有ワークフロー**: このテスト計画フロー(Phase 0.3-0.4, Phase 1, Phase A/B/3)は Michi 独自の拡張機能です。cc-sdd 標準には含まれません。
|
|
4
|
-
>
|
|
5
|
-
> `/michi:spec-design` コマンドを使用すると、設計完了後に自動的に Phase 0.3-0.4 へのガイダンスが表示されます。
|
|
6
|
-
|
|
7
|
-
このドキュメントでは、michiを使用したプロジェクトでのテスト計画の流れを説明します。
|
|
8
|
-
|
|
9
|
-
## Phase 0.3: テストタイプの選択
|
|
10
|
-
|
|
11
|
-
要件定義・設計完了後、テスト仕様書作成前に、どのテストタイプが必要かを決定します。
|
|
12
|
-
|
|
13
|
-
### テストタイプの選択基準
|
|
14
|
-
|
|
15
|
-
| テストタイプ | 実施タイミング | 必須/任意 | 選択基準 |
|
|
16
|
-
|------------|--------------|---------|---------|
|
|
17
|
-
| 単体テスト | Phase A(PR前) | **必須** | すべてのプロジェクトで実施 |
|
|
18
|
-
| 統合テスト | Phase B(リリース前) | **推奨** | 複数コンポーネントが連携するシステム |
|
|
19
|
-
| E2Eテスト | Phase B(リリース前) | **推奨** | ユーザーインターフェースを持つアプリケーション |
|
|
20
|
-
| パフォーマンステスト | Phase B(リリース前) | 任意 | 高負荷が予想される、レスポンスタイムが重要 |
|
|
21
|
-
| セキュリティテスト | Phase B(リリース前) | 任意 | 機密データを扱う、外部公開API |
|
|
22
|
-
|
|
23
|
-
### 判断フローチャート
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
[プロジェクト開始]
|
|
27
|
-
↓
|
|
28
|
-
単体テストは必須
|
|
29
|
-
↓
|
|
30
|
-
複数コンポーネントが連携する?
|
|
31
|
-
YES → 統合テスト: 推奨
|
|
32
|
-
NO → スキップ可能
|
|
33
|
-
↓
|
|
34
|
-
ユーザーインターフェースがある?
|
|
35
|
-
YES → E2Eテスト: 推奨
|
|
36
|
-
NO → スキップ可能
|
|
37
|
-
↓
|
|
38
|
-
高負荷やレスポンスタイムが重要?
|
|
39
|
-
YES → パフォーマンステスト: 実施
|
|
40
|
-
NO → スキップ可能
|
|
41
|
-
↓
|
|
42
|
-
機密データや外部公開API?
|
|
43
|
-
YES → セキュリティテスト: 実施
|
|
44
|
-
NO → スキップ可能
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Phase 0.4: テスト仕様書の作成
|
|
48
|
-
|
|
49
|
-
Phase 0.3で選択したテストタイプごとに、テスト仕様書を作成します。
|
|
50
|
-
|
|
51
|
-
### 使用するテンプレート
|
|
52
|
-
|
|
53
|
-
- **単体テスト**: `docs/user-guide/templates/test-specs/unit-test-spec-template.md`
|
|
54
|
-
- **統合テスト**: `docs/user-guide/templates/test-specs/integration-test-spec-template.md`
|
|
55
|
-
- **E2Eテスト**: `docs/user-guide/templates/test-specs/e2e-test-spec-template.md`
|
|
56
|
-
- **パフォーマンステスト**: `docs/user-guide/templates/test-specs/performance-test-spec-template.md`
|
|
57
|
-
- **セキュリティテスト**: `docs/user-guide/templates/test-specs/security-test-spec-template.md`
|
|
58
|
-
|
|
59
|
-
### 作成手順
|
|
60
|
-
|
|
61
|
-
1. テンプレートをプロジェクトの `tests/specs/` ディレクトリにコピー
|
|
62
|
-
2. `{{プレースホルダー}}` を実際の値に置き換え
|
|
63
|
-
3. テストケースを具体的に記述
|
|
64
|
-
4. レビューを実施
|
|
65
|
-
|
|
66
|
-
## Phase 0.5: タスク分割 (spec-tasks)
|
|
67
|
-
|
|
68
|
-
Phase 0.4までのテスト仕様書をもとに、実装タスク一覧(tasks.md)を作成します。
|
|
69
|
-
|
|
70
|
-
tasks.mdには、Phase 1(環境構築)からPhase 5(リリース実行)までの全タスクを含めます。
|
|
71
|
-
|
|
72
|
-
## Phase 0.6: タスクのJIRA同期
|
|
73
|
-
|
|
74
|
-
Phase 0.5で作成したtasks.mdをもとに、JIRAでEpic/Story/Subtaskを作成します。
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
# JIRAに同期
|
|
78
|
-
michi jira:sync <feature>
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
自動的に:
|
|
82
|
-
- Epic作成: `[<project-name>] <feature>`
|
|
83
|
-
- Story作成: 各実装タスク(Phase 1〜5)
|
|
84
|
-
- Subtask作成: テスト、レビュータスク
|
|
85
|
-
|
|
86
|
-
### タスクの優先順位
|
|
87
|
-
|
|
88
|
-
1. **高優先度**: Phase 1(環境構築)、Phase 2(TDD実装)
|
|
89
|
-
2. **中優先度**: Phase A(PR前テスト)、Phase 3(追加QA)
|
|
90
|
-
3. **低優先度**: Phase B(リリース前テスト)、Phase 4-5(リリース準備)
|
|
91
|
-
|
|
92
|
-
## Phase 1: 環境構築・基盤整備
|
|
93
|
-
|
|
94
|
-
Phase 0.6までのテスト計画が完了したら、Phase 1で実装環境とテスト環境を整備します。
|
|
95
|
-
|
|
96
|
-
### 実施内容
|
|
97
|
-
|
|
98
|
-
- プロジェクト初期化
|
|
99
|
-
- 依存関係インストール(FastAPI, SQLAlchemy, pytest等)
|
|
100
|
-
- DB接続設定
|
|
101
|
-
- テスト環境の準備(pytest, vitest, JUnit等)
|
|
102
|
-
- テストデータの準備(fixtures, seed等)
|
|
103
|
-
|
|
104
|
-
### 単体テスト環境のセットアップ例
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
# Node.js
|
|
108
|
-
npm install -D vitest @vitest/ui
|
|
109
|
-
|
|
110
|
-
# Java (Gradle)
|
|
111
|
-
# build.gradleにJUnit 5依存関係を追加
|
|
112
|
-
# testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'
|
|
113
|
-
|
|
114
|
-
# PHP
|
|
115
|
-
composer require --dev phpunit/phpunit
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### 統合テスト/E2Eテスト環境
|
|
119
|
-
|
|
120
|
-
- テスト用データベースの準備
|
|
121
|
-
- 外部サービスのモック環境
|
|
122
|
-
- ブラウザ自動化ツール(E2Eの場合)
|
|
123
|
-
|
|
124
|
-
### テストデータの準備
|
|
125
|
-
|
|
126
|
-
**データ準備の原則:**
|
|
127
|
-
- **独立性**: 各テストは独立して実行可能
|
|
128
|
-
- **再現性**: 同じ入力で同じ結果が得られる
|
|
129
|
-
- **クリーンアップ**: テスト後にデータをクリーンアップ
|
|
130
|
-
|
|
131
|
-
**データ準備方法:**
|
|
132
|
-
|
|
133
|
-
```javascript
|
|
134
|
-
// Node.js例
|
|
135
|
-
beforeEach(async () => {
|
|
136
|
-
await db.truncate('users');
|
|
137
|
-
await db.seed('test-users.json');
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
afterEach(async () => {
|
|
141
|
-
await db.truncate('users');
|
|
142
|
-
});
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
### テストディレクトリ構造
|
|
146
|
-
|
|
147
|
-
```
|
|
148
|
-
tests/
|
|
149
|
-
├── specs/ # テスト仕様書(Phase 0.4で作成)
|
|
150
|
-
│ ├── unit-test-spec.md
|
|
151
|
-
│ ├── integration-test-spec.md
|
|
152
|
-
│ └── e2e-test-spec.md
|
|
153
|
-
├── unit/ # 単体テスト(Phase 2で作成)
|
|
154
|
-
│ ├── services/
|
|
155
|
-
│ └── utils/
|
|
156
|
-
├── integration/ # 統合テスト(Phase 2で作成、必要に応じて)
|
|
157
|
-
│ ├── api/
|
|
158
|
-
│ └── database/
|
|
159
|
-
├── e2e/ # E2Eテスト(Phase 2で作成、必要に応じて)
|
|
160
|
-
│ ├── user-flows/
|
|
161
|
-
│ └── critical-paths/
|
|
162
|
-
├── performance/ # パフォーマンステスト(Phase 2で作成、任意)
|
|
163
|
-
└── security/ # セキュリティテスト(Phase 2で作成、任意)
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
## チェックリスト
|
|
167
|
-
|
|
168
|
-
テスト計画と環境構築が完了したら、以下をチェックしてください:
|
|
169
|
-
|
|
170
|
-
- [ ] Phase 0.3: 必要なテストタイプを選択した
|
|
171
|
-
- [ ] Phase 0.4: すべてのテストタイプの仕様書を作成した
|
|
172
|
-
- [ ] Phase 0.5: tasks.mdを作成した
|
|
173
|
-
- [ ] Phase 0.6: JIRAでEpic/Story/Subtaskを作成した
|
|
174
|
-
- [ ] Phase 1: テスト環境をセットアップした
|
|
175
|
-
- [ ] Phase 1: テストデータ準備の仕組みを実装した
|
|
176
|
-
- [ ] Phase 1: テストディレクトリ構造を作成した
|
|
177
|
-
|
|
178
|
-
## 次のステップ
|
|
179
|
-
|
|
180
|
-
Phase 1(環境構築)が完了したら、Phase 2(TDD実装)に進んでください:
|
|
181
|
-
|
|
182
|
-
- [TDDサイクル](./tdd-cycle.md): Phase 2でのテスト駆動開発の実践方法
|
|
183
|
-
- [テスト実行フロー](./test-execution-flow.md): Phase A/B/3でのテスト実行
|
|
184
|
-
- [テスト失敗時の対応](./test-failure-handling.md): テスト失敗時の対処方法
|
|
185
|
-
- [ワークフローガイド](../guides/workflow.md): Phase 0.0〜Phase 5の全体像
|