@sk8metal/michi-cli 0.10.1 → 0.11.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.
Files changed (104) hide show
  1. package/README.md +77 -847
  2. package/dist/scripts/phase-runner.js +1 -1
  3. package/dist/scripts/phase-runner.js.map +1 -1
  4. package/dist/scripts/utils/multi-repo-validator.d.ts +18 -0
  5. package/dist/scripts/utils/multi-repo-validator.d.ts.map +1 -1
  6. package/dist/scripts/utils/multi-repo-validator.js +42 -0
  7. package/dist/scripts/utils/multi-repo-validator.js.map +1 -1
  8. package/dist/scripts/utils/tasks-format-validator.js +3 -3
  9. package/dist/scripts/utils/tasks-format-validator.js.map +1 -1
  10. package/docs/README.md +20 -83
  11. package/docs/getting-started/configuration.md +379 -0
  12. package/docs/getting-started/installation.md +59 -0
  13. package/docs/getting-started/quick-start.md +76 -0
  14. package/docs/guides/ai-tools.md +311 -0
  15. package/docs/guides/atlassian-integration.md +116 -0
  16. package/docs/guides/claude-code.md +155 -0
  17. package/docs/guides/multi-repo.md +117 -0
  18. package/docs/guides/workflow.md +382 -0
  19. package/docs/reference/ai-commands.md +92 -0
  20. package/docs/reference/cli.md +756 -0
  21. package/docs/reference/environment-variables.md +192 -0
  22. package/docs/troubleshooting.md +543 -0
  23. package/package.json +1 -1
  24. package/scripts/phase-runner.ts +1 -1
  25. package/scripts/utils/__tests__/multi-repo-validator.test.ts +159 -1
  26. package/scripts/utils/multi-repo-validator.ts +50 -0
  27. package/scripts/utils/tasks-format-validator.ts +3 -3
  28. package/templates/claude/agents/e2e-first-planner/AGENT.md +1 -1
  29. package/templates/claude/agents/pr-resolver/AGENT.md +15 -3
  30. package/templates/claude/commands/michi/e2e-plan.md +1 -1
  31. package/templates/claude/commands/michi/spec-design.md +2 -2
  32. package/templates/claude/commands/michi/spec-tasks.md +156 -0
  33. package/templates/claude/commands/michi/test-planning.md +1 -1
  34. package/templates/claude/commands/michi/validate-design.md +3 -3
  35. package/templates/claude/commands/michi-multi-repo/impl-all.md +30 -1
  36. package/templates/claude/commands/michi-multi-repo/propagate-specs.md +14 -1
  37. package/templates/claude/commands/michi-multi-repo/spec-review.md +16 -2
  38. package/templates/claude-agent/agents/repo-spec-executor.md +1 -1
  39. package/templates/claude-agent/commands/michi/spec-tasks.md +117 -0
  40. package/templates/claude-agent/rules/code-size-monitor.md +26 -0
  41. package/templates/claude-agent/rules/code-size-rules.md +32 -0
  42. package/templates/codex/AGENTS.override.md +1 -1
  43. package/templates/codex/rules/README.md +2 -2
  44. package/templates/cursor/commands/michi/spec-tasks.md +117 -0
  45. package/templates/michi/cc-sdd-overrides/settings/rules/design-review-michi.md +1 -1
  46. package/docs/context.md +0 -59
  47. package/docs/michi-development/contributing/development.md +0 -341
  48. package/docs/michi-development/contributing/release.md +0 -365
  49. package/docs/michi-development/design/config-unification.md +0 -733
  50. package/docs/michi-development/design/design-config-current-state.md +0 -330
  51. package/docs/michi-development/design/design-config-implementation.md +0 -628
  52. package/docs/michi-development/design/design-config-migration.md +0 -952
  53. package/docs/michi-development/design/design-config-security.md +0 -771
  54. package/docs/michi-development/design/design-config-solution.md +0 -583
  55. package/docs/michi-development/design/design-config-testing.md +0 -892
  56. package/docs/michi-development/testing/manual-verification-flow.md +0 -871
  57. package/docs/michi-development/testing/manual-verification-other-tools.md +0 -1279
  58. package/docs/michi-development/testing/manual-verification-troubleshooting.md +0 -122
  59. package/docs/michi-development/testing/pre-publish-checklist.md +0 -560
  60. package/docs/michi-development/testing-strategy.md +0 -87
  61. package/docs/plan.md +0 -275
  62. package/docs/user-guide/getting-started/github-token-setup.md +0 -510
  63. package/docs/user-guide/getting-started/new-repository-setup.md +0 -704
  64. package/docs/user-guide/getting-started/quick-start.md +0 -212
  65. package/docs/user-guide/getting-started/setup.md +0 -819
  66. package/docs/user-guide/guides/agent-skills-integration.md +0 -222
  67. package/docs/user-guide/guides/customization.md +0 -537
  68. package/docs/user-guide/guides/internationalization.md +0 -540
  69. package/docs/user-guide/guides/migration-guide.md +0 -138
  70. package/docs/user-guide/guides/multi-project.md +0 -368
  71. package/docs/user-guide/guides/multi-repo-guide.md +0 -1590
  72. package/docs/user-guide/guides/phase-automation.md +0 -419
  73. package/docs/user-guide/guides/workflow.md +0 -574
  74. package/docs/user-guide/hands-on/README.md +0 -142
  75. package/docs/user-guide/hands-on/claude-agent-setup.md +0 -597
  76. package/docs/user-guide/hands-on/claude-setup.md +0 -452
  77. package/docs/user-guide/hands-on/cursor-setup.md +0 -353
  78. package/docs/user-guide/hands-on/troubleshooting.md +0 -964
  79. package/docs/user-guide/hands-on/verification-checklist.md +0 -439
  80. package/docs/user-guide/hands-on/workflow-walkthrough.md +0 -1078
  81. package/docs/user-guide/reference/config.md +0 -589
  82. package/docs/user-guide/reference/multi-repo-api.md +0 -771
  83. package/docs/user-guide/reference/quick-reference.md +0 -297
  84. package/docs/user-guide/reference/security-test-payloads.md +0 -50
  85. package/docs/user-guide/reference/tasks-template.md +0 -550
  86. package/docs/user-guide/release/ci-setup-java.md +0 -114
  87. package/docs/user-guide/release/ci-setup-nodejs.md +0 -94
  88. package/docs/user-guide/release/ci-setup-php.md +0 -102
  89. package/docs/user-guide/release/ci-setup-troubleshooting.md +0 -94
  90. package/docs/user-guide/release/ci-setup.md +0 -188
  91. package/docs/user-guide/release/release-flow.md +0 -476
  92. package/docs/user-guide/templates/test-specs/README.md +0 -173
  93. package/docs/user-guide/templates/test-specs/e2e-test-spec-template.md +0 -553
  94. package/docs/user-guide/templates/test-specs/integration-test-spec-template.md +0 -435
  95. package/docs/user-guide/templates/test-specs/performance-test-spec-template.md +0 -454
  96. package/docs/user-guide/templates/test-specs/security-test-spec-template.md +0 -625
  97. package/docs/user-guide/templates/test-specs/unit-test-spec-template.md +0 -328
  98. package/docs/user-guide/testing/integration-tests.md +0 -312
  99. package/docs/user-guide/testing/tdd-cycle.md +0 -349
  100. package/docs/user-guide/testing/test-execution-flow.md +0 -396
  101. package/docs/user-guide/testing/test-failure-handling.md +0 -521
  102. package/docs/user-guide/testing/test-planning-flow.md +0 -185
  103. package/docs/user-guide/testing-strategy.md +0 -185
  104. package/docs/verification-guide.md +0 -518
@@ -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の全体像