@careerchain/stdd 0.1.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 +44 -0
- package/assets/.claude/agents/code-reviewer.md +170 -0
- package/assets/.claude/agents/implementer.md +96 -0
- package/assets/.claude/agents/plan-writer.md +124 -0
- package/assets/.claude/agents/qa-engineer.md +133 -0
- package/assets/.claude/agents/spec-reviewer.md +173 -0
- package/assets/.claude/agents/spec-writer.md +194 -0
- package/assets/.claude/agents/test-reviewer.md +218 -0
- package/assets/.claude/docs/spec-driven-development-guide.md +436 -0
- package/assets/.claude/hooks/pre-push-check.sh +160 -0
- package/assets/.claude/settings.json +67 -0
- package/assets/.claude/skills/auto-implement/SKILL.md +168 -0
- package/assets/.claude/skills/auto-implement/references/github-project.md +54 -0
- package/assets/.claude/skills/auto-implement/references/phases.md +244 -0
- package/assets/.claude/skills/create-pr/SKILL.md +112 -0
- package/assets/.claude/skills/documenting-plans/SKILL.md +217 -0
- package/assets/.claude/skills/documenting-plans/templates/plan.md +182 -0
- package/assets/.claude/skills/documenting-specifications/SKILL.md +300 -0
- package/assets/.claude/skills/documenting-specifications/guides/error-handling.md +78 -0
- package/assets/.claude/skills/documenting-specifications/guides/stdd-violations.md +237 -0
- package/assets/.claude/skills/documenting-specifications/templates/requirements.md +184 -0
- package/assets/.claude/skills/documenting-specifications/templates/screen-items-definition.md +179 -0
- package/assets/.claude/skills/documenting-specifications/templates/tech-design.md +241 -0
- package/assets/.claude/skills/generating-wireframes/SKILL.md +121 -0
- package/assets/.claude/skills/generating-wireframes/examples/tob-form.html +497 -0
- package/assets/.claude/skills/generating-wireframes/examples/tob-list.html +536 -0
- package/assets/.claude/skills/generating-wireframes/examples/toc-form.html +493 -0
- package/assets/.claude/skills/generating-wireframes/examples/toc-list.html +538 -0
- package/assets/.claude/skills/generating-wireframes/guides/from-requirements.md +53 -0
- package/assets/.claude/skills/generating-wireframes/templates/index.html +472 -0
- package/assets/.claude/skills/generating-wireframes/templates/screen.html +480 -0
- package/assets/.claude/skills/introducing-stdd/SKILL.md +185 -0
- package/assets/.claude/skills/introducing-stdd/templates/introduction-plan.md +64 -0
- package/assets/.claude/skills/kaizen/SKILL.md +129 -0
- package/assets/.claude/skills/kaizen/references/code-examples.md +233 -0
- package/assets/.claude/skills/reverse-engineering-common-spec/SKILL.md +137 -0
- package/assets/.claude/skills/reverse-engineering-feature-spec/SKILL.md +463 -0
- package/assets/.claude/skills/reverse-engineering-feature-spec/guides/accuracy.md +215 -0
- package/assets/.claude/skills/reverse-engineering-feature-spec/guides/figma-capture.md +313 -0
- package/assets/.claude/skills/review-pr-with-agents/SKILL.md +159 -0
- package/assets/.claude/skills/searching-existing-solutions/SKILL.md +110 -0
- package/assets/.claude/skills/setup-stdd/SKILL.md +82 -0
- package/assets/.claude/skills/software-architecture/SKILL.md +260 -0
- package/assets/.claude/skills/starting-new-with-stdd/SKILL.md +142 -0
- package/assets/.claude/skills/starting-new-with-stdd/templates/bootstrap-plan.md +73 -0
- package/assets/.claude/skills/tailoring-spec-format/SKILL.md +103 -0
- package/assets/.claude/skills/verifying-consistency/SKILL.md +90 -0
- package/assets/stdd.config.yml.tpl +34 -0
- package/dist/cli.js +148 -0
- package/dist/cli.js.map +1 -0
- package/dist/install.js +121 -0
- package/dist/install.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# エラーハンドリングガイド
|
|
2
|
+
|
|
3
|
+
REQUIREMENTS.mdとTECH_DESIGN.mdでエラーケースを記述する際のガイドライン。
|
|
4
|
+
|
|
5
|
+
## エラーの分類
|
|
6
|
+
|
|
7
|
+
| エラー種別 | 記述先 | 内容 |
|
|
8
|
+
|------------|----------|---------|
|
|
9
|
+
| **ユーザー向けエラー** | `REQUIREMENTS.md` | エラーメッセージ文言<br>ユーザーへの影響<br>画面遷移<br>Priority |
|
|
10
|
+
| **技術的なエラー** | `TECH_DESIGN.md` | エラーコード定義<br>HTTPステータス<br>ハンドリングロジック<br>テスト戦略 |
|
|
11
|
+
|
|
12
|
+
## REQUIREMENTS.md: ユーザー向けエラー
|
|
13
|
+
|
|
14
|
+
**原則**:
|
|
15
|
+
- エラーケースも通常のユーザージャーニーとして扱う
|
|
16
|
+
- 各エラージャーニーにPriorityを付与
|
|
17
|
+
- クリティカルなエラーは**P0/P1**、その他は**P2**
|
|
18
|
+
|
|
19
|
+
**例**:
|
|
20
|
+
|
|
21
|
+
```markdown
|
|
22
|
+
### P1 ジャーニー: 無効な認証情報(ID/パスワード)
|
|
23
|
+
**Priority**: P1(Important)
|
|
24
|
+
**Status**: ✅ 実装済み
|
|
25
|
+
|
|
26
|
+
#### 手順
|
|
27
|
+
1. ユーザーが`/login`ページでID/パスワードタブを選択
|
|
28
|
+
2. ユーザーは間違ったメールアドレスまたはパスワードを入力
|
|
29
|
+
3. ユーザーは「ログイン」ボタンをクリック
|
|
30
|
+
4. システムは認証に失敗
|
|
31
|
+
5. システムはエラーメッセージ「ログインに失敗しました。メールアドレスとパスワードを確認してください。」を表示
|
|
32
|
+
6. ユーザーはログインページに留まり、再試行できる
|
|
33
|
+
|
|
34
|
+
#### 期待結果
|
|
35
|
+
- ユーザーに明確なエラーメッセージが表示される
|
|
36
|
+
- セキュリティのため、「メールアドレスが存在しない」vs「パスワードが間違っている」を区別しない
|
|
37
|
+
- ユーザーは再試行できる
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## TECH_DESIGN.md: 技術的なエラーハンドリング
|
|
41
|
+
|
|
42
|
+
**原則**:
|
|
43
|
+
- 各エラーケースのテスト戦略を定義(E2E/Integration/Unit)
|
|
44
|
+
- エラーハンドリングの実装方針を記述
|
|
45
|
+
- テストカバレッジを明確化
|
|
46
|
+
|
|
47
|
+
**例**:
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
## 5. エラーハンドリング戦略
|
|
51
|
+
|
|
52
|
+
### エラーコード定義
|
|
53
|
+
|
|
54
|
+
| エラーコード | HTTPステータス | メッセージ | テスト戦略 |
|
|
55
|
+
|------------|-------------|---------|---------------|
|
|
56
|
+
| `AUTH_FAILED` | 401 | ログインに失敗しました | Integration + Unit |
|
|
57
|
+
| `EMAIL_NOT_FOUND` | 404 | メールアドレスが見つかりません | Integration + Unit |
|
|
58
|
+
| `INVALID_PASSWORD` | 401 | パスワードが正しくありません | Integration + Unit |
|
|
59
|
+
|
|
60
|
+
### 実装方針
|
|
61
|
+
|
|
62
|
+
- NextAuth Credentials Providerで認証失敗を検出
|
|
63
|
+
- エラーメッセージを統一: `EMAIL_NOT_FOUND`と`INVALID_PASSWORD`を区別せず`AUTH_FAILED`を使用
|
|
64
|
+
- クライアント側で`signIn()`の戻り値をチェックし、エラー時はSnackbarで通知
|
|
65
|
+
|
|
66
|
+
### テストカバレッジ
|
|
67
|
+
|
|
68
|
+
- **E2E**: ❌ 不要(認証フローは複雑でメンテナンスコストが高い)
|
|
69
|
+
- **Integration**: ✅ NextAuth Credentials Providerの失敗ケース
|
|
70
|
+
- **Unit**: ✅ エラーハンドリングロジック(`LoginClient.tsx`)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 重要なポイント
|
|
74
|
+
|
|
75
|
+
- **REQUIREMENTS.md**: ユーザー視点 - どのエラーメッセージが表示され、次に何が起こるか
|
|
76
|
+
- **TECH_DESIGN.md**: 技術視点 - エラーコード、HTTPステータス、どう処理するか、どうテストするか
|
|
77
|
+
- エラーケースも通常のジャーニーと同様にPriorityを付与
|
|
78
|
+
- TECH_DESIGN.mdでエラーケースを適切なテストレベルにマッピング
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# STDD違反例と対策ガイド
|
|
2
|
+
|
|
3
|
+
このドキュメントでは、実際に発生したSTDD違反例を記録し、同じミスを繰り返さないための教訓を共有します。
|
|
4
|
+
|
|
5
|
+
## 実装開始前の必須チェックリスト
|
|
6
|
+
|
|
7
|
+
**⚠️ 重要**: 以下のチェックリストをすべて✅にするまで、**絶対に実装コードを書いてはいけません**。
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
□ 1. 対応するREQUIREMENTS.mdを読んだ
|
|
11
|
+
□ 2. 対応するTECH_DESIGN.mdを読んだ
|
|
12
|
+
□ 3. TECH_DESIGN.mdの「Test Strategy」セクションを確認した
|
|
13
|
+
□ 4. TECH_DESIGN.mdに記載されたテスト総数を確認した(例: 合計33件)
|
|
14
|
+
□ 5. Unit/Integration/E2Eのテスト内訳を理解した(例: Unit 18件, Integration 9件, E2E 6件)
|
|
15
|
+
□ 6. テスト作成タスクをTodoWriteに追加した
|
|
16
|
+
□ 7. テストファイルを作成した(Red状態)
|
|
17
|
+
□ 8. テストファイルをコミットした
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**このチェックリストを完了するまで、Server Actions、UI Components、Pages等の実装コードは一切書かないこと。**
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 違反例1: テスト作成をスキップして実装開始
|
|
25
|
+
|
|
26
|
+
**発生日**: 2026-01-04
|
|
27
|
+
**機能**: パスワード再設定機能(`<app.id>`)
|
|
28
|
+
|
|
29
|
+
### ❌ 何が間違っていたか
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
1. REQUIREMENTS.md + TECH_DESIGN.md 作成 ✅
|
|
33
|
+
2. Tasks分解 ✅
|
|
34
|
+
3. Server Actions実装開始 ❌ ← ここが間違い!テストを飛ばした
|
|
35
|
+
4. UI実装 ❌
|
|
36
|
+
5. テスト作成(後から) ❌ ← 実装後にテストを書いてしまった
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### ✅ 正しい手順
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
1. REQUIREMENTS.md + TECH_DESIGN.md 作成 ✅
|
|
43
|
+
2. Tasks分解 ✅
|
|
44
|
+
3. Unit テスト作成(18件) ✅ ← 実装前に必須!
|
|
45
|
+
4. Integration テスト作成(9件) ✅
|
|
46
|
+
5. E2E テスト作成(6件) ✅
|
|
47
|
+
6. テストコミット ✅
|
|
48
|
+
7. 実装 + テスト更新(Red → Green) ✅
|
|
49
|
+
8. テスト実行・通過確認 ✅
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 教訓
|
|
53
|
+
|
|
54
|
+
- テストを先に書くことで、仕様の理解漏れを防ぎ、Red-Green-Refactorサイクルを回せる
|
|
55
|
+
- TECH_DESIGN.mdには必ずテスト総数が記載されているので、実装前に確認すること
|
|
56
|
+
- TodoWriteでタスクを作成する際、テスト作成を最優先タスクとして明記すること
|
|
57
|
+
|
|
58
|
+
### 再発防止策
|
|
59
|
+
|
|
60
|
+
- 実装タスクを開始する前に、必ず「実装開始前の必須チェックリスト」を確認する
|
|
61
|
+
- チェックリストの項目7「テストファイルを作成した」が✅になるまで、実装コードを書かない
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 違反例2: TECH_DESIGN.mdのテスト総数を確認せずに実装
|
|
66
|
+
|
|
67
|
+
### ❌ 悪い例
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
TECH_DESIGN.mdに「合計33件(Unit: 18件, Integration: 9件, E2E: 6件)」と明記されているのに、
|
|
71
|
+
テスト総数を確認せずに実装を開始してしまう
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### ✅ 正しい手順
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
1. TECH_DESIGN.mdの「Test Strategy」セクションを開く
|
|
78
|
+
2. テスト総数を確認: 「合計33件」
|
|
79
|
+
3. 内訳を確認: Unit 18件, Integration 9件, E2E 6件
|
|
80
|
+
4. TodoWriteに33件分のタスクを作成
|
|
81
|
+
5. 33件すべてのテストファイルを作成してからコミット
|
|
82
|
+
6. この時点で初めて実装を開始
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 教訓
|
|
86
|
+
|
|
87
|
+
TECH_DESIGN.mdには必ずテスト総数が記載されているので、実装前に必ず確認すること
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 違反例3: TECH_DESIGN.mdを見ずにE2Eテストを作成
|
|
92
|
+
|
|
93
|
+
### ❌ 悪い例
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
// TECH_DESIGN.mdには「利用規約のE2Eテストは不要」と書いてあるのに作成してしまう
|
|
97
|
+
test('利用規約リンクが別タブで開く', async ({ page }) => {
|
|
98
|
+
// このテストはTECH_DESIGN.mdに記載がない = 不要
|
|
99
|
+
});
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### ✅ 正しい手順
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
1. タスク受領: "ログイン機能のE2Eテストを作成して"
|
|
106
|
+
2. ドキュメント確認:
|
|
107
|
+
- docs/<app.id>/login/REQUIREMENTS.md を読む
|
|
108
|
+
- docs/<app.id>/login/TECH_DESIGN.md を読む
|
|
109
|
+
- TECH_DESIGN.mdの「Journey別テスト戦略」セクションを確認
|
|
110
|
+
3. 実装:
|
|
111
|
+
- TECH_DESIGN.mdに記載されたテストケースのみを実装
|
|
112
|
+
- TECH_DESIGN.mdに記載されていないテストは作成しない
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## TodoWriteでのタスク分解の正しい順序
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// ❌ 悪い例(実装を優先してしまう)
|
|
121
|
+
[
|
|
122
|
+
{ content: "Server Actions実装", status: "in_progress" },
|
|
123
|
+
{ content: "UI実装", status: "pending" },
|
|
124
|
+
{ content: "テスト作成", status: "pending" }, // 後回しは禁止!
|
|
125
|
+
]
|
|
126
|
+
|
|
127
|
+
// ✅ 良い例(テスト作成を最優先)
|
|
128
|
+
[
|
|
129
|
+
{ content: "Unit テスト作成(18件)", status: "in_progress" }, // 最優先
|
|
130
|
+
{ content: "Integration テスト作成(9件)", status: "pending" },
|
|
131
|
+
{ content: "E2E テスト作成(6件)", status: "pending" },
|
|
132
|
+
{ content: "テストをコミット", status: "pending" },
|
|
133
|
+
// ↓ テスト完了後に実装を開始
|
|
134
|
+
{ content: "実装 + テスト更新(Green状態へ)", status: "pending" },
|
|
135
|
+
{ content: "テスト実行・通過確認", status: "pending" },
|
|
136
|
+
]
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 実装・テスト修正時のSpecドキュメント更新ルール
|
|
142
|
+
|
|
143
|
+
**絶対に守るべき原則**: テストや実装を修正した場合は、**必ず対応するREQUIREMENTS.mdとTECH_DESIGN.mdも更新の必要がないか確認し、適宜更新すること**。
|
|
144
|
+
|
|
145
|
+
⚠️ **更新時もSSOT原則を厳守する**。Specには「現在の最新仕様」だけを書き、変更前後の比較・変更理由・「今回の追加」は一切書かない。履歴はgit log・PR・issueに任せる。詳細は[SKILL.md「絶対ルール: SSOT原則」](../SKILL.md)を参照。
|
|
146
|
+
|
|
147
|
+
### テスト修正時の更新ルール
|
|
148
|
+
|
|
149
|
+
1. **テストケースを追加した場合**
|
|
150
|
+
- TECH_DESIGN.mdの該当セクション(E2E/Integration/Unit)にテストケースを追加
|
|
151
|
+
- テスト総数を更新(「テストカバレッジサマリー」セクション)
|
|
152
|
+
|
|
153
|
+
2. **テストケースを削除した場合**
|
|
154
|
+
- TECH_DESIGN.mdから該当テストケースを除去
|
|
155
|
+
- テスト総数を更新
|
|
156
|
+
- **削除理由・「削除した」旨の注記は書かない**(履歴はgit logが保持する)
|
|
157
|
+
- ただし、現在の仕様として「このケースはUnitテストでカバーする」など読者が必要とする情報があれば、現在仕様の説明として記述してよい
|
|
158
|
+
|
|
159
|
+
3. **テストの実装方法を変更した場合**
|
|
160
|
+
- TECH_DESIGN.mdの「実装方法」セクションを**現在の方式のみ**に書き換える
|
|
161
|
+
- **「変更前」「変更後」「変更理由」のラベルや比較表現を使わない**
|
|
162
|
+
|
|
163
|
+
### 実装修正時の更新ルール
|
|
164
|
+
|
|
165
|
+
1. **実装方法を変更した場合**
|
|
166
|
+
- TECH_DESIGN.mdの該当する「Decision」「Technical Implementation」セクションを**現在の方式のみ**に書き換える
|
|
167
|
+
- 「現在この方式を採用している理由」は書いてよい(設計根拠)。「以前の方式から変更した理由」は書かない(履歴)
|
|
168
|
+
|
|
169
|
+
2. **UIを変更した場合**
|
|
170
|
+
- REQUIREMENTS.mdのUser Journey、画面仕様を**現在のUIのみ**を反映する形で書き換える
|
|
171
|
+
- TECH_DESIGN.mdの画面設計セクションを書き換える
|
|
172
|
+
- **E2Eテスト、Integrationテストの両方を確認・更新**
|
|
173
|
+
|
|
174
|
+
### 更新チェックリスト
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
□ 1. TECH_DESIGN.mdのテストケース一覧を確認・更新
|
|
178
|
+
□ 2. TECH_DESIGN.mdのテスト総数を確認・更新
|
|
179
|
+
□ 3. TECH_DESIGN.mdの実装方法・技術的詳細を「現在の仕様のみ」に更新
|
|
180
|
+
□ 4. SSOT原則違反の禁止語(変更前/変更後/今回/既存/...)が含まれていないかgrep
|
|
181
|
+
□ 5. REQUIREMENTS.mdのUser Journey、画面仕様を確認
|
|
182
|
+
□ 6. E2Eテストが実装と整合しているか確認・更新
|
|
183
|
+
□ 7. Integrationテストが実装と整合しているか確認・更新
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**重要**: UI変更を行った場合は、E2EテストとIntegrationテストの**両方**を必ず確認すること。
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 具体例
|
|
191
|
+
|
|
192
|
+
### 例1: テストケースを除去した場合
|
|
193
|
+
|
|
194
|
+
✅ **良い例**(現在の仕様のみ記述):
|
|
195
|
+
|
|
196
|
+
```markdown
|
|
197
|
+
**SignupForm(`<app.path>/components/auth/SignupForm.test.tsx`)**:
|
|
198
|
+
|
|
199
|
+
1. メール検証リンク送信(正常系)
|
|
200
|
+
2. Googleアカウントで新規登録(正常系)
|
|
201
|
+
3. メールアドレス重複エラー(異常系)
|
|
202
|
+
4. 空のメールアドレスのバリデーションエラー
|
|
203
|
+
5. ネットワークエラー/サーバーエラー
|
|
204
|
+
|
|
205
|
+
**メール形式バリデーションについて**: `type="email"`のHTML5バリデーションが先に実行されるため、
|
|
206
|
+
React Hook Form側ではテストせず、`signupSchema`のUnitテストでカバーする。
|
|
207
|
+
|
|
208
|
+
**テスト総数**: 36件(E2E: 5件、Integration: 9件、Unit: 31件)
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
❌ **悪い例**(履歴・削除理由を書いている):
|
|
212
|
+
|
|
213
|
+
```markdown
|
|
214
|
+
~~6. 無効なメール形式のバリデーション~~ ← 削除
|
|
215
|
+
**削除理由**: HTML5バリデーションが先に動くためテストできない
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### 例2: 実装方法を変更した場合
|
|
219
|
+
|
|
220
|
+
✅ **良い例**(現在の方式のみ記述):
|
|
221
|
+
|
|
222
|
+
```markdown
|
|
223
|
+
### メール送信実装
|
|
224
|
+
|
|
225
|
+
`admin.generateLink()` でリンクを生成し、Resend経由でHTMLメールを送信する。
|
|
226
|
+
HTMLテンプレートのカスタマイズ性を確保するため、Supabase Authの組み込みメール送信は使わない。
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
❌ **悪い例**(変更前後を比較している):
|
|
230
|
+
|
|
231
|
+
```markdown
|
|
232
|
+
### メール送信実装
|
|
233
|
+
|
|
234
|
+
**変更前**: `supabase.auth.signUp()`でSupabase Auth経由でメール送信
|
|
235
|
+
**変更後**: `admin.generateLink()` + Resend経由でHTMLメール送信
|
|
236
|
+
**変更理由**: テンプレートのカスタマイズ性
|
|
237
|
+
```
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# REQUIREMENTS.md テンプレート
|
|
2
|
+
|
|
3
|
+
**目的**: ビジネス要件とユーザージャーニーをステークホルダー視点で定義
|
|
4
|
+
|
|
5
|
+
**配置**: `docs/<app>/<path>/REQUIREMENTS.md`
|
|
6
|
+
|
|
7
|
+
## テンプレート構造
|
|
8
|
+
|
|
9
|
+
```markdown
|
|
10
|
+
# [機能名] 仕様書
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. 概要
|
|
15
|
+
|
|
16
|
+
### 解決する問題
|
|
17
|
+
|
|
18
|
+
(この機能が解決する問題)
|
|
19
|
+
|
|
20
|
+
### 対象ユーザー
|
|
21
|
+
|
|
22
|
+
(対象ユーザー)
|
|
23
|
+
|
|
24
|
+
### ビジネス目標
|
|
25
|
+
|
|
26
|
+
(ビジネス目標 - 箇条書きで3-5項目)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 2. ユーザージャーニー
|
|
31
|
+
|
|
32
|
+
### [メインフロー名]
|
|
33
|
+
|
|
34
|
+
**Priority**: P0 (Critical Path)
|
|
35
|
+
|
|
36
|
+
#### 手順
|
|
37
|
+
|
|
38
|
+
1. ユーザーが...する
|
|
39
|
+
2. システムは...する
|
|
40
|
+
3. ユーザーは...する
|
|
41
|
+
|
|
42
|
+
#### 期待結果
|
|
43
|
+
|
|
44
|
+
- xxが...されること
|
|
45
|
+
- xxが...すること
|
|
46
|
+
- xxが...されないこと
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
### [別のクリティカルパス]
|
|
51
|
+
|
|
52
|
+
**Priority**: P0 (Critical Path)
|
|
53
|
+
|
|
54
|
+
#### 手順
|
|
55
|
+
|
|
56
|
+
1. ...
|
|
57
|
+
|
|
58
|
+
#### 期待結果
|
|
59
|
+
|
|
60
|
+
- ...
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
### [重要なエラーケース]
|
|
65
|
+
|
|
66
|
+
**Priority**: P1 (Important)
|
|
67
|
+
|
|
68
|
+
#### 手順
|
|
69
|
+
|
|
70
|
+
1. ユーザーが(誤った操作)...
|
|
71
|
+
2. システムはエラーメッセージ「...」を表示
|
|
72
|
+
3. ユーザーは...
|
|
73
|
+
|
|
74
|
+
#### 期待結果
|
|
75
|
+
|
|
76
|
+
- エラーメッセージが明確
|
|
77
|
+
- ユーザーが次のアクションを理解できる
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### [エッジケース]
|
|
82
|
+
|
|
83
|
+
**Priority**: P2 (Nice to Have)
|
|
84
|
+
|
|
85
|
+
#### 手順
|
|
86
|
+
|
|
87
|
+
1. ...
|
|
88
|
+
|
|
89
|
+
#### 期待結果
|
|
90
|
+
|
|
91
|
+
- ...
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 3. UI/UXデザイン
|
|
96
|
+
|
|
97
|
+
ワイヤーフレーム(WF)はHTMLで `./wireframes/` 配下に置き、本セクションからリンクする。
|
|
98
|
+
WFは `generating-wireframes` スキルで生成する(低忠実度・グレースケール・主要文言は実値)。
|
|
99
|
+
ASCIIアートは使わない。
|
|
100
|
+
|
|
101
|
+
### ワイヤーフレーム
|
|
102
|
+
|
|
103
|
+
- [ワイヤーフレーム一覧(index)](./wireframes/index.html)
|
|
104
|
+
|
|
105
|
+
| 画面 | 状態 | WF |
|
|
106
|
+
|------|------|----|
|
|
107
|
+
| [画面名1] | 通常 / 空 / エラー | [画面名1](./wireframes/[screen-1].html) |
|
|
108
|
+
| [画面名2] | 通常 | [画面名2](./wireframes/[screen-2].html) |
|
|
109
|
+
|
|
110
|
+
### 画面ごとの要点
|
|
111
|
+
|
|
112
|
+
#### [画面名1]
|
|
113
|
+
|
|
114
|
+
- 主な操作(ボタン文言): [検索] / [新規登録] / ...
|
|
115
|
+
- 表示要素: (ヘッダー / 検索条件 / 一覧 / ページネーション など要点)
|
|
116
|
+
- インタラクション: (選択・遷移・送信時の挙動)
|
|
117
|
+
|
|
118
|
+
#### [画面名2]
|
|
119
|
+
|
|
120
|
+
- 主な操作(ボタン文言): ...
|
|
121
|
+
- 表示要素: ...
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
### 表示要素
|
|
126
|
+
|
|
127
|
+
| 要素 | 説明 |
|
|
128
|
+
|------|------|
|
|
129
|
+
| 要素名 | 説明 |
|
|
130
|
+
| 要素名 | 説明 |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### 空状態・エラー状態
|
|
135
|
+
|
|
136
|
+
(コンテンツがない場合やエラー時の表示)
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 4. エッジケース
|
|
141
|
+
|
|
142
|
+
### [ケース名1]
|
|
143
|
+
- 詳細説明
|
|
144
|
+
|
|
145
|
+
### [ケース名2]
|
|
146
|
+
- 詳細説明
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 5. 成功基準
|
|
151
|
+
|
|
152
|
+
(この機能の成功基準 - チェックリスト形式)
|
|
153
|
+
|
|
154
|
+
- ✅ [達成すべき項目1]
|
|
155
|
+
- ✅ [達成すべき項目2]
|
|
156
|
+
- ✅ [達成すべき項目3]
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 6. スコープ外
|
|
161
|
+
|
|
162
|
+
- (この機能で対応しない項目)
|
|
163
|
+
- (将来的な拡張として残す項目)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## 重要なポイント
|
|
167
|
+
|
|
168
|
+
### 記述すべき内容
|
|
169
|
+
|
|
170
|
+
- すべてのユーザージャーニーを記述(正常系、エラーケース、エッジケース)
|
|
171
|
+
- 各ジャーニーにPriority(P0/P1/P2)を付与
|
|
172
|
+
- **ユーザー視点で記述(What & Why)**
|
|
173
|
+
- **ユーザーから見える挙動のみを記述**
|
|
174
|
+
- UI/UXデザイン(HTMLワイヤーフレームへのリンク、表示要素、空状態)→ generating-wireframes スキルで生成
|
|
175
|
+
- 成功基準(この機能の成功基準チェックリスト)
|
|
176
|
+
|
|
177
|
+
### 記述不要な内容
|
|
178
|
+
|
|
179
|
+
- データモデル(テーブル定義、RLSポリシー)→ TECH_DESIGN.mdに記載
|
|
180
|
+
- セッション管理の実装詳細(NextAuth、JWT等)
|
|
181
|
+
- 実装ファイルへの参照・行番号
|
|
182
|
+
- 関数名、クラス名などのコード詳細
|
|
183
|
+
- テスト実装の詳細(TECH_DESIGN.mdに記載)
|
|
184
|
+
- 実装方法の詳細(TECH_DESIGN.mdに記載)
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# SCREEN_ITEMS_DEFINITION.md テンプレート
|
|
2
|
+
|
|
3
|
+
**目的**: 画面の入力項目・表示項目を「UI × バリデーション × DBマッピング」の粒度で定義する実装SSoT(Single Source of Truth)
|
|
4
|
+
|
|
5
|
+
**配置**: `docs/<app>/<path>/SCREEN_ITEMS_DEFINITION.md`
|
|
6
|
+
|
|
7
|
+
**作成タイミング**(オプション。以下に当てはまる画面で作成を検討):
|
|
8
|
+
|
|
9
|
+
- フォーム項目が多い画面
|
|
10
|
+
- 複雑なバリデーションルール/操作モード(Create / Edit / View)がある
|
|
11
|
+
- 表示形式(フォーマット・単位)や DB カラムとの対応の明示が必要
|
|
12
|
+
|
|
13
|
+
**画面タイプ別の使い分け**:
|
|
14
|
+
|
|
15
|
+
| 画面タイプ | 使うセクション |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| 入力フォーム(登録・編集) | 0. 操作モード / 1. 画面項目定義(入力) / 操作ボタン定義 / 3. バリデーション適用ルール |
|
|
18
|
+
| 一覧・検索 | 1.x 検索条件項目 + 1.x 一覧表示項目 |
|
|
19
|
+
| 詳細・表示専用 | 1. 画面項目定義(表示) + 表示レイアウト |
|
|
20
|
+
|
|
21
|
+
不要なセクション(操作モード・バリデーション適用ルール等)は表示専用画面では省略してよい。
|
|
22
|
+
|
|
23
|
+
> **記述粒度の方針**: 本書は技術スタック非依存とする。言語固有の型(TS型等)・ORM・フレームワーク詳細は記載せず TECH_DESIGN.md に委ねる。DBマッピング(保存先テーブル・カラム)は画面項目と DB スキーマの対応を示す SSoT として記載する。
|
|
24
|
+
|
|
25
|
+
## テンプレート構造
|
|
26
|
+
|
|
27
|
+
```markdown
|
|
28
|
+
# [画面名]([SCREEN_ID])画面項目定義
|
|
29
|
+
|
|
30
|
+
本ドキュメントは、[画面名]画面における **画面項目定義(実装SSoT)** を定義する。
|
|
31
|
+
|
|
32
|
+
- 画面レイアウト(Excel / 画像 / WF)を正(SSoT)とする
|
|
33
|
+
- DB スキーマは画面項目定義に追従する(DB のメタデータは本書には定義しない)
|
|
34
|
+
- SELECT 項目は label-only(表示文字列=保存値)とする
|
|
35
|
+
- デフォルト値の表記は **null で統一**する
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 0. 操作モード定義 ← 入力フォームの場合のみ
|
|
40
|
+
|
|
41
|
+
| モード | 説明 |
|
|
42
|
+
| ------ | -------------------------- |
|
|
43
|
+
| Create | 新規登録時の操作 |
|
|
44
|
+
| Edit | 既存編集時の操作 |
|
|
45
|
+
| View | 参照専用モード(初期表示) |
|
|
46
|
+
|
|
47
|
+
※ View モードではすべての項目を非活性とする(表中には明示しない)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 1. 画面項目定義(UI × Validation × DB Mapping)
|
|
52
|
+
|
|
53
|
+
### 表記ルール ← 操作モードを持つ画面のみ
|
|
54
|
+
|
|
55
|
+
- **必須条件**:操作モード(Create / Edit)ごとの必須可否を記載(例: Create: 必須 / Edit: 必須)
|
|
56
|
+
- **活性条件**:操作モード(Create / Edit)ごとの入力可否を記載(例: Create: 活性 / Edit: 非活性)
|
|
57
|
+
- **デフォルト値**:新規登録時(Create)のみ適用
|
|
58
|
+
- **SELECT定義**:`2. SELECT項目定義` 内の参照先ID(例: `S.1 業界`)を記載
|
|
59
|
+
|
|
60
|
+
#### 列の意味(列レジェンド)
|
|
61
|
+
|
|
62
|
+
| 列 | 内容 |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| 項目名 | 画面に表示するラベル |
|
|
65
|
+
| 必須(条件) | 必須可否。操作モードがある場合はモードごと |
|
|
66
|
+
| 活性(条件) | 入力可否。操作モードがある場合はモードごと |
|
|
67
|
+
| デフォルト値 | Create 時の初期値(なければ null) |
|
|
68
|
+
| 入力コンポーネント | Text / TextArea / Number / Date / Select / Checkbox / Tag など |
|
|
69
|
+
| 制約 | maxLen / 範囲(0–100)/ 相関(From ≤ To)/ 形式 など |
|
|
70
|
+
| SELECT定義 | SELECT 項目の参照先ID(なければ – ) |
|
|
71
|
+
| DBテーブル | 保存先テーブル |
|
|
72
|
+
| DBカラム | 保存先カラム |
|
|
73
|
+
| 備考 | 連動・特記事項(新規カラム・FK 等もここに記す) |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### 1.1 [セクション名(例: 基本情報)] ← 入力フォーム
|
|
78
|
+
|
|
79
|
+
| 項目名 | 必須条件 | 活性条件 | デフォルト値(Create) | 入力コンポーネント | 制約 | SELECT定義 | DBテーブル | DBカラム | 備考 |
|
|
80
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
81
|
+
| [項目名] | Create: 必須 / Edit: 必須 | Create: 活性 / Edit: 活性 | null | Text | maxLen=100 | – | [table] | [column] | |
|
|
82
|
+
| [項目名] | Create: 任意 / Edit: 任意 | Create: 活性 / Edit: 活性 | null | Select | – | S.1 [選択肢名] | [table] | [column] | |
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### 1.x 検索条件項目 ← 一覧・検索画面
|
|
87
|
+
|
|
88
|
+
| 項目名 | 必須 | 活性 | デフォルト値 | 入力コンポーネント | 制約 | SELECT定義 | DBテーブル | DBカラム | 備考 |
|
|
89
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
90
|
+
| [項目名] | 任意 | 活性 | null | Text | 部分一致 | – | [table] | [column] | OR検索 |
|
|
91
|
+
|
|
92
|
+
### 1.x 一覧表示項目 ← 一覧・検索画面
|
|
93
|
+
|
|
94
|
+
| 項目名 | 表示 | ソート | DBテーブル | DBカラム | 備考 |
|
|
95
|
+
| --- | --- | --- | --- | --- | --- |
|
|
96
|
+
| [項目名] | ○ | ○ | [table] | [column] | |
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### 1.x [タブ名]表示項目 ← 詳細・表示専用画面
|
|
101
|
+
|
|
102
|
+
| 項目名 | 表示 | DBテーブル | DBカラム | 備考 |
|
|
103
|
+
| --- | --- | --- | --- | --- |
|
|
104
|
+
| [項目名] | ○ | [table] | [column] | 表示形式(例: 「XX歳」/ From–To)を備考に記載 |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### 1.x 操作ボタン定義 ← ボタンを持つ画面
|
|
109
|
+
|
|
110
|
+
| ボタン名 | 表示条件 | 活性条件 | アクション | 備考 |
|
|
111
|
+
| --- | --- | --- | --- | --- |
|
|
112
|
+
| [登録] | Create / Edit モード | Create: 活性 / Edit: 活性 / View: 非活性 | 全バリデーション後に保存 | |
|
|
113
|
+
| [キャンセル] | Create / Edit モード | Create: 活性 / Edit: 活性 | 未保存変更があれば破棄確認 | |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 2. SELECT項目定義(共通参照)
|
|
118
|
+
|
|
119
|
+
- 本画面で使用する SELECT 項目の選択肢は共通定義(例: `[SELECT_ITEM_DEFINITION.md](../../../common/SELECT_ITEM_DEFINITION.md)`)を参照する。
|
|
120
|
+
- 表中の「SELECT定義」列には、参照先ID(例: `S.1 業界`)を記載する。
|
|
121
|
+
- 共通定義を持たない場合は、本セクションに `S.x [名称]` 単位で選択肢一覧を直接定義する。
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 3. バリデーション適用ルール ← 下書き保存等のモードがある画面
|
|
126
|
+
|
|
127
|
+
| バリデーション種別 | 説明 | Create / Edit(本登録) | 下書き保存 |
|
|
128
|
+
| --- | --- | --- | --- |
|
|
129
|
+
| 必須チェック | 必須条件列で「必須」と定義された項目の入力有無を検証 | ✅ 適用 | ❌ スキップ |
|
|
130
|
+
| 型チェック | 型の整合性を検証 | ✅ 適用 | ✅ 適用 |
|
|
131
|
+
| 桁数・文字数チェック | maxLen 等の上限値を検証 | ✅ 適用 | ✅ 適用 |
|
|
132
|
+
| 形式チェック | 日付・メール等のフォーマットを検証 | ✅ 適用 | ✅ 適用 |
|
|
133
|
+
| 範囲・相関チェック | From ≤ To、0–100 等を検証 | ✅ 適用 | ✅ 適用 |
|
|
134
|
+
|
|
135
|
+
※ スキップされるのは必須チェックのみ。入力値が存在する場合の型・桁数・形式・範囲チェックは常に実施する。
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 4. DBスキーマ変更方針([table])
|
|
140
|
+
|
|
141
|
+
- **1. 画面項目定義の表に記載された DBカラムを正とする**
|
|
142
|
+
- 既存 DB に同一カラム名が存在する場合はそれを利用する
|
|
143
|
+
- 存在しない場合は新規追加する
|
|
144
|
+
- 使用されていないカラムを削除する際は、必ず開発者へ確認をとる
|
|
145
|
+
- 新規追加が必要なカラムも `1. 画面項目定義` 表の DBテーブル / DBカラム に記載し(必要なら備考に「新規」と注記)、別表で再掲しない(SSoTの二重化を避ける)
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 5. 補足
|
|
150
|
+
|
|
151
|
+
- 本ドキュメントは、実装・DB設計・QA における **Single Source of Truth** とする
|
|
152
|
+
- (画面固有の前提: ページング方式・閲覧権限・未登録項目の表示「-」など)
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## 重要なポイント
|
|
156
|
+
|
|
157
|
+
### 記述すべき内容
|
|
158
|
+
|
|
159
|
+
- 画面に存在するすべての入力項目・表示項目を網羅
|
|
160
|
+
- 各項目の:必須/活性条件、デフォルト値、入力コンポーネント、制約、SELECT参照、DBマッピング(テーブル・カラム)
|
|
161
|
+
- 操作モード(Create / Edit / View)がある場合はモードごとの差異
|
|
162
|
+
- 操作ボタンの表示/活性条件とアクション
|
|
163
|
+
- バリデーション適用ルール(特に下書き保存など必須チェックを緩めるモード)
|
|
164
|
+
|
|
165
|
+
### 記述不要な内容
|
|
166
|
+
|
|
167
|
+
- ユーザージャーニー・画面遷移の文脈 → REQUIREMENTS.md に記載
|
|
168
|
+
- 技術設計・アーキテクチャ・実装コード → TECH_DESIGN.md に記載
|
|
169
|
+
- 言語固有の型定義・実装技術に依存する記述(TS型・ORM・フレームワーク詳細)→ TECH_DESIGN.md に記載
|
|
170
|
+
- DB のメタデータ詳細(インデックス・RLS 等)→ TECH_DESIGN.md に記載
|
|
171
|
+
- 関数名・クラス名・ファイル行番号などのコード参照
|
|
172
|
+
|
|
173
|
+
### 運用上の原則
|
|
174
|
+
|
|
175
|
+
- **画面レイアウト(Excel / 画像 / WF)を正(SSoT)とし、DB スキーマは画面項目定義に追従する**
|
|
176
|
+
- 本書は技術スタック非依存。言語固有の型やフレームワーク詳細は持ち込まない
|
|
177
|
+
- SELECT 項目は label-only(表示文字列=保存値)を基本とする
|
|
178
|
+
- デフォルト値の表記は null で統一する
|
|
179
|
+
- 共通の選択肢は SELECT 共通定義ファイルに切り出し、本書からは参照IDで指す
|