@einja/dev-cli 0.1.6
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 +179 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +49 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +243 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +23 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/sync.d.ts +7 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +294 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/sync.test.d.ts +2 -0
- package/dist/commands/sync.test.d.ts.map +1 -0
- package/dist/commands/sync.test.js +593 -0
- package/dist/commands/sync.test.js.map +1 -0
- package/dist/commands/task-loop.d.ts +11 -0
- package/dist/commands/task-loop.d.ts.map +1 -0
- package/dist/commands/task-loop.js +81 -0
- package/dist/commands/task-loop.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/file-system.d.ts +39 -0
- package/dist/lib/file-system.d.ts.map +1 -0
- package/dist/lib/file-system.js +79 -0
- package/dist/lib/file-system.js.map +1 -0
- package/dist/lib/mcp-config.d.ts +43 -0
- package/dist/lib/mcp-config.d.ts.map +1 -0
- package/dist/lib/mcp-config.js +109 -0
- package/dist/lib/mcp-config.js.map +1 -0
- package/dist/lib/mcp-config.test.d.ts +2 -0
- package/dist/lib/mcp-config.test.d.ts.map +1 -0
- package/dist/lib/mcp-config.test.js +285 -0
- package/dist/lib/mcp-config.test.js.map +1 -0
- package/dist/lib/merger.d.ts +41 -0
- package/dist/lib/merger.d.ts.map +1 -0
- package/dist/lib/merger.js +164 -0
- package/dist/lib/merger.js.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.d.ts +35 -0
- package/dist/lib/preset-update/cli-repo-detector.d.ts.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.js +83 -0
- package/dist/lib/preset-update/cli-repo-detector.js.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.test.d.ts +2 -0
- package/dist/lib/preset-update/cli-repo-detector.test.d.ts.map +1 -0
- package/dist/lib/preset-update/cli-repo-detector.test.js +120 -0
- package/dist/lib/preset-update/cli-repo-detector.test.js.map +1 -0
- package/dist/lib/preset-update/file-copier.d.ts +59 -0
- package/dist/lib/preset-update/file-copier.d.ts.map +1 -0
- package/dist/lib/preset-update/file-copier.js +220 -0
- package/dist/lib/preset-update/file-copier.js.map +1 -0
- package/dist/lib/preset-update/file-copier.test.d.ts +2 -0
- package/dist/lib/preset-update/file-copier.test.d.ts.map +1 -0
- package/dist/lib/preset-update/file-copier.test.js +297 -0
- package/dist/lib/preset-update/file-copier.test.js.map +1 -0
- package/dist/lib/preset-update/preset-finder.d.ts +39 -0
- package/dist/lib/preset-update/preset-finder.d.ts.map +1 -0
- package/dist/lib/preset-update/preset-finder.js +92 -0
- package/dist/lib/preset-update/preset-finder.js.map +1 -0
- package/dist/lib/preset-update/preset-finder.test.d.ts +2 -0
- package/dist/lib/preset-update/preset-finder.test.d.ts.map +1 -0
- package/dist/lib/preset-update/preset-finder.test.js +128 -0
- package/dist/lib/preset-update/preset-finder.test.js.map +1 -0
- package/dist/lib/preset.d.ts +14 -0
- package/dist/lib/preset.d.ts.map +1 -0
- package/dist/lib/preset.js +52 -0
- package/dist/lib/preset.js.map +1 -0
- package/dist/lib/sync/backup-manager.d.ts +50 -0
- package/dist/lib/sync/backup-manager.d.ts.map +1 -0
- package/dist/lib/sync/backup-manager.js +117 -0
- package/dist/lib/sync/backup-manager.js.map +1 -0
- package/dist/lib/sync/backup-manager.test.d.ts +2 -0
- package/dist/lib/sync/backup-manager.test.d.ts.map +1 -0
- package/dist/lib/sync/backup-manager.test.js +155 -0
- package/dist/lib/sync/backup-manager.test.js.map +1 -0
- package/dist/lib/sync/batch-processor.d.ts +27 -0
- package/dist/lib/sync/batch-processor.d.ts.map +1 -0
- package/dist/lib/sync/batch-processor.js +46 -0
- package/dist/lib/sync/batch-processor.js.map +1 -0
- package/dist/lib/sync/batch-processor.test.d.ts +2 -0
- package/dist/lib/sync/batch-processor.test.d.ts.map +1 -0
- package/dist/lib/sync/batch-processor.test.js +110 -0
- package/dist/lib/sync/batch-processor.test.js.map +1 -0
- package/dist/lib/sync/category-validator.d.ts +36 -0
- package/dist/lib/sync/category-validator.d.ts.map +1 -0
- package/dist/lib/sync/category-validator.js +46 -0
- package/dist/lib/sync/category-validator.js.map +1 -0
- package/dist/lib/sync/category-validator.test.d.ts +2 -0
- package/dist/lib/sync/category-validator.test.d.ts.map +1 -0
- package/dist/lib/sync/category-validator.test.js +89 -0
- package/dist/lib/sync/category-validator.test.js.map +1 -0
- package/dist/lib/sync/conflict-reporter.d.ts +57 -0
- package/dist/lib/sync/conflict-reporter.d.ts.map +1 -0
- package/dist/lib/sync/conflict-reporter.js +81 -0
- package/dist/lib/sync/conflict-reporter.js.map +1 -0
- package/dist/lib/sync/conflict-reporter.test.d.ts +2 -0
- package/dist/lib/sync/conflict-reporter.test.d.ts.map +1 -0
- package/dist/lib/sync/conflict-reporter.test.js +132 -0
- package/dist/lib/sync/conflict-reporter.test.js.map +1 -0
- package/dist/lib/sync/diff-engine.d.ts +28 -0
- package/dist/lib/sync/diff-engine.d.ts.map +1 -0
- package/dist/lib/sync/diff-engine.js +118 -0
- package/dist/lib/sync/diff-engine.js.map +1 -0
- package/dist/lib/sync/diff-engine.test.d.ts +2 -0
- package/dist/lib/sync/diff-engine.test.d.ts.map +1 -0
- package/dist/lib/sync/diff-engine.test.js +133 -0
- package/dist/lib/sync/diff-engine.test.js.map +1 -0
- package/dist/lib/sync/file-filter.d.ts +40 -0
- package/dist/lib/sync/file-filter.d.ts.map +1 -0
- package/dist/lib/sync/file-filter.js +171 -0
- package/dist/lib/sync/file-filter.js.map +1 -0
- package/dist/lib/sync/file-filter.test.d.ts +2 -0
- package/dist/lib/sync/file-filter.test.d.ts.map +1 -0
- package/dist/lib/sync/file-filter.test.js +179 -0
- package/dist/lib/sync/file-filter.test.js.map +1 -0
- package/dist/lib/sync/hash-cache.d.ts +34 -0
- package/dist/lib/sync/hash-cache.d.ts.map +1 -0
- package/dist/lib/sync/hash-cache.js +51 -0
- package/dist/lib/sync/hash-cache.js.map +1 -0
- package/dist/lib/sync/hash-cache.test.d.ts +2 -0
- package/dist/lib/sync/hash-cache.test.d.ts.map +1 -0
- package/dist/lib/sync/hash-cache.test.js +110 -0
- package/dist/lib/sync/hash-cache.test.js.map +1 -0
- package/dist/lib/sync/integration.test.d.ts +2 -0
- package/dist/lib/sync/integration.test.d.ts.map +1 -0
- package/dist/lib/sync/integration.test.js +317 -0
- package/dist/lib/sync/integration.test.js.map +1 -0
- package/dist/lib/sync/marker-processor.d.ts +54 -0
- package/dist/lib/sync/marker-processor.d.ts.map +1 -0
- package/dist/lib/sync/marker-processor.js +208 -0
- package/dist/lib/sync/marker-processor.js.map +1 -0
- package/dist/lib/sync/marker-processor.test.d.ts +2 -0
- package/dist/lib/sync/marker-processor.test.d.ts.map +1 -0
- package/dist/lib/sync/marker-processor.test.js +245 -0
- package/dist/lib/sync/marker-processor.test.js.map +1 -0
- package/dist/lib/sync/metadata-manager.d.ts +46 -0
- package/dist/lib/sync/metadata-manager.d.ts.map +1 -0
- package/dist/lib/sync/metadata-manager.js +129 -0
- package/dist/lib/sync/metadata-manager.js.map +1 -0
- package/dist/lib/sync/metadata-manager.test.d.ts +2 -0
- package/dist/lib/sync/metadata-manager.test.d.ts.map +1 -0
- package/dist/lib/sync/metadata-manager.test.js +137 -0
- package/dist/lib/sync/metadata-manager.test.js.map +1 -0
- package/dist/lib/sync/performance.test.d.ts +2 -0
- package/dist/lib/sync/performance.test.d.ts.map +1 -0
- package/dist/lib/sync/performance.test.js +126 -0
- package/dist/lib/sync/performance.test.js.map +1 -0
- package/dist/types/index.d.ts +59 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/preset-update.d.ts +106 -0
- package/dist/types/preset-update.d.ts.map +1 -0
- package/dist/types/preset-update.js +5 -0
- package/dist/types/preset-update.js.map +1 -0
- package/dist/types/sync.d.ts +169 -0
- package/dist/types/sync.d.ts.map +1 -0
- package/dist/types/sync.js +19 -0
- package/dist/types/sync.js.map +1 -0
- package/package.json +72 -0
- package/presets/minimal/.claude/agents/einja/docs/docs-updater.md +161 -0
- package/presets/minimal/.claude/agents/einja/frontend/design-engineer.md +685 -0
- package/presets/minimal/.claude/agents/einja/frontend/frontend-architect.md +747 -0
- package/presets/minimal/.claude/agents/einja/frontend/frontend-coder.md +441 -0
- package/presets/minimal/.claude/agents/einja/git/conflict-resolver.md +148 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-design-generator.md +462 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-qa-generator.md +466 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-requirements-generator.md +416 -0
- package/presets/minimal/.claude/agents/einja/specs/spec-tasks-generator.md +608 -0
- package/presets/minimal/.claude/agents/einja/task/task-committer.md +82 -0
- package/presets/minimal/.claude/agents/einja/task/task-executer.md +352 -0
- package/presets/minimal/.claude/agents/einja/task/task-modification-analyzer.md +369 -0
- package/presets/minimal/.claude/agents/einja/task/task-qa.md +74 -0
- package/presets/minimal/.claude/agents/einja/task/task-reviewer.md +169 -0
- package/presets/minimal/.claude/commands/einja/frontend-implement.md +322 -0
- package/presets/minimal/.claude/commands/einja/spec-create.md +254 -0
- package/presets/minimal/.claude/commands/einja/start-dev.md +98 -0
- package/presets/minimal/.claude/commands/einja/sync-cursor-commands.md +203 -0
- package/presets/minimal/.claude/commands/einja/task-exec.md +390 -0
- package/presets/minimal/.claude/commands/einja/update-docs-by-task-specs.md +448 -0
- package/presets/minimal/.claude/hooks/einja/biome-format.sh +49 -0
- package/presets/minimal/.claude/hooks/einja/design-doc-check.sh +61 -0
- package/presets/minimal/.claude/hooks/einja/detect-secrets.sh +62 -0
- package/presets/minimal/.claude/hooks/einja/large-file-warning.sh +42 -0
- package/presets/minimal/.claude/hooks/einja/playwright-resize.sh +36 -0
- package/presets/minimal/.claude/hooks/einja/typecheck.sh +37 -0
- package/presets/minimal/.claude/hooks/einja/unset-volta-recursion.sh +32 -0
- package/presets/minimal/.claude/hooks/einja/validate-git-commit.sh +239 -0
- package/presets/minimal/.claude/hooks/einja/warn-index-ts.sh +34 -0
- package/presets/minimal/.claude/hooks/einja/warn-relative-import.sh +48 -0
- package/presets/minimal/.claude/settings.json +174 -0
- package/presets/minimal/.claude/skills/einja/api-development/SKILL.md +14 -0
- package/presets/minimal/.claude/skills/einja/backend-architecture/SKILL.md +14 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/SKILL.md +120 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/reference/naming-conventions.md +107 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/reference/prohibited-patterns.md +169 -0
- package/presets/minimal/.claude/skills/einja/coding-standards/reference/typescript-rules.md +247 -0
- package/presets/minimal/.claude/skills/einja/component-design/SKILL.md +109 -0
- package/presets/minimal/.claude/skills/einja/component-design/reference/directory-structure.md +117 -0
- package/presets/minimal/.claude/skills/einja/component-design/reference/props-patterns.md +159 -0
- package/presets/minimal/.claude/skills/einja/component-design/reference/styling-guide.md +200 -0
- package/presets/minimal/.claude/skills/einja/conflict-resolver/SKILL.md +190 -0
- package/presets/minimal/.claude/skills/einja/frontend-development/SKILL.md +14 -0
- package/presets/minimal/.claude/skills/einja/general-context-loader/SKILL.md +254 -0
- package/presets/minimal/.claude/skills/einja/output-format/SKILL.md +137 -0
- package/presets/minimal/.claude/skills/einja/spec-context-loader/SKILL.md +177 -0
- package/presets/minimal/.claude/skills/einja/task-commit/SKILL.md +269 -0
- package/presets/minimal/.claude/skills/einja/task-qa/SKILL.md +306 -0
- package/presets/minimal/.claude/skills/einja/task-qa/reference/failure-patterns.md +69 -0
- package/presets/minimal/.claude/skills/einja/task-qa/reference/troubleshooting.md +65 -0
- package/presets/minimal/.claude/skills/einja/task-qa/reference/usage-patterns.md +52 -0
- package/presets/minimal/.claude/skills/einja/task-qa/templates/qa-test-template.md +128 -0
- package/presets/minimal/preset.yaml +111 -0
- package/presets/minimal/symlinks.json +45 -0
- package/scaffolds/.mcp.json +45 -0
- package/scaffolds/CLAUDE.md.template +318 -0
- package/scaffolds/steering/README.md +170 -0
- package/scaffolds/steering/acceptance-criteria-and-qa-guide.md +415 -0
- package/scaffolds/steering/architecture.md +481 -0
- package/scaffolds/steering/branch-strategy.md +362 -0
- package/scaffolds/steering/commit-rules.md +217 -0
- package/scaffolds/steering/db-schema-design.md +609 -0
- package/scaffolds/steering/development/api-development.md +783 -0
- package/scaffolds/steering/development/backend-architecture.md +731 -0
- package/scaffolds/steering/development/frontend-development.md +1537 -0
- package/scaffolds/steering/development/review-guidelines.md +365 -0
- package/scaffolds/steering/development/testing-strategy.md +819 -0
- package/scaffolds/steering/development-workflow.md +429 -0
- package/scaffolds/steering/infrastructure/deployment.md +277 -0
- package/scaffolds/steering/infrastructure/environment-variables.md +298 -0
- package/scaffolds/steering/product.md +540 -0
- package/scaffolds/steering/task-management.md +367 -0
- package/templates/README.md +159 -0
- package/templates/design-simple.md.template +172 -0
- package/templates/design.md.template +327 -0
- package/templates/qa-test.md.template +125 -0
- package/templates/requirements.md.template +254 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
# タスク管理ガイドライン
|
|
2
|
+
|
|
3
|
+
このドキュメントでは、プロジェクトのタスク管理における階層構造、GitHub Issue管理、用語定義を説明します。
|
|
4
|
+
|
|
5
|
+
## タスク管理の方法
|
|
6
|
+
|
|
7
|
+
このプロジェクトでは**GitHub Issue**を使用してタスクを管理します。
|
|
8
|
+
|
|
9
|
+
### 基本構造
|
|
10
|
+
|
|
11
|
+
- **1 spec = 1 GitHub Issue**
|
|
12
|
+
- 各specフォルダ(`docs/specs/issues/issue{issue番号}-{機能名}/`)に対して1つのGitHub Issueを作成
|
|
13
|
+
- requirements.mdとdesign.mdはファイルとして保持
|
|
14
|
+
- タスク一覧のみGitHub Issueで管理
|
|
15
|
+
|
|
16
|
+
### GitHub Issueの構造
|
|
17
|
+
|
|
18
|
+
Issue本文には以下のセクションを含みます:
|
|
19
|
+
|
|
20
|
+
```markdown
|
|
21
|
+
## AS-IS
|
|
22
|
+
<!-- requirements.mdから抽出した現在の状態・問題点 -->
|
|
23
|
+
|
|
24
|
+
## TO-BE
|
|
25
|
+
<!-- requirements.mdから抽出した実装後の期待する状態 -->
|
|
26
|
+
|
|
27
|
+
## 対応方針
|
|
28
|
+
<!-- design.mdから抽出した技術的アプローチ、使用ライブラリ、実装方針 -->
|
|
29
|
+
|
|
30
|
+
## タスク一覧
|
|
31
|
+
|
|
32
|
+
### Phase 1: [フェーズ名]
|
|
33
|
+
|
|
34
|
+
- [ ] 1.1 [タスクグループ名]
|
|
35
|
+
|
|
36
|
+
- 1.1.1 [タスク名]
|
|
37
|
+
- サブタスク内容
|
|
38
|
+
- **要件**: Story X
|
|
39
|
+
- **依存関係**: なし
|
|
40
|
+
- **完了条件**: [テスト条件]が通ること(AC[番号]を満たす)
|
|
41
|
+
- **対応設計**: design.md「[セクション名]」セクション
|
|
42
|
+
- **シナリオテスト**: なし(基盤構築タスク、UIフロー未実装のため)
|
|
43
|
+
|
|
44
|
+
- 1.1.2 [タスク名]
|
|
45
|
+
- サブタスク内容
|
|
46
|
+
- **要件**: Story X
|
|
47
|
+
- **依存関係**: 1.1.1
|
|
48
|
+
- **完了条件**: [テスト条件]が通ること(AC[番号]を満たす)
|
|
49
|
+
- **対応設計**: design.md「[セクション名]」セクション
|
|
50
|
+
- **シナリオテスト**: シナリオ1 Step 1-3(部分実行)
|
|
51
|
+
|
|
52
|
+
- [ ] 1.2 [タスクグループ名]
|
|
53
|
+
|
|
54
|
+
- 1.2.1 [タスク名]
|
|
55
|
+
- サブタスク内容
|
|
56
|
+
- **要件**: Story X
|
|
57
|
+
- **依存関係**: 1.1
|
|
58
|
+
- **完了条件**: ...
|
|
59
|
+
- **対応設計**: design.md「[セクション名]」セクション
|
|
60
|
+
- **シナリオテスト**: シナリオ2 Step 1-5
|
|
61
|
+
|
|
62
|
+
### Phase 2: [フェーズ名]
|
|
63
|
+
|
|
64
|
+
- [ ] 2.1 [タスクグループ名]
|
|
65
|
+
|
|
66
|
+
- 2.1.1 [タスク名]
|
|
67
|
+
- サブタスク内容
|
|
68
|
+
- **要件**: Story X
|
|
69
|
+
- **依存関係**: Phase 1完了
|
|
70
|
+
- **完了条件**: ...
|
|
71
|
+
- **対応設計**: design.md「[セクション名]」セクション
|
|
72
|
+
- **シナリオテスト**: シナリオ3 全ステップ
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### タスクグループのステータス管理
|
|
76
|
+
|
|
77
|
+
GitHub Issueのチェックボックスでタスクグループのステータスを管理します:
|
|
78
|
+
|
|
79
|
+
**未着手**:
|
|
80
|
+
```markdown
|
|
81
|
+
- [ ] 1.1 タスクグループ名
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**完了**(チェックボックスをON):
|
|
85
|
+
```markdown
|
|
86
|
+
- [x] 1.1 タスクグループ名
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**注意**: タスクグループの完了時、GitHub Issueのチェックボックス更新はユーザーが明示的に指示した場合のみ行います。`/task-exec`コマンドは自動でIssueを更新しません。
|
|
90
|
+
|
|
91
|
+
### Issueのライフサイクル
|
|
92
|
+
|
|
93
|
+
1. **Issue作成**: `/spec-create`コマンドで仕様書作成時に自動生成
|
|
94
|
+
2. **タスクグループ実行**: `/task-exec #{issue_number} {タスクグループ番号}`でタスクグループを実行
|
|
95
|
+
3. **タスクグループ完了**: 実装・テスト・レビュー完了後、チェックボックスをON(手動更新)
|
|
96
|
+
4. **Issue完了**: すべてのタスクグループが完了したらIssueをClose
|
|
97
|
+
|
|
98
|
+
## タスク階層の用語定義
|
|
99
|
+
|
|
100
|
+
プロジェクトのタスク管理では、以下の4階層を使用します。
|
|
101
|
+
|
|
102
|
+
### タスク階層一覧表
|
|
103
|
+
|
|
104
|
+
| 階層 | 番号形式 | 粒度・定義 | 成果物 | Issueでの書式 |
|
|
105
|
+
|------|----------|------------|--------|---------------|
|
|
106
|
+
| Phase | 1, 2, 3 | 一連のACを確認できる単位(2-3個、全Phase完了で全AC網羅) | リリース | `### Phase 1: [名前]` |
|
|
107
|
+
| タスクグループ | X.Y | 1つまたは一部のACが確認できる単位(大きめの1PRでもOK) | 1PR・マージ・デプロイ | `- [ ] 1.1 [名前]` |
|
|
108
|
+
| タスク | X.Y.Z | コミット単位(15分〜1時間程度) | 個別コミット | ` - 1.1.1 [名前]` + メタデータ |
|
|
109
|
+
| サブタスク | なし | タスク内の詳細作業(任意) | タスクの一部 | ` - [内容]`(任意) |
|
|
110
|
+
|
|
111
|
+
### Phase完了確認タスクグループ
|
|
112
|
+
|
|
113
|
+
各Phaseの最後には、必ず**Phase完了確認**タスクグループを配置します:
|
|
114
|
+
|
|
115
|
+
```markdown
|
|
116
|
+
## Phase 1完了確認
|
|
117
|
+
|
|
118
|
+
- [ ] 1.X フェーズ1完了条件確認
|
|
119
|
+
|
|
120
|
+
- 1.X.1 フェーズ1全タスク完了確認
|
|
121
|
+
- タスクグループ1.1〜1.N の全タスク完了確認
|
|
122
|
+
- 全シナリオテストの成功確認
|
|
123
|
+
- コードレビュー完了確認
|
|
124
|
+
- デプロイ可能な状態であることを確認
|
|
125
|
+
- **要件**: Story 1, Story 2(該当する全Story)
|
|
126
|
+
- **依存関係**: 1.N.Z(Phase内の最後のタスク番号)
|
|
127
|
+
- **完了条件**: フェーズ1の全タスクグループが完了し、受け入れ基準**AC1.1〜AC1.N**を満たすことが確認できること
|
|
128
|
+
- **対応設計**: design.md 全セクション
|
|
129
|
+
- **シナリオテスト**: 全シナリオ(リグレッション確認)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**目的**:
|
|
133
|
+
- Phase内の全タスクが完了していることを明示的に確認
|
|
134
|
+
- 次Phaseへの移行条件を完了条件に明記
|
|
135
|
+
- QAチェックポイントとして機能
|
|
136
|
+
|
|
137
|
+
### 粒度の判断基準
|
|
138
|
+
|
|
139
|
+
| 階層 | ✅ 適切 | ❌ 不適切 |
|
|
140
|
+
|------|---------|----------|
|
|
141
|
+
| **Phase** | 2-3個で全AC網羅、機能的区切りで分割 | 4個以上、細かすぎる分割 |
|
|
142
|
+
| **タスクグループ** | 縦切り(フルスタック)、AC検証可能、1PR単位 | 横切り(画面/レイヤー/クラス単位)、設定1個だけ |
|
|
143
|
+
| **タスク** | 1コミット単位、具体的な作業 | 曖昧な作業、複数日かかる作業 |
|
|
144
|
+
|
|
145
|
+
### 🔴 ATDDタスクグループ設計原則
|
|
146
|
+
|
|
147
|
+
**タスクグループ = ACを検証可能にする単位**
|
|
148
|
+
|
|
149
|
+
ATDDの本質は「受け入れ基準(AC)を中心にタスクを分解する」こと。
|
|
150
|
+
タスクグループ完了時に、対応するACがデプロイして検証可能な状態になっていなければならない。
|
|
151
|
+
|
|
152
|
+
**原則: 縦切り(フルスタック)で分割、横切り(レイヤー/画面)は❌**
|
|
153
|
+
|
|
154
|
+
✅ **縦切り**(1機能をフルスタックで):
|
|
155
|
+
- Domain → Infrastructure → UseCase → API → UI を1タスクグループで
|
|
156
|
+
- 完了時にACが検証可能
|
|
157
|
+
|
|
158
|
+
❌ **横切り**(レイヤー/画面ごと):
|
|
159
|
+
- Domain層の実装 / Infra層の実装 / UseCase実装 / API実装 / UI実装
|
|
160
|
+
- 各層単体では検証不可能
|
|
161
|
+
|
|
162
|
+
### ❌ アンチパターン(絶対にやってはいけない分割)
|
|
163
|
+
|
|
164
|
+
**パターン1: 画面ごとの分割**
|
|
165
|
+
```
|
|
166
|
+
❌ NG例:
|
|
167
|
+
- 3.2 一覧画面の実装
|
|
168
|
+
- 3.3 詳細画面の実装
|
|
169
|
+
- 3.4 新規登録画面の実装
|
|
170
|
+
- 3.5 編集画面の実装
|
|
171
|
+
- 3.6 削除機能の実装
|
|
172
|
+
|
|
173
|
+
✅ OK例:
|
|
174
|
+
- 2.2 CRUD機能の実装(一覧・詳細・作成・編集・削除)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**パターン2: レイヤーごとの分割**
|
|
178
|
+
```
|
|
179
|
+
❌ NG例:
|
|
180
|
+
- 2.1 Domain層の実装(Entity, VO, Repository IF)
|
|
181
|
+
- 2.2 Infrastructure層の実装(Mapper, Repository)
|
|
182
|
+
- 2.3 Application層の実装(UseCase)
|
|
183
|
+
- 2.4 Presentation層の実装(API, UI)
|
|
184
|
+
|
|
185
|
+
✅ OK例:
|
|
186
|
+
- 2.1 招待・パスワード設定機能
|
|
187
|
+
- Domain〜UIまでフルスタックで実装
|
|
188
|
+
- AC3〜AC5を検証可能
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**パターン3: クラスごとの分割**
|
|
192
|
+
```
|
|
193
|
+
❌ NG例(これらはタスクグループではなくタスクレベル(X.Y.Z)であるべき):
|
|
194
|
+
- 2.1 User Entityの実装
|
|
195
|
+
- 2.2 Invitation Entityの実装
|
|
196
|
+
- 2.3 HashedPassword VOの実装
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### メタデータの記述(タスク単位に付与)
|
|
200
|
+
|
|
201
|
+
各タスク(X.Y.Z)には以下のメタデータを**必須**で付与します:
|
|
202
|
+
|
|
203
|
+
```markdown
|
|
204
|
+
- [ ] 1.1 Server Core構築とDB設定
|
|
205
|
+
|
|
206
|
+
- 1.1.1 packages/server-core初期化とtsconfig設定
|
|
207
|
+
- tsconfig.jsonの設定
|
|
208
|
+
- 依存パッケージのインストール
|
|
209
|
+
- **要件**: Story 1
|
|
210
|
+
- **依存関係**: なし
|
|
211
|
+
- **完了条件**: server-coreパッケージが初期化されること(AC1.1を満たす)
|
|
212
|
+
- **対応設計**: design.md「Server Core構築」セクション
|
|
213
|
+
- **シナリオテスト**: なし(基盤構築タスク、UIフロー未実装のため)
|
|
214
|
+
|
|
215
|
+
- 1.1.2 DB接続設定とマイグレーション
|
|
216
|
+
- Prismaスキーマの作成
|
|
217
|
+
- マイグレーションの実行
|
|
218
|
+
- **要件**: Story 1
|
|
219
|
+
- **依存関係**: 1.1.1
|
|
220
|
+
- **完了条件**: DBに接続できること(AC1.2〜AC1.3を満たす)
|
|
221
|
+
- **対応設計**: design.md「DB設計」セクション
|
|
222
|
+
- **シナリオテスト**: なし(DB設定のみ、UIフロー未実装のため)
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**メタデータ項目(全て必須)**:
|
|
226
|
+
- **要件**: 対応するStory番号
|
|
227
|
+
- **依存関係**: なし / X.Y.Z / Phase X完了
|
|
228
|
+
- **完了条件**: AC番号を含む完了条件
|
|
229
|
+
- **対応設計**: design.mdの参照セクション
|
|
230
|
+
- **シナリオテスト**: 該当タスク完了時に実行するシナリオ(該当なければ「なし」と理由を明記)
|
|
231
|
+
|
|
232
|
+
**注意**: サブタスクは**任意**で記載。詳細はrequirements.md/design.mdを参照。
|
|
233
|
+
|
|
234
|
+
### 依存関係の記述形式(重要)
|
|
235
|
+
|
|
236
|
+
**🔴 `pnpm task:loop`スクリプトが認識できる形式のみ使用すること**
|
|
237
|
+
|
|
238
|
+
| 記述形式 | 意味 | 例 |
|
|
239
|
+
|---------|------|-----|
|
|
240
|
+
| `なし` | 依存関係なし | `**依存関係**: なし` |
|
|
241
|
+
| `X.Y` | タスクグループ依存 | `**依存関係**: 1.1` |
|
|
242
|
+
| `X.Y, X.Y` | 複数タスクグループ依存 | `**依存関係**: 1.2, 1.3` |
|
|
243
|
+
| `Phase X完了` | Phase依存 | `**依存関係**: Phase 1完了` |
|
|
244
|
+
|
|
245
|
+
**❌ 使用禁止の形式:**
|
|
246
|
+
- `1.1完了` → スクリプトが認識できない
|
|
247
|
+
- `タスク1.1` → スクリプトが認識できない
|
|
248
|
+
- `1.1、1.2` → 全角カンマは避ける(半角カンマ推奨)
|
|
249
|
+
|
|
250
|
+
## タスク管理のワークフロー
|
|
251
|
+
|
|
252
|
+
> **詳細なフロー(仕様書作成からレビュー・マージまで)は[開発ワークフロー](development-workflow.md)を参照してください。**
|
|
253
|
+
|
|
254
|
+
### 1. タスクグループを選定・実行
|
|
255
|
+
- `/task-exec #{issue_number} {タスクグループ番号}`コマンドを実行
|
|
256
|
+
- タスクグループ番号は必須引数(例: `1.1`, `2.3`)
|
|
257
|
+
- executer → reviewer → qa の3段階で実行
|
|
258
|
+
|
|
259
|
+
### 2. タスクを順次実装し、コミット
|
|
260
|
+
- 各タスク(1.1.1, 1.1.2...)完了ごとにコミット
|
|
261
|
+
- コミットメッセージにタスク内容を記載
|
|
262
|
+
- 例: `feat(server-core): packages/server-core初期化とtsconfig設定`
|
|
263
|
+
- コミットルールは[コミットルール](commit-rules.md)を参照
|
|
264
|
+
|
|
265
|
+
### 3. タスクグループ完了時にPR作成
|
|
266
|
+
- 全タスクが完了したらPR作成
|
|
267
|
+
- PR単位でレビュー・デプロイ・QA実施
|
|
268
|
+
- PRタイトル: `[タスクグループ番号] タスクグループ名`(例: `[1.1] Server Core構築とDB設定`)
|
|
269
|
+
|
|
270
|
+
### 4. Issue更新(手動)
|
|
271
|
+
- タスクグループ完了後、GitHub Issueのチェックボックスを手動でON
|
|
272
|
+
- または、ユーザーが明示的に指示した場合のみ自動更新
|
|
273
|
+
- すべてのタスクグループが完了したら、IssueをClose
|
|
274
|
+
|
|
275
|
+
## Vibe-Kanbanタスク作成時の必須情報
|
|
276
|
+
|
|
277
|
+
### タスクタイトル形式
|
|
278
|
+
```
|
|
279
|
+
[タスクグループ番号] タスクグループ名
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**例**: `[1.1] Server Core構築とDB設定`
|
|
283
|
+
|
|
284
|
+
### タスク説明形式
|
|
285
|
+
|
|
286
|
+
```markdown
|
|
287
|
+
## GitHub Issue
|
|
288
|
+
#{issue_number}
|
|
289
|
+
|
|
290
|
+
## タスクグループ番号
|
|
291
|
+
<タスクグループ番号>
|
|
292
|
+
|
|
293
|
+
## 概要
|
|
294
|
+
<タスクグループの概要>
|
|
295
|
+
|
|
296
|
+
## タスク
|
|
297
|
+
<GitHub Issueから抽出したタスク一覧>
|
|
298
|
+
|
|
299
|
+
## 依存関係
|
|
300
|
+
<依存するタスクグループ番号>
|
|
301
|
+
|
|
302
|
+
## 完了条件
|
|
303
|
+
<受け入れ基準を含む完了条件>
|
|
304
|
+
|
|
305
|
+
## 対応設計
|
|
306
|
+
<design.mdの参照箇所>
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
**例**:
|
|
310
|
+
```markdown
|
|
311
|
+
## GitHub Issue
|
|
312
|
+
#17
|
|
313
|
+
|
|
314
|
+
## タスクグループ番号
|
|
315
|
+
1.1
|
|
316
|
+
|
|
317
|
+
## 概要
|
|
318
|
+
packages/server-coreの初期化からDB接続設定まで、Server Coreの基盤構築を完了
|
|
319
|
+
|
|
320
|
+
## タスク
|
|
321
|
+
- 1.1.1 packages/server-core初期化とtsconfig設定
|
|
322
|
+
- 1.1.2 DB接続設定とマイグレーション
|
|
323
|
+
|
|
324
|
+
## 依存関係
|
|
325
|
+
なし
|
|
326
|
+
|
|
327
|
+
## 完了条件
|
|
328
|
+
server-coreパッケージが動作し、DBに接続できること(AC1.1を満たす)
|
|
329
|
+
|
|
330
|
+
## 対応設計
|
|
331
|
+
design.md「Server Core構築」セクション
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
## コマンドリファレンス
|
|
335
|
+
|
|
336
|
+
### タスク管理関連コマンド
|
|
337
|
+
|
|
338
|
+
**仕様書作成とIssue生成**:
|
|
339
|
+
```bash
|
|
340
|
+
/spec-create [タスク内容の説明]
|
|
341
|
+
```
|
|
342
|
+
- requirements.md、design.mdを作成し、GitHub Issueを自動生成
|
|
343
|
+
|
|
344
|
+
**タスクグループ実行**:
|
|
345
|
+
```bash
|
|
346
|
+
/task-exec #{issue_number} {タスクグループ番号}
|
|
347
|
+
```
|
|
348
|
+
- Issue番号とタスクグループ番号は両方必須
|
|
349
|
+
- executer → reviewer → qa の3段階で実行
|
|
350
|
+
- QA合格後は追加指示待ち状態に入る
|
|
351
|
+
- GitHub Issue更新はユーザーの明示的指示時のみ
|
|
352
|
+
|
|
353
|
+
**自動ループ実行**:
|
|
354
|
+
```bash
|
|
355
|
+
pnpm task:loop <issue番号>
|
|
356
|
+
pnpm task:loop <issue番号> --max-group <番号> # 指定番号まで実行
|
|
357
|
+
pnpm task:loop <issue番号> --branch <ブランチ> # ベースブランチ指定
|
|
358
|
+
```
|
|
359
|
+
- 着手可能なタスクグループを並列でVibe-Kanbanに登録
|
|
360
|
+
- Done状態を監視して次のタスクを自動開始
|
|
361
|
+
- **前提**: `npx @einja/cli init` 実行済み、Claude Code インストール済み
|
|
362
|
+
|
|
363
|
+
**仕様書からドキュメント更新**:
|
|
364
|
+
```bash
|
|
365
|
+
/update-docs-by-task-specs [タスク仕様書ディレクトリパス]
|
|
366
|
+
```
|
|
367
|
+
- タスク仕様書の内容をfeature仕様書とsteering仕様書に反映
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# ドキュメントテンプレート
|
|
2
|
+
|
|
3
|
+
このディレクトリには、新規タスク作成時に使用する公式テンプレートが格納されています。
|
|
4
|
+
|
|
5
|
+
## 使用方法
|
|
6
|
+
|
|
7
|
+
### 新規タスクの要件定義書を作成する場合
|
|
8
|
+
|
|
9
|
+
1. `requirements.md.template` をコピー
|
|
10
|
+
2. `docs/specs/issues/[issue番号]-[機能名]/requirements.md` として保存
|
|
11
|
+
3. テンプレート内のコメントに従って内容を記入
|
|
12
|
+
4. **「受け入れ基準(Acceptance Criteria)」セクションは必ず記入すること**
|
|
13
|
+
|
|
14
|
+
### 新規タスクの設計書を作成する場合
|
|
15
|
+
|
|
16
|
+
1. `design.md.template` をコピー
|
|
17
|
+
2. `docs/specs/issues/[issue番号]-[機能名]/design.md` として保存
|
|
18
|
+
3. テンプレート内のコメントに従って内容を記入
|
|
19
|
+
|
|
20
|
+
## 重要事項
|
|
21
|
+
|
|
22
|
+
### 受け入れ基準(Acceptance Criteria)について
|
|
23
|
+
|
|
24
|
+
- **受け入れ基準(Acceptance Criteria)セクションは必須です**
|
|
25
|
+
- QAエージェント(task-qa)はこのセクションを参照してテストシナリオを作成します
|
|
26
|
+
- セクションの構造を変更しないでください
|
|
27
|
+
- Given/When/Then形式を使用してください
|
|
28
|
+
|
|
29
|
+
### Given/When/Then形式の書き方
|
|
30
|
+
|
|
31
|
+
受け入れ基準は以下の形式で記載してください:
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
- [ ] Given: [前提条件]
|
|
35
|
+
When: [実行する操作]
|
|
36
|
+
Then: [期待される結果]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**良い例**:
|
|
40
|
+
```markdown
|
|
41
|
+
- [ ] Given: ログインページにアクセスした
|
|
42
|
+
When: 有効なメールアドレスを入力して送信
|
|
43
|
+
Then: 成功メッセージが表示され、メールが送信される
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**悪い例**:
|
|
47
|
+
```markdown
|
|
48
|
+
- [ ] ログインフォームが実装されている
|
|
49
|
+
- [ ] メール送信機能が動作すること
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 受け入れ基準作成のガイドライン
|
|
53
|
+
|
|
54
|
+
詳細は `docs/einja/steering/acceptance-criteria-and-qa-guide.md` を参照してください。
|
|
55
|
+
|
|
56
|
+
#### Do(推奨)
|
|
57
|
+
- 振る舞い・入力・観測可能な結果をセットで書く(Given/When/Then)
|
|
58
|
+
- ビジネス価値やユーザー影響が分かる文脈を添える
|
|
59
|
+
- 正常系に加え、代表的な異常・境界ケースを列挙する
|
|
60
|
+
- 観測手段(APIレスポンス、イベント、DB状態など)を明示する
|
|
61
|
+
- 実装と無関係な用語で書き、内部構造への言及は避ける
|
|
62
|
+
|
|
63
|
+
#### Don't(非推奨)
|
|
64
|
+
- 「ファイルが存在する」「〇〇を返すクラスがある」など構造・命名のみを確認させる
|
|
65
|
+
- 単一の肯定文で完結させて振る舞いの条件や観測結果を書かない
|
|
66
|
+
- テストレベルを曖昧にし、誰がどの観点で検証するか不明瞭にする
|
|
67
|
+
- 期待結果を「問題ないこと」「成功すること」で済ませる
|
|
68
|
+
- 実装手段(特定フレームワーク、DBテーブル構造など)を強制する
|
|
69
|
+
|
|
70
|
+
## テンプレート一覧
|
|
71
|
+
|
|
72
|
+
### requirements.md.template
|
|
73
|
+
|
|
74
|
+
要件定義書のテンプレートです。
|
|
75
|
+
|
|
76
|
+
**重要なセクション**:
|
|
77
|
+
- **受け入れ基準(Acceptance Criteria)**: QAエージェント(task-qa)がこのセクションを参照してテストシナリオを作成します
|
|
78
|
+
- **AC番号体系**: AC1.1, AC1.2 のように、ストーリー番号.連番 で一意に識別
|
|
79
|
+
- **検証レベル**: Unit/Integration/E2E を必ず指定
|
|
80
|
+
- **検証者**: task-executer または task-qa を明記
|
|
81
|
+
|
|
82
|
+
**使い方**:
|
|
83
|
+
1. ストーリーごとに受け入れ基準を記載
|
|
84
|
+
2. 各 AC に番号・検証レベル・検証者を付与
|
|
85
|
+
3. Given/When/Then 形式で振る舞いを明確に記述
|
|
86
|
+
|
|
87
|
+
**含まれるセクション**:
|
|
88
|
+
- 概要
|
|
89
|
+
- AS-IS/TO-BE
|
|
90
|
+
- ビジネス価値
|
|
91
|
+
- スコープ
|
|
92
|
+
- 画面要件(該当する場合)
|
|
93
|
+
- ユーザーストーリー
|
|
94
|
+
- **受け入れ基準(必須)**
|
|
95
|
+
- 詳細なビジネス要件
|
|
96
|
+
- 非機能要件
|
|
97
|
+
- 技術的制約
|
|
98
|
+
- 依存関係
|
|
99
|
+
- リスクと対策
|
|
100
|
+
- 成功指標
|
|
101
|
+
|
|
102
|
+
### design.md.template
|
|
103
|
+
|
|
104
|
+
設計書のテンプレートです。以下のセクションを含みます:
|
|
105
|
+
|
|
106
|
+
- システムアーキテクチャ
|
|
107
|
+
- データモデル
|
|
108
|
+
- API仕様
|
|
109
|
+
- フロントエンドコンポーネント構造
|
|
110
|
+
- 技術選定
|
|
111
|
+
- セキュリティ考慮事項
|
|
112
|
+
- パフォーマンス考慮事項
|
|
113
|
+
- テスト戦略
|
|
114
|
+
- マイグレーション戦略(該当する場合)
|
|
115
|
+
|
|
116
|
+
### design-simple.md.template
|
|
117
|
+
|
|
118
|
+
設計書の簡易版テンプレートです。シンプルな機能向けに必須セクションのみを含みます。
|
|
119
|
+
|
|
120
|
+
**用途**:
|
|
121
|
+
- 小規模・中規模の機能追加
|
|
122
|
+
- 既存アーキテクチャに準拠する機能
|
|
123
|
+
- 複雑なパフォーマンス最適化が不要な機能
|
|
124
|
+
|
|
125
|
+
**含まれるセクション**:
|
|
126
|
+
- システムアーキテクチャ
|
|
127
|
+
- データモデル
|
|
128
|
+
- API仕様
|
|
129
|
+
- セキュリティ考慮事項
|
|
130
|
+
- テスト戦略
|
|
131
|
+
|
|
132
|
+
**使い分けの基準**:
|
|
133
|
+
- **design-simple.md.template を使用**: 既存パターンに従う標準的な CRUD 機能、シンプルなビジネスロジック
|
|
134
|
+
- **design.md.template を使用**: 新しいアーキテクチャパターンの導入、複雑な状態管理、大規模なパフォーマンス最適化が必要な機能
|
|
135
|
+
|
|
136
|
+
### qa-test.md.template
|
|
137
|
+
|
|
138
|
+
QA テスト結果記録のテンプレートです。
|
|
139
|
+
|
|
140
|
+
**用途**:
|
|
141
|
+
- task-qa が Integration/E2E テストの結果を記録
|
|
142
|
+
- テストシナリオと実施結果を構造化して管理
|
|
143
|
+
|
|
144
|
+
**構造**:
|
|
145
|
+
- 受け入れ条件(requirements.md から自動抽出)
|
|
146
|
+
- テストシナリオ(Integration/E2E 別)
|
|
147
|
+
- 実施結果とステータス
|
|
148
|
+
- 失敗時の原因分類と推奨アクション
|
|
149
|
+
|
|
150
|
+
**保存場所**: `docs/specs/tasks/[task-dir]/qa-tests/phaseN/X-Y.md`
|
|
151
|
+
|
|
152
|
+
## 関連ドキュメント
|
|
153
|
+
|
|
154
|
+
- [タスク管理ガイド](../docs/einja/steering/task-management.md)
|
|
155
|
+
- [受け入れ基準とQAガイド](../docs/einja/steering/acceptance-criteria-and-qa-guide.md)
|
|
156
|
+
|
|
157
|
+
## サポート
|
|
158
|
+
|
|
159
|
+
テンプレートの使用方法や記載内容について不明な点がある場合は、既存の実装例を参照してください。
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# [機能名] 設計書(簡易版)
|
|
2
|
+
|
|
3
|
+
<!-- このテンプレートはシンプルな機能の設計書作成時に使用してください -->
|
|
4
|
+
<!-- 複雑な機能の場合は design.md.template を使用してください -->
|
|
5
|
+
|
|
6
|
+
## システムアーキテクチャ
|
|
7
|
+
|
|
8
|
+
### システム構成図
|
|
9
|
+
|
|
10
|
+
```mermaid
|
|
11
|
+
graph TD
|
|
12
|
+
A[コンポーネントA] --> B[コンポーネントB]
|
|
13
|
+
B --> C[コンポーネントC]
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### データフロー
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
sequenceDiagram
|
|
20
|
+
participant Client
|
|
21
|
+
participant Server
|
|
22
|
+
participant Database
|
|
23
|
+
|
|
24
|
+
Client->>Server: リクエスト
|
|
25
|
+
Server->>Database: データ取得
|
|
26
|
+
Database->>Server: データ返却
|
|
27
|
+
Server->>Client: レスポンス
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## データモデル
|
|
31
|
+
|
|
32
|
+
### Prismaスキーマ
|
|
33
|
+
|
|
34
|
+
```prisma
|
|
35
|
+
// 主要なデータモデルを記載
|
|
36
|
+
|
|
37
|
+
model User {
|
|
38
|
+
id String @id @default(cuid())
|
|
39
|
+
name String
|
|
40
|
+
email String @unique
|
|
41
|
+
createdAt DateTime @default(now())
|
|
42
|
+
updatedAt DateTime @updatedAt
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### データモデル説明
|
|
47
|
+
<!-- 各モデルの役割と主要フィールドの説明を記載 -->
|
|
48
|
+
|
|
49
|
+
## API仕様
|
|
50
|
+
|
|
51
|
+
### エンドポイント一覧
|
|
52
|
+
|
|
53
|
+
| メソッド | エンドポイント | 説明 | 認証 |
|
|
54
|
+
|---------|--------------|------|------|
|
|
55
|
+
| POST | /api/resource | リソース作成 | 必要 |
|
|
56
|
+
| GET | /api/resource/:id | リソース取得 | 必要 |
|
|
57
|
+
| PUT | /api/resource/:id | リソース更新 | 必要 |
|
|
58
|
+
| DELETE | /api/resource/:id | リソース削除 | 必要 |
|
|
59
|
+
|
|
60
|
+
### API詳細
|
|
61
|
+
|
|
62
|
+
#### POST /api/resource
|
|
63
|
+
|
|
64
|
+
**リクエスト**:
|
|
65
|
+
```typescript
|
|
66
|
+
{
|
|
67
|
+
"field1": "value1",
|
|
68
|
+
"field2": "value2"
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**レスポンス(成功時)**:
|
|
73
|
+
```typescript
|
|
74
|
+
{
|
|
75
|
+
"success": true,
|
|
76
|
+
"data": {
|
|
77
|
+
"id": "resource_id",
|
|
78
|
+
"field1": "value1",
|
|
79
|
+
"field2": "value2",
|
|
80
|
+
"createdAt": "2024-01-01T00:00:00Z"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**レスポンス(エラー時)**:
|
|
86
|
+
```typescript
|
|
87
|
+
{
|
|
88
|
+
"success": false,
|
|
89
|
+
"error": {
|
|
90
|
+
"code": "ERROR_CODE",
|
|
91
|
+
"message": "エラーメッセージ"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### エラーハンドリング
|
|
97
|
+
|
|
98
|
+
| HTTPステータス | エラーコード | 説明 | 対処方法 |
|
|
99
|
+
|--------------|------------|------|---------|
|
|
100
|
+
| 400 | INVALID_REQUEST | リクエストが不正 | リクエストパラメータを確認 |
|
|
101
|
+
| 401 | UNAUTHORIZED | 認証エラー | 認証情報を確認 |
|
|
102
|
+
| 403 | FORBIDDEN | アクセス権限なし | 権限を確認 |
|
|
103
|
+
| 404 | NOT_FOUND | リソースが見つからない | リソースの存在を確認 |
|
|
104
|
+
| 500 | INTERNAL_ERROR | サーバーエラー | サポートに連絡 |
|
|
105
|
+
|
|
106
|
+
## セキュリティ考慮事項
|
|
107
|
+
|
|
108
|
+
### 認証・認可
|
|
109
|
+
|
|
110
|
+
**認証方式**: <!-- JWT / Session / その他 -->
|
|
111
|
+
|
|
112
|
+
**認可モデル**: <!-- RBAC / ABAC / その他 -->
|
|
113
|
+
|
|
114
|
+
**実装方針**:
|
|
115
|
+
- 認証フロー: <!-- 認証フローを記載 -->
|
|
116
|
+
- 権限チェック: <!-- 権限チェック方法を記載 -->
|
|
117
|
+
|
|
118
|
+
### データ保護
|
|
119
|
+
|
|
120
|
+
**暗号化**:
|
|
121
|
+
- 通信: TLS 1.3
|
|
122
|
+
- 保存データ: <!-- 必要に応じて暗号化方法を記載 -->
|
|
123
|
+
- パスワード: bcrypt(コスト係数: 12)
|
|
124
|
+
|
|
125
|
+
**入力検証**:
|
|
126
|
+
- クライアントサイド: <!-- 検証方法を記載 -->
|
|
127
|
+
- サーバーサイド: <!-- 検証方法を記載 -->
|
|
128
|
+
|
|
129
|
+
### 脆弱性対策
|
|
130
|
+
|
|
131
|
+
| 脆弱性 | 対策 |
|
|
132
|
+
|--------|------|
|
|
133
|
+
| XSS | エスケープ処理、Content Security Policy |
|
|
134
|
+
| CSRF | トークン検証 |
|
|
135
|
+
| SQLインジェクション | Prismaによるパラメータ化クエリ |
|
|
136
|
+
| 機密情報漏洩 | 環境変数による管理 |
|
|
137
|
+
|
|
138
|
+
## テスト戦略
|
|
139
|
+
|
|
140
|
+
### テストレベル
|
|
141
|
+
|
|
142
|
+
| レベル | 対象 | ツール | カバレッジ目標 |
|
|
143
|
+
|--------|------|--------|--------------|
|
|
144
|
+
| Unit | ロジック、ユーティリティ | Vitest | 80%以上 |
|
|
145
|
+
| Integration | API、データベース | Vitest | 70%以上 |
|
|
146
|
+
| E2E | ユーザーシナリオ | Playwright | クリティカルパス |
|
|
147
|
+
|
|
148
|
+
### テストケース設計
|
|
149
|
+
|
|
150
|
+
**単体テスト**:
|
|
151
|
+
- 正常系
|
|
152
|
+
- 異常系
|
|
153
|
+
- 境界値
|
|
154
|
+
|
|
155
|
+
**統合テスト**:
|
|
156
|
+
- APIエンドポイント
|
|
157
|
+
- データベース操作
|
|
158
|
+
- 認証・認可
|
|
159
|
+
|
|
160
|
+
**E2Eテスト**:
|
|
161
|
+
- クリティカルパス(requirements.mdの受け入れ基準に基づく)
|
|
162
|
+
- ユーザーシナリオ
|
|
163
|
+
|
|
164
|
+
## 参考資料
|
|
165
|
+
|
|
166
|
+
### 関連ドキュメント
|
|
167
|
+
- 要件定義書: `requirements.md`
|
|
168
|
+
- QAテスト: `qa-tests/`
|
|
169
|
+
|
|
170
|
+
### 外部リソース
|
|
171
|
+
- [参考ドキュメント1のタイトル](URL)
|
|
172
|
+
- [参考ドキュメント2のタイトル](URL)
|