@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,327 @@
|
|
|
1
|
+
# [機能名] 設計書
|
|
2
|
+
|
|
3
|
+
<!-- このテンプレートは新規タスクの設計書作成時に使用してください -->
|
|
4
|
+
|
|
5
|
+
## システムアーキテクチャ
|
|
6
|
+
|
|
7
|
+
### システム構成図
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
graph TD
|
|
11
|
+
A[コンポーネントA] --> B[コンポーネントB]
|
|
12
|
+
B --> C[コンポーネントC]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### データフロー
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
sequenceDiagram
|
|
19
|
+
participant Client
|
|
20
|
+
participant Server
|
|
21
|
+
participant Database
|
|
22
|
+
|
|
23
|
+
Client->>Server: リクエスト
|
|
24
|
+
Server->>Database: データ取得
|
|
25
|
+
Database->>Server: データ返却
|
|
26
|
+
Server->>Client: レスポンス
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## データモデル
|
|
30
|
+
|
|
31
|
+
### ERD(Entity Relationship Diagram)
|
|
32
|
+
|
|
33
|
+
```mermaid
|
|
34
|
+
erDiagram
|
|
35
|
+
USER ||--o{ ORDER : places
|
|
36
|
+
USER {
|
|
37
|
+
string id PK
|
|
38
|
+
string name
|
|
39
|
+
string email
|
|
40
|
+
}
|
|
41
|
+
ORDER {
|
|
42
|
+
string id PK
|
|
43
|
+
string userId FK
|
|
44
|
+
datetime createdAt
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Prismaスキーマ
|
|
49
|
+
|
|
50
|
+
```prisma
|
|
51
|
+
// 主要なデータモデルを記載
|
|
52
|
+
|
|
53
|
+
model User {
|
|
54
|
+
id String @id @default(cuid())
|
|
55
|
+
name String
|
|
56
|
+
email String @unique
|
|
57
|
+
createdAt DateTime @default(now())
|
|
58
|
+
updatedAt DateTime @updatedAt
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## API仕様
|
|
63
|
+
|
|
64
|
+
### エンドポイント一覧
|
|
65
|
+
|
|
66
|
+
| メソッド | エンドポイント | 説明 | 認証 |
|
|
67
|
+
|---------|--------------|------|------|
|
|
68
|
+
| POST | /api/resource | リソース作成 | 必要 |
|
|
69
|
+
| GET | /api/resource/:id | リソース取得 | 必要 |
|
|
70
|
+
| PUT | /api/resource/:id | リソース更新 | 必要 |
|
|
71
|
+
| DELETE | /api/resource/:id | リソース削除 | 必要 |
|
|
72
|
+
|
|
73
|
+
### API詳細
|
|
74
|
+
|
|
75
|
+
#### POST /api/resource
|
|
76
|
+
|
|
77
|
+
**リクエスト**:
|
|
78
|
+
```typescript
|
|
79
|
+
{
|
|
80
|
+
"field1": "value1",
|
|
81
|
+
"field2": "value2"
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**レスポンス(成功時)**:
|
|
86
|
+
```typescript
|
|
87
|
+
{
|
|
88
|
+
"success": true,
|
|
89
|
+
"data": {
|
|
90
|
+
"id": "resource_id",
|
|
91
|
+
"field1": "value1",
|
|
92
|
+
"field2": "value2",
|
|
93
|
+
"createdAt": "2024-01-01T00:00:00Z"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**レスポンス(エラー時)**:
|
|
99
|
+
```typescript
|
|
100
|
+
{
|
|
101
|
+
"success": false,
|
|
102
|
+
"error": {
|
|
103
|
+
"code": "ERROR_CODE",
|
|
104
|
+
"message": "エラーメッセージ"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### エラーハンドリング
|
|
110
|
+
|
|
111
|
+
| HTTPステータス | エラーコード | 説明 | 対処方法 |
|
|
112
|
+
|--------------|------------|------|---------|
|
|
113
|
+
| 400 | INVALID_REQUEST | リクエストが不正 | リクエストパラメータを確認 |
|
|
114
|
+
| 401 | UNAUTHORIZED | 認証エラー | 認証情報を確認 |
|
|
115
|
+
| 403 | FORBIDDEN | アクセス権限なし | 権限を確認 |
|
|
116
|
+
| 404 | NOT_FOUND | リソースが見つからない | リソースの存在を確認 |
|
|
117
|
+
| 429 | RATE_LIMIT_EXCEEDED | レート制限超過 | 時間を置いて再試行 |
|
|
118
|
+
| 500 | INTERNAL_ERROR | サーバーエラー | サポートに連絡 |
|
|
119
|
+
|
|
120
|
+
## フロントエンドコンポーネント構造
|
|
121
|
+
|
|
122
|
+
### コンポーネント階層
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
Page
|
|
126
|
+
├── Layout
|
|
127
|
+
│ ├── Header
|
|
128
|
+
│ ├── Sidebar
|
|
129
|
+
│ └── Footer
|
|
130
|
+
└── Content
|
|
131
|
+
├── ComponentA
|
|
132
|
+
├── ComponentB
|
|
133
|
+
└── ComponentC
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 主要コンポーネント仕様
|
|
137
|
+
|
|
138
|
+
#### ComponentA
|
|
139
|
+
|
|
140
|
+
**目的**: <!-- コンポーネントの目的を記載 -->
|
|
141
|
+
|
|
142
|
+
**Props**:
|
|
143
|
+
```typescript
|
|
144
|
+
interface ComponentAProps {
|
|
145
|
+
prop1: string;
|
|
146
|
+
prop2: number;
|
|
147
|
+
onAction?: () => void;
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**状態管理**:
|
|
152
|
+
- useState: ローカル状態
|
|
153
|
+
- useContext: グローバル状態(該当する場合)
|
|
154
|
+
|
|
155
|
+
**主要な振る舞い**:
|
|
156
|
+
1. 振る舞い1の説明
|
|
157
|
+
2. 振る舞い2の説明
|
|
158
|
+
|
|
159
|
+
### 状態管理戦略
|
|
160
|
+
|
|
161
|
+
**使用ライブラリ**: <!-- Zustand / React Context / その他 -->
|
|
162
|
+
|
|
163
|
+
**状態の種類**:
|
|
164
|
+
- ローカル状態: コンポーネント内で完結する状態
|
|
165
|
+
- 共有状態: 複数コンポーネント間で共有する状態
|
|
166
|
+
- サーバー状態: APIから取得するデータ
|
|
167
|
+
|
|
168
|
+
## 技術選定
|
|
169
|
+
|
|
170
|
+
### 使用技術スタック
|
|
171
|
+
|
|
172
|
+
| カテゴリ | 技術 | バージョン | 選定理由 |
|
|
173
|
+
|---------|-----|-----------|---------|
|
|
174
|
+
| フレームワーク | Next.js | 15.x | App Routerの活用、パフォーマンス |
|
|
175
|
+
| データベース | PostgreSQL | 16.x | リレーショナルデータモデルに適合 |
|
|
176
|
+
| ORM | Prisma | 5.x | 型安全性、開発効率 |
|
|
177
|
+
| 認証 | NextAuth.js | 5.x | 既存システムとの統合 |
|
|
178
|
+
| UI | Panda CSS + shadcn/ui | latest | デザインシステムとの統合 |
|
|
179
|
+
|
|
180
|
+
### ライブラリ選定
|
|
181
|
+
|
|
182
|
+
#### [ライブラリ名]
|
|
183
|
+
|
|
184
|
+
**用途**: <!-- ライブラリの用途を記載 -->
|
|
185
|
+
|
|
186
|
+
**選定理由**:
|
|
187
|
+
- 理由1
|
|
188
|
+
- 理由2
|
|
189
|
+
|
|
190
|
+
**代替案との比較**:
|
|
191
|
+
- 代替案A: <!-- 採用しなかった理由 -->
|
|
192
|
+
- 代替案B: <!-- 採用しなかった理由 -->
|
|
193
|
+
|
|
194
|
+
## セキュリティ考慮事項
|
|
195
|
+
|
|
196
|
+
### 認証・認可
|
|
197
|
+
|
|
198
|
+
**認証方式**: <!-- JWT / Session / その他 -->
|
|
199
|
+
|
|
200
|
+
**認可モデル**: <!-- RBAC / ABAC / その他 -->
|
|
201
|
+
|
|
202
|
+
**実装方針**:
|
|
203
|
+
- 認証フロー: <!-- 認証フローを記載 -->
|
|
204
|
+
- トークン管理: <!-- トークン管理方法を記載 -->
|
|
205
|
+
- セッション管理: <!-- セッション管理方法を記載 -->
|
|
206
|
+
|
|
207
|
+
### データ保護
|
|
208
|
+
|
|
209
|
+
**暗号化**:
|
|
210
|
+
- 通信: TLS 1.3
|
|
211
|
+
- 保存データ: <!-- 暗号化方法を記載 -->
|
|
212
|
+
- パスワード: bcrypt(コスト係数: 12)
|
|
213
|
+
|
|
214
|
+
**入力検証**:
|
|
215
|
+
- クライアントサイド: <!-- 検証方法を記載 -->
|
|
216
|
+
- サーバーサイド: <!-- 検証方法を記載 -->
|
|
217
|
+
|
|
218
|
+
### 脆弱性対策
|
|
219
|
+
|
|
220
|
+
| 脆弱性 | 対策 |
|
|
221
|
+
|--------|------|
|
|
222
|
+
| XSS | エスケープ処理、Content Security Policy |
|
|
223
|
+
| CSRF | トークン検証 |
|
|
224
|
+
| SQLインジェクション | Prismaによるパラメータ化クエリ |
|
|
225
|
+
| 機密情報漏洩 | 環境変数による管理 |
|
|
226
|
+
|
|
227
|
+
## パフォーマンス考慮事項
|
|
228
|
+
|
|
229
|
+
### パフォーマンス目標
|
|
230
|
+
|
|
231
|
+
| 指標 | 目標値 | 測定方法 |
|
|
232
|
+
|------|--------|---------|
|
|
233
|
+
| First Contentful Paint | < 1.8秒 | Lighthouse |
|
|
234
|
+
| Time to Interactive | < 3.8秒 | Lighthouse |
|
|
235
|
+
| API レスポンス | < 200ms | サーバーログ |
|
|
236
|
+
| データベースクエリ | < 100ms | Prisma logs |
|
|
237
|
+
|
|
238
|
+
### 最適化戦略
|
|
239
|
+
|
|
240
|
+
**フロントエンド**:
|
|
241
|
+
- React.memo / useMemo / useCallback による再レンダリング最適化
|
|
242
|
+
- 画像最適化(Next.js Image コンポーネント)
|
|
243
|
+
- コード分割(動的インポート)
|
|
244
|
+
- キャッシング戦略
|
|
245
|
+
|
|
246
|
+
**バックエンド**:
|
|
247
|
+
- データベースインデックスの最適化
|
|
248
|
+
- N+1問題の回避(Prisma include/select)
|
|
249
|
+
- レスポンスキャッシング
|
|
250
|
+
- CDN活用
|
|
251
|
+
|
|
252
|
+
### データベース設計
|
|
253
|
+
|
|
254
|
+
**インデックス設計**:
|
|
255
|
+
```sql
|
|
256
|
+
-- 主要なインデックスを記載
|
|
257
|
+
CREATE INDEX idx_user_email ON User(email);
|
|
258
|
+
CREATE INDEX idx_order_userId ON Order(userId);
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**クエリ最適化**:
|
|
262
|
+
- よく使われるクエリパターンを記載
|
|
263
|
+
- パフォーマンスボトルネックへの対策
|
|
264
|
+
|
|
265
|
+
## テスト戦略
|
|
266
|
+
|
|
267
|
+
### テストレベル
|
|
268
|
+
|
|
269
|
+
| レベル | 対象 | ツール | カバレッジ目標 |
|
|
270
|
+
|--------|------|--------|--------------|
|
|
271
|
+
| Unit | ロジック、ユーティリティ | Vitest | 80%以上 |
|
|
272
|
+
| Integration | API、データベース | Vitest | 70%以上 |
|
|
273
|
+
| E2E | ユーザーシナリオ | Playwright | クリティカルパス |
|
|
274
|
+
|
|
275
|
+
### テストケース設計
|
|
276
|
+
|
|
277
|
+
**単体テスト**:
|
|
278
|
+
- 正常系
|
|
279
|
+
- 異常系
|
|
280
|
+
- 境界値
|
|
281
|
+
|
|
282
|
+
**統合テスト**:
|
|
283
|
+
- APIエンドポイント
|
|
284
|
+
- データベース操作
|
|
285
|
+
- 認証・認可
|
|
286
|
+
|
|
287
|
+
**E2Eテスト**:
|
|
288
|
+
- クリティカルパス(requirements.mdの受け入れ基準に基づく)
|
|
289
|
+
- ユーザーシナリオ
|
|
290
|
+
|
|
291
|
+
## マイグレーション戦略(該当する場合)
|
|
292
|
+
|
|
293
|
+
### データ移行
|
|
294
|
+
|
|
295
|
+
**移行対象**:
|
|
296
|
+
<!-- 移行するデータを記載 -->
|
|
297
|
+
|
|
298
|
+
**移行手順**:
|
|
299
|
+
1. 手順1
|
|
300
|
+
2. 手順2
|
|
301
|
+
3. 手順3
|
|
302
|
+
|
|
303
|
+
**ロールバック手順**:
|
|
304
|
+
<!-- ロールバック方法を記載 -->
|
|
305
|
+
|
|
306
|
+
### デプロイ戦略
|
|
307
|
+
|
|
308
|
+
**デプロイフロー**:
|
|
309
|
+
1. ステージング環境でのテスト
|
|
310
|
+
2. データベースマイグレーション
|
|
311
|
+
3. アプリケーションデプロイ
|
|
312
|
+
4. 動作確認
|
|
313
|
+
|
|
314
|
+
**モニタリング**:
|
|
315
|
+
- エラーログ監視
|
|
316
|
+
- パフォーマンスメトリクス
|
|
317
|
+
- ユーザー行動分析
|
|
318
|
+
|
|
319
|
+
## 参考資料
|
|
320
|
+
|
|
321
|
+
### 関連ドキュメント
|
|
322
|
+
- 要件定義書: `requirements.md`
|
|
323
|
+
- QAテスト: `qa-tests/`
|
|
324
|
+
|
|
325
|
+
### 外部リソース
|
|
326
|
+
- [参考ドキュメント1のタイトル](URL)
|
|
327
|
+
- [参考ドキュメント2のタイトル](URL)
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Phase X-Y: [タスクグループ名] QAテスト結果
|
|
2
|
+
|
|
3
|
+
## テスト対象タスク
|
|
4
|
+
- **タスクID**: X.Y.1〜X.Y.N
|
|
5
|
+
- **タスク名**: [タスクグループ名]
|
|
6
|
+
- **実装日**: YYYY-MM-DD
|
|
7
|
+
- **テスター**: task-qa
|
|
8
|
+
- **最終更新**: YYYY-MM-DD HH:MM
|
|
9
|
+
|
|
10
|
+
## テストサマリー
|
|
11
|
+
| ステータス | 件数 |
|
|
12
|
+
|----------|-----|
|
|
13
|
+
| ✅ PASS | 0 |
|
|
14
|
+
| ❌ FAIL | 0 |
|
|
15
|
+
| ⚠️ PARTIAL | 0 |
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 必須自動テスト結果
|
|
20
|
+
|
|
21
|
+
### 実行コマンド
|
|
22
|
+
```bash
|
|
23
|
+
# 1. ユニットテスト
|
|
24
|
+
pnpm test
|
|
25
|
+
|
|
26
|
+
# 2. E2Eテスト(Playwrightコードによる自動テスト)
|
|
27
|
+
pnpm test:e2e
|
|
28
|
+
|
|
29
|
+
# 3. Lintチェック
|
|
30
|
+
pnpm lint
|
|
31
|
+
|
|
32
|
+
# 4. ビルドチェック
|
|
33
|
+
pnpm build
|
|
34
|
+
|
|
35
|
+
# 5. 型チェック(TypeScript)
|
|
36
|
+
pnpm typecheck
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
> **Note**: E2Eテストは `pnpm test:e2e` で実行されるPlaywrightコードテストを指します。
|
|
40
|
+
> Playwright MCPを使用したブラウザテスト(Browser検証レベル)は、下記「タスク X.Y.N」セクションのテストシナリオで実施します。
|
|
41
|
+
> 詳細は `docs/einja/steering/terminology.md` を参照してください。
|
|
42
|
+
|
|
43
|
+
### 結果
|
|
44
|
+
| テスト項目 | ステータス | 備考 |
|
|
45
|
+
|----------|----------|------|
|
|
46
|
+
| ユニットテスト | - | - |
|
|
47
|
+
| E2Eテスト | - | - |
|
|
48
|
+
| Lintチェック | - | - |
|
|
49
|
+
| ビルドチェック | - | - |
|
|
50
|
+
| 型チェック | - | - |
|
|
51
|
+
|
|
52
|
+
**重要**: 上記のいずれか1つでも失敗した場合、全体ステータスは**❌ FAIL**となります。
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## タスク X.Y.1: [タスク名]
|
|
57
|
+
|
|
58
|
+
### 受け入れ条件(requirements.md から抽出)
|
|
59
|
+
- AC1.1: Given [前提条件] When [操作] Then [期待結果]
|
|
60
|
+
- AC1.2: Given [前提条件] When [操作] Then [期待結果]
|
|
61
|
+
|
|
62
|
+
### テストシナリオ
|
|
63
|
+
|
|
64
|
+
| No | 手順 | 確認項目 | 期待値 | 結果 | 備考 |
|
|
65
|
+
|----|------|---------|--------|------|------|
|
|
66
|
+
| 1 | [操作内容] | [確認する項目] | [期待される結果] | - | - |
|
|
67
|
+
| 2 | [操作内容] | [確認する項目] | [期待される結果] | - | - |
|
|
68
|
+
|
|
69
|
+
**重要**:
|
|
70
|
+
- 手順は自然言語で簡潔に記述(例: 「ログイン画面に移動」「メールアドレス入力: test@example.com」)
|
|
71
|
+
- 「-」は手順のみで確認項目がない場合に使用
|
|
72
|
+
- 備考欄はテストの区切りや注意事項を記載
|
|
73
|
+
|
|
74
|
+
### 全体ステータス: - (未実施)
|
|
75
|
+
|
|
76
|
+
#### 主な問題点
|
|
77
|
+
- (実施後に記載)
|
|
78
|
+
|
|
79
|
+
#### 対応策
|
|
80
|
+
- (実施後に記載)
|
|
81
|
+
|
|
82
|
+
#### エビデンス
|
|
83
|
+
- ログファイル: `qa-tests/phaseX/evidence/X-Y-1-*.log`
|
|
84
|
+
- スクリーンショット: `qa-tests/phaseX/evidence/X-Y-1-*.png`
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 統合テスト結果サマリー
|
|
89
|
+
|
|
90
|
+
### フェーズ X-Y 全体結果
|
|
91
|
+
- **全体ステータス**: - (未実施)
|
|
92
|
+
- **完了タスク**: 0/N
|
|
93
|
+
- **テスト合格率**: 0% (0/0)
|
|
94
|
+
|
|
95
|
+
### 修正が必要な項目
|
|
96
|
+
- (実施後に記載)
|
|
97
|
+
|
|
98
|
+
### 次フェーズへの引き継ぎ事項
|
|
99
|
+
- (実施後に記載)
|
|
100
|
+
|
|
101
|
+
### 改善提案
|
|
102
|
+
- (実施後に記載)
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 報告と対応
|
|
107
|
+
|
|
108
|
+
### 失敗原因分類
|
|
109
|
+
<!-- 該当する分類にチェック -->
|
|
110
|
+
- [ ] **A: 実装ミス** → task-executerへ差し戻し
|
|
111
|
+
- [ ] **B: 要件齟齬** → requirements.md修正 → task-executerへ差し戻し
|
|
112
|
+
- [ ] **C: 設計不備** → design.md修正 → task-executerへ差し戻し
|
|
113
|
+
- [ ] **D: 環境問題** → qa再実行
|
|
114
|
+
|
|
115
|
+
### task-executerへの差し戻し(該当する場合)
|
|
116
|
+
以下の項目について修正が必要:
|
|
117
|
+
- (実施後に記載)
|
|
118
|
+
|
|
119
|
+
### 修正優先度
|
|
120
|
+
- **即座対応**: (実施後に記載)
|
|
121
|
+
- **1週間以内**: (実施後に記載)
|
|
122
|
+
- **2週間以内**: (実施後に記載)
|
|
123
|
+
|
|
124
|
+
### 回避策(該当する場合)
|
|
125
|
+
- (実施後に記載)
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# [機能名] 要件定義書
|
|
2
|
+
|
|
3
|
+
<!-- このテンプレートは新規タスクの要件定義書作成時に使用してください -->
|
|
4
|
+
<!-- QAエージェント(task-qa)は「受け入れ基準(Acceptance Criteria)」セクションを参照してテストシナリオを作成します -->
|
|
5
|
+
|
|
6
|
+
## 概要
|
|
7
|
+
<!-- 1-2段落で機能の概要を説明 -->
|
|
8
|
+
<!-- 例: パスワードレス認証を実現するマジックリンク機能を実装し、ユーザーのログイン体験を向上させます。 -->
|
|
9
|
+
|
|
10
|
+
## AS-IS(現状)
|
|
11
|
+
|
|
12
|
+
### 現在の実装状況
|
|
13
|
+
<!-- 現在の実装状況を記載 -->
|
|
14
|
+
|
|
15
|
+
### 現状の課題
|
|
16
|
+
<!-- 現在抱えている問題点や課題を記載 -->
|
|
17
|
+
|
|
18
|
+
## TO-BE(目標状態)
|
|
19
|
+
|
|
20
|
+
### 実現したい姿
|
|
21
|
+
<!-- この機能で実現したい理想的な状態を記載 -->
|
|
22
|
+
|
|
23
|
+
### 期待される改善
|
|
24
|
+
<!-- 具体的な改善効果を記載(できれば数値目標) -->
|
|
25
|
+
|
|
26
|
+
## ビジネス価値
|
|
27
|
+
- **問題**: <!-- 解決すべき問題を記載 -->
|
|
28
|
+
- **解決策**: <!-- その問題に対する解決策を記載 -->
|
|
29
|
+
- **期待効果**: <!-- 期待される効果を記載 -->
|
|
30
|
+
|
|
31
|
+
## スコープ
|
|
32
|
+
### 含まれるもの
|
|
33
|
+
<!-- このタスクで実装する機能のリスト -->
|
|
34
|
+
- 機能A
|
|
35
|
+
- 機能B
|
|
36
|
+
- 機能C
|
|
37
|
+
|
|
38
|
+
### 含まれないもの
|
|
39
|
+
<!-- 明示的に対象外とする機能のリスト -->
|
|
40
|
+
- 機能X
|
|
41
|
+
- 機能Y
|
|
42
|
+
|
|
43
|
+
## 画面要件(該当する場合)
|
|
44
|
+
|
|
45
|
+
### 画面一覧と目的
|
|
46
|
+
|
|
47
|
+
#### 1. [画面名]
|
|
48
|
+
**目的**: <!-- この画面の目的を記載 -->
|
|
49
|
+
|
|
50
|
+
**主要UI要素**:
|
|
51
|
+
- UI要素1
|
|
52
|
+
- UI要素2
|
|
53
|
+
|
|
54
|
+
**表示条件**:
|
|
55
|
+
<!-- この画面が表示される条件を記載 -->
|
|
56
|
+
|
|
57
|
+
### 画面遷移フロー(必要に応じてMermaid図を使用)
|
|
58
|
+
|
|
59
|
+
```mermaid
|
|
60
|
+
graph TD
|
|
61
|
+
A[画面A] -->|操作| B[画面B]
|
|
62
|
+
B -->|操作| C[画面C]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### UIインタラクション要件
|
|
66
|
+
|
|
67
|
+
#### フォーム入力とバリデーション
|
|
68
|
+
**要件**:
|
|
69
|
+
<!-- フォームの動作要件を記載 -->
|
|
70
|
+
|
|
71
|
+
**バリデーションルール**:
|
|
72
|
+
<!-- バリデーションルールを記載 -->
|
|
73
|
+
|
|
74
|
+
#### ボタン操作
|
|
75
|
+
**要件**:
|
|
76
|
+
<!-- ボタンの動作要件を記載 -->
|
|
77
|
+
|
|
78
|
+
#### ローディング状態
|
|
79
|
+
**要件**:
|
|
80
|
+
<!-- ローディング状態の動作要件を記載 -->
|
|
81
|
+
|
|
82
|
+
#### エラーメッセージ表示
|
|
83
|
+
**要件**:
|
|
84
|
+
<!-- エラーメッセージの表示要件を記載 -->
|
|
85
|
+
|
|
86
|
+
#### 成功フィードバック
|
|
87
|
+
**要件**:
|
|
88
|
+
<!-- 成功フィードバックの表示要件を記載 -->
|
|
89
|
+
|
|
90
|
+
## ユーザーストーリー
|
|
91
|
+
|
|
92
|
+
### Story 1: [ストーリー名]
|
|
93
|
+
**As a** [ユーザー種別]
|
|
94
|
+
**I want to** [実現したいこと]
|
|
95
|
+
**So that** [ビジネス価値]
|
|
96
|
+
|
|
97
|
+
#### AC(受け入れ基準)の書き方
|
|
98
|
+
|
|
99
|
+
**AC番号体系**:
|
|
100
|
+
- AC1.1, AC1.2, ... : Story 1 の受け入れ基準
|
|
101
|
+
- AC2.1, AC2.2, ... : Story 2 の受け入れ基準
|
|
102
|
+
- ストーリー番号.連番 の形式で一意に識別
|
|
103
|
+
|
|
104
|
+
**検証レベル**:
|
|
105
|
+
- **Unit**: 単体テスト(task-executer が実装・実行)
|
|
106
|
+
- 例: バリデーション関数、ユーティリティ関数
|
|
107
|
+
- **Integration**: 統合テスト(task-qa が実行)
|
|
108
|
+
- 例: APIエンドポイント、データベース連携
|
|
109
|
+
- **E2E**: Playwrightコードによる自動テスト(CI/開発者 が実行)
|
|
110
|
+
- 例: `pnpm test:e2e` で実行されるリグレッションテスト
|
|
111
|
+
- **Browser**: Playwright MCPによるブラウザテスト(task-qa が実行)
|
|
112
|
+
- 例: 画面フロー、UIインタラクション確認
|
|
113
|
+
|
|
114
|
+
**検証者**:
|
|
115
|
+
- **task-executer**: 実装フェーズで Unit テストを作成・実行
|
|
116
|
+
- **CI/開発者**: E2E テスト(`pnpm test:e2e`)を実行
|
|
117
|
+
- **task-qa**: QA フェーズで Integration/Browser テストを実行
|
|
118
|
+
|
|
119
|
+
詳細は `docs/einja/steering/terminology.md` および `docs/einja/steering/acceptance-criteria-and-qa-guide.md` を参照してください。
|
|
120
|
+
|
|
121
|
+
#### 受け入れ基準
|
|
122
|
+
|
|
123
|
+
<!-- ⚠️ 必須セクション: QAエージェント(task-qa)はこのセクションを参照してテストシナリオを作成します -->
|
|
124
|
+
<!-- AC(Acceptance Criteria)は AC番号、検証レベル、Given/When/Then を必ず含めてください -->
|
|
125
|
+
|
|
126
|
+
##### 機能要件
|
|
127
|
+
<!-- Given/When/Then形式で記載 -->
|
|
128
|
+
<!-- 振る舞い・入力・観測可能な結果をセットで書く -->
|
|
129
|
+
<!-- ビジネス価値やユーザー影響が分かる文脈を添える -->
|
|
130
|
+
<!-- 正常系に加え、代表的な異常・境界ケースを列挙する -->
|
|
131
|
+
<!-- 観測手段(API レスポンス、イベント、DB 状態など)を明示する -->
|
|
132
|
+
|
|
133
|
+
- [ ] **AC1.1** [検証レベル: Unit] [検証者: task-executer]
|
|
134
|
+
Given: [前提条件]
|
|
135
|
+
When: [実行する操作]
|
|
136
|
+
Then: [期待される結果]
|
|
137
|
+
|
|
138
|
+
- [ ] **AC1.2** [検証レベル: Integration] [検証者: task-qa]
|
|
139
|
+
Given: [前提条件]
|
|
140
|
+
When: [実行する操作]
|
|
141
|
+
Then: [期待される結果]
|
|
142
|
+
|
|
143
|
+
- [ ] **AC1.3** [検証レベル: E2E] [検証者: task-qa]
|
|
144
|
+
Given: [前提条件(異常系または境界ケース)]
|
|
145
|
+
When: [実行する操作]
|
|
146
|
+
Then: [期待される結果]
|
|
147
|
+
|
|
148
|
+
##### UIインタラクション要件
|
|
149
|
+
<!-- 画面操作に関する受け入れ基準(該当する場合) -->
|
|
150
|
+
<!-- Browser検証レベルはPlaywright MCPによるブラウザテストで確認します -->
|
|
151
|
+
|
|
152
|
+
- [ ] **AC1.4** [検証レベル: Browser] [検証者: task-qa]
|
|
153
|
+
Given: [前提条件(画面が表示されている状態)]
|
|
154
|
+
When: [ユーザー操作]
|
|
155
|
+
Then: [期待される画面の振る舞い]
|
|
156
|
+
|
|
157
|
+
- [ ] **AC1.5** [検証レベル: Browser] [検証者: task-qa]
|
|
158
|
+
Given: [前提条件]
|
|
159
|
+
When: [ユーザー操作]
|
|
160
|
+
Then: [期待される画面の振る舞い]
|
|
161
|
+
|
|
162
|
+
#### 実装の優先順位
|
|
163
|
+
<!-- P0 (必須) / P1 (重要) / P2 (推奨) のいずれかを選択 -->
|
|
164
|
+
P0 (必須)
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
### Story 2: [ストーリー名]
|
|
169
|
+
**As a** [ユーザー種別]
|
|
170
|
+
**I want to** [実現したいこと]
|
|
171
|
+
**So that** [ビジネス価値]
|
|
172
|
+
|
|
173
|
+
#### 受け入れ基準
|
|
174
|
+
|
|
175
|
+
<!-- ⚠️ 必須セクション: QAエージェント(task-qa)はこのセクションを参照してテストシナリオを作成します -->
|
|
176
|
+
<!-- AC(Acceptance Criteria)は AC番号、検証レベル、Given/When/Then を必ず含めてください -->
|
|
177
|
+
|
|
178
|
+
##### 機能要件
|
|
179
|
+
|
|
180
|
+
- [ ] **AC2.1** [検証レベル: Unit] [検証者: task-executer]
|
|
181
|
+
Given: [前提条件]
|
|
182
|
+
When: [実行する操作]
|
|
183
|
+
Then: [期待される結果]
|
|
184
|
+
|
|
185
|
+
- [ ] **AC2.2** [検証レベル: Integration] [検証者: task-qa]
|
|
186
|
+
Given: [前提条件]
|
|
187
|
+
When: [実行する操作]
|
|
188
|
+
Then: [期待される結果]
|
|
189
|
+
|
|
190
|
+
##### UIインタラクション要件
|
|
191
|
+
<!-- 画面操作に関する受け入れ基準(該当する場合) -->
|
|
192
|
+
<!-- Browser検証レベルはPlaywright MCPによるブラウザテストで確認します -->
|
|
193
|
+
|
|
194
|
+
- [ ] **AC2.3** [検証レベル: Browser] [検証者: task-qa]
|
|
195
|
+
Given: [前提条件]
|
|
196
|
+
When: [ユーザー操作]
|
|
197
|
+
Then: [期待される画面の振る舞い]
|
|
198
|
+
|
|
199
|
+
#### 実装の優先順位
|
|
200
|
+
P0 (必須) / P1 (重要) / P2 (推奨)
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 詳細なビジネス要件(該当する場合)
|
|
205
|
+
|
|
206
|
+
### [要件カテゴリ名]
|
|
207
|
+
#### [要件サブカテゴリ名]
|
|
208
|
+
**要件内容**:
|
|
209
|
+
<!-- 要件の詳細を記載 -->
|
|
210
|
+
|
|
211
|
+
**OK例**:
|
|
212
|
+
<!-- 正しい実装例を記載 -->
|
|
213
|
+
|
|
214
|
+
**NG例**:
|
|
215
|
+
<!-- 誤った実装例を記載 -->
|
|
216
|
+
|
|
217
|
+
## 非機能要件
|
|
218
|
+
|
|
219
|
+
### パフォーマンス
|
|
220
|
+
<!-- パフォーマンス要件を記載 -->
|
|
221
|
+
- 処理A: XXms以内
|
|
222
|
+
- 処理B: YY秒以内
|
|
223
|
+
|
|
224
|
+
### セキュリティ
|
|
225
|
+
<!-- セキュリティ要件を記載 -->
|
|
226
|
+
|
|
227
|
+
### 可用性
|
|
228
|
+
<!-- 可用性要件を記載 -->
|
|
229
|
+
|
|
230
|
+
### アクセシビリティ
|
|
231
|
+
<!-- アクセシビリティ要件を記載(該当する場合) -->
|
|
232
|
+
|
|
233
|
+
## 技術的制約
|
|
234
|
+
<!-- 技術的制約を記載 -->
|
|
235
|
+
|
|
236
|
+
## 依存関係
|
|
237
|
+
<!-- 外部サービスやライブラリへの依存関係を記載 -->
|
|
238
|
+
|
|
239
|
+
## リスクと対策
|
|
240
|
+
| リスク | 影響度 | 発生確率 | 対策 |
|
|
241
|
+
|--------|--------|----------|------|
|
|
242
|
+
| リスク1 | 高/中/低 | 高/中/低 | 対策内容 |
|
|
243
|
+
| リスク2 | 高/中/低 | 高/中/低 | 対策内容 |
|
|
244
|
+
|
|
245
|
+
## 成功指標
|
|
246
|
+
<!-- 機能の成功を測定する指標を記載 -->
|
|
247
|
+
- 指標1: 目標値
|
|
248
|
+
- 指標2: 目標値
|
|
249
|
+
|
|
250
|
+
## タイムライン
|
|
251
|
+
<!-- 実装フェーズを記載(該当する場合) -->
|
|
252
|
+
- Phase 1: 基本機能(Story 1, 2)
|
|
253
|
+
- Phase 2: 高度な機能(Story 3)
|
|
254
|
+
- Phase 3: 分析とモニタリング機能
|