yodogawa 2.0.0 → 2.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/CHANGELOG.md +39 -0
- package/README.md +60 -22
- package/bin/cli.js +3 -7
- package/package.json +1 -1
- package/skills/a-001-setup-doc-structure/SKILL.md +67 -100
- package/skills/a-001-setup-doc-structure/reference/directory-structure.md +52 -0
- package/skills/a-002-initialize-project/SKILL.md +124 -289
- package/skills/a-002-initialize-project/examples/nfr-baseline.md +38 -0
- package/skills/a-002-initialize-project/reference/hearing-questions.md +92 -0
- package/skills/a-002-initialize-project/reference/structure-check.md +48 -0
- package/skills/a-003-create-scenarios/SKILL.md +99 -142
- package/skills/a-003-create-scenarios/examples/gherkin-templates.md +71 -0
- package/skills/a-003-create-scenarios/reference/structure-check.md +46 -0
- package/skills/a-004-define-domain-model/SKILL.md +99 -144
- package/skills/a-004-define-domain-model/reference/event-storming-guide.md +71 -0
- package/skills/a-005-create-domain-diagram/SKILL.md +94 -120
- package/skills/a-005-create-domain-diagram/examples/mermaid-templates.md +73 -0
- package/skills/a-005-create-domain-diagram/reference/structure-check.md +43 -0
- package/skills/a-006-review-requirements-domain/SKILL.md +85 -144
- package/skills/a-006-review-requirements-domain/examples/review-report-template.md +58 -0
- package/skills/a-006-review-requirements-domain/reference/consistency-checks.md +60 -0
- package/skills/a-007-define-tech-stack/SKILL.md +102 -130
- package/skills/a-007-define-tech-stack/examples/stack-interview.md +83 -0
- package/skills/a-007-define-tech-stack/reference/structure-check.md +51 -0
- package/skills/a-008-define-repository-structure/SKILL.md +99 -129
- package/skills/a-008-define-repository-structure/examples/structure-templates.md +108 -0
- package/skills/a-008-define-repository-structure/reference/structure-check.md +55 -0
- package/skills/a-009-define-screen-design/SKILL.md +106 -130
- package/skills/a-009-define-screen-design/examples/screen-templates.md +66 -0
- package/skills/a-009-define-screen-design/reference/structure-check.md +47 -0
- package/skills/a-010-define-design-system/SKILL.md +134 -212
- package/skills/a-010-define-design-system/examples/css-tokens.md +71 -0
- package/skills/a-010-define-design-system/reference/component-catalog.md +44 -0
- package/skills/a-011-define-data-model/SKILL.md +121 -134
- package/skills/a-011-define-data-model/examples/erd-templates.md +108 -0
- package/skills/a-011-define-data-model/reference/structure-check.md +56 -0
- package/skills/a-012-define-api-spec/SKILL.md +108 -132
- package/skills/a-012-define-api-spec/examples/api-templates.md +117 -0
- package/skills/a-012-define-api-spec/reference/structure-check.md +49 -0
- package/skills/a-013-define-architecture/SKILL.md +101 -128
- package/skills/a-013-define-architecture/examples/architecture-templates.md +98 -0
- package/skills/a-013-define-architecture/reference/structure-check.md +53 -0
- package/skills/a-014-define-infrastructure/SKILL.md +113 -130
- package/skills/a-014-define-infrastructure/examples/infrastructure-templates.md +97 -0
- package/skills/a-014-define-infrastructure/reference/structure-check.md +63 -0
- package/skills/a-015-review-design/SKILL.md +88 -140
- package/skills/a-015-review-design/examples/review-report-template.md +59 -0
- package/skills/a-015-review-design/reference/consistency-checks.md +47 -0
- package/skills/b-001-create-task-directory/SKILL.md +68 -78
- package/skills/b-001-create-task-directory/examples/naming-convention.md +39 -0
- package/skills/b-002-create-task-definition/SKILL.md +115 -172
- package/skills/b-002-create-task-definition/examples/hearing-and-criteria.md +49 -0
- package/skills/b-002-create-task-definition/reference/structure-check.md +42 -0
- package/skills/b-003-create-task-research/SKILL.md +130 -454
- package/skills/b-003-create-task-research/examples/research-tables.md +63 -0
- package/skills/b-003-create-task-research/reference/investigation-guide.md +106 -0
- package/skills/b-004-create-task-implementation/SKILL.md +97 -100
- package/skills/b-004-create-task-implementation/examples/phase-step-template.md +57 -0
- package/skills/b-004-create-task-implementation/reference/structure-check.md +34 -0
- package/skills/b-005-review-task/SKILL.md +117 -324
- package/skills/b-005-review-task/examples/review-report-template.md +62 -0
- package/skills/b-005-review-task/reference/assessment-criteria.md +79 -0
- package/skills/b-005-review-task/reference/consistency-checks.md +69 -0
- package/skills/c-001-implement-task/SKILL.md +186 -521
- package/skills/c-001-implement-task/examples/commit-and-pr.md +92 -0
- package/skills/c-001-implement-task/examples/task-list-format.md +50 -0
- package/skills/c-001-implement-task/reference/implementation-loop.md +65 -0
- package/skills/c-001-implement-task/reference/validation-loop.md +66 -0
- package/skills/c-002-update-documentation/SKILL.md +159 -853
- package/skills/c-002-update-documentation/examples/project-doc-updates.md +190 -0
- package/skills/c-002-update-documentation/examples/task-doc-updates.md +102 -0
- package/skills/c-002-update-documentation/reference/doc-structure-and-checks.md +100 -0
- package/templates/tasks/task-template/a-definition.md +1 -1
- package/templates/tasks/task-template/b-research.md +1 -1
- package/templates/tasks/task-template/c-implementation.md +2 -2
|
@@ -1,134 +1,121 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: a-011-define-data-model
|
|
3
|
-
description: ドメインモデルと画面設計からデータベース構造(ERD
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- `docs/project/
|
|
20
|
-
- `docs/project/design
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
## 完了条件
|
|
123
|
-
|
|
124
|
-
- `docs/project/design/05-data-model.md` が作成されている。
|
|
125
|
-
- データベーススキーマ(テーブル、カラム、型、制約)が定義されている。
|
|
126
|
-
- エンティティ間の関係性が可視化(ERD)されている。
|
|
127
|
-
- ユーザーが内容を承認している。
|
|
128
|
-
|
|
129
|
-
## エスカレーション
|
|
130
|
-
|
|
131
|
-
- ドメインモデルとの不整合がある場合:
|
|
132
|
-
- 「ドメインモデルのAggregate構造とデータモデルが乖離しています。ORMのマッピング戦略を確認するか、ドメインモデルを見直してください。」
|
|
133
|
-
- パフォーマンス懸念がある場合:
|
|
134
|
-
- 「正規化によりJOINが多発する可能性があります。Read Model(参照用テーブル)の導入や、意図的な非正規化を検討しませんか?」
|
|
1
|
+
---
|
|
2
|
+
name: a-011-define-data-model
|
|
3
|
+
description: ドメインモデルと画面設計からデータベース構造(ERD・エンティティ・属性・リレーションシップ・制約)を定義する。画面設計後、永続化層を設計する際に使用。
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
allowed-tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# DefineDataModel (a-011)
|
|
9
|
+
|
|
10
|
+
## 目的
|
|
11
|
+
|
|
12
|
+
- ドメインモデル(Aggregates)と画面設計を基に、データベース構造を定義する。
|
|
13
|
+
- エンティティ(テーブル)、属性(カラム)、リレーションシップを明確化する。
|
|
14
|
+
- データ型、制約(NOT NULL、UNIQUE、CHECK)、インデックス戦略を決定する。
|
|
15
|
+
- Mermaid ERD(Entity Relationship Diagram)で視覚化し、開発者間の認識を統一する。
|
|
16
|
+
|
|
17
|
+
## 前提
|
|
18
|
+
|
|
19
|
+
- `docs/project/domain/01-domain-model.md` が作成されていること。
|
|
20
|
+
- `docs/project/design/01-tech-stack.md` が作成されていること(DB 選定済み)。
|
|
21
|
+
- `docs/project/design/03-screen-design.md` が作成されていること。
|
|
22
|
+
- `docs/project/design/` ディレクトリが存在すること。
|
|
23
|
+
|
|
24
|
+
## 手順
|
|
25
|
+
|
|
26
|
+
### 1. ドキュメントと前提条件の確認
|
|
27
|
+
|
|
28
|
+
以下を読み込む:
|
|
29
|
+
|
|
30
|
+
- `docs/project/domain/01-domain-model.md`
|
|
31
|
+
- `docs/project/design/01-tech-stack.md`
|
|
32
|
+
- `docs/project/design/03-screen-design.md`
|
|
33
|
+
|
|
34
|
+
不足があれば対応スキルの実行を促す。
|
|
35
|
+
|
|
36
|
+
### 2. テンプレートの準備
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
SCRIPT_DIR=$(for d in .agent .cursor .claude .codex; do [ -d "$d" ] && echo "$d" && break; done)
|
|
40
|
+
cp "$SCRIPT_DIR/templates/project/04-design/05-data-model.md" "docs/project/design/05-data-model.md"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 3. エンティティの抽出と提案
|
|
44
|
+
|
|
45
|
+
- **ドメインモデルから**: Aggregate Root および内部エンティティを抽出
|
|
46
|
+
- **画面設計から**: 表示・入力項目から必要なデータ構造(履歴、設定、ログ等)を抽出
|
|
47
|
+
- 「[エンティティ名] (対応 Aggregate: [名前])」形式で一覧化
|
|
48
|
+
|
|
49
|
+
エンティティ一覧の記述例は [examples/erd-templates.md](examples/erd-templates.md#エンティティ一覧テーブル) を参照。
|
|
50
|
+
|
|
51
|
+
### 4. 詳細定義(インタビュー)
|
|
52
|
+
|
|
53
|
+
#### 4.1 基本定義
|
|
54
|
+
|
|
55
|
+
- テーブル名(物理名)、論理名、説明
|
|
56
|
+
- 主キー戦略(Auto Increment / UUID / CUID)— 選択ガイドは [examples/erd-templates.md](examples/erd-templates.md#主キー戦略) を参照
|
|
57
|
+
|
|
58
|
+
#### 4.2 属性(カラム)
|
|
59
|
+
|
|
60
|
+
- カラム名、データ型(DB 製品に合わせて具体化)
|
|
61
|
+
- 制約(NOT NULL, UNIQUE, DEFAULT, CHECK)
|
|
62
|
+
- 監査カラム(created_at, updated_at)の有無
|
|
63
|
+
|
|
64
|
+
カラム定義の例は [examples/erd-templates.md](examples/erd-templates.md#カラム定義テンプレート) を参照。
|
|
65
|
+
|
|
66
|
+
#### 4.3 リレーションシップ
|
|
67
|
+
|
|
68
|
+
- 関連(1:1 / 1:N / N:M)
|
|
69
|
+
- 外部キー制約(ON DELETE CASCADE / SET NULL / RESTRICT)— 選択基準は [examples/erd-templates.md](examples/erd-templates.md#外部キー削除動作の選択) を参照
|
|
70
|
+
|
|
71
|
+
### 5. ERD の作成と正規化
|
|
72
|
+
|
|
73
|
+
- Mermaid ERD 形式で記述(テンプレートは [examples/erd-templates.md](examples/erd-templates.md#mermaid-erd-記述例) を参照)
|
|
74
|
+
- 正規化(1NF-3NF)を確認。意図的な非正規化があれば理由を記録
|
|
75
|
+
- インデックス戦略(検索頻度、UNIQUE、複合インデックス)を定義
|
|
76
|
+
|
|
77
|
+
正規化の目安は [reference/structure-check.md](reference/structure-check.md#正規化レベルの目安) を参照。
|
|
78
|
+
|
|
79
|
+
### 6. ドキュメント作成
|
|
80
|
+
|
|
81
|
+
`docs/project/design/05-data-model.md` に以下を記入する:
|
|
82
|
+
|
|
83
|
+
- エンティティ一覧
|
|
84
|
+
- リレーションシップ定義
|
|
85
|
+
- ERD(Mermaid)
|
|
86
|
+
- インデックス戦略・非正規化の記録
|
|
87
|
+
|
|
88
|
+
### 7. 構造チェック
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
grep "## エンティティ一覧" docs/project/design/05-data-model.md \
|
|
92
|
+
&& grep "\`\`\`mermaid" docs/project/design/05-data-model.md \
|
|
93
|
+
&& grep "## リレーションシップ" docs/project/design/05-data-model.md \
|
|
94
|
+
&& echo "OK" || echo "MISSING SECTION"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
詳細チェックリストは [reference/structure-check.md](reference/structure-check.md#チェックリスト) を参照。
|
|
98
|
+
|
|
99
|
+
### 8. Git への追加(任意)
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
git add docs/project/design/05-data-model.md
|
|
103
|
+
git commit -m "docs: データモデル(ERD)の定義"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 完了条件
|
|
107
|
+
|
|
108
|
+
- `docs/project/design/05-data-model.md` が作成されている。
|
|
109
|
+
- データベーススキーマ(テーブル、カラム、型、制約)が定義されている。
|
|
110
|
+
- エンティティ間の関係性が可視化(ERD)されている。
|
|
111
|
+
- ユーザーが内容を承認している。
|
|
112
|
+
|
|
113
|
+
## エスカレーション
|
|
114
|
+
|
|
115
|
+
- **ドメインモデルとの不整合**: 「Aggregate 構造とデータモデルが乖離しています。ORM のマッピング戦略を確認するか、ドメインモデルを見直してください。」
|
|
116
|
+
- **パフォーマンス懸念**: 「正規化により JOIN が多発する可能性があります。Read Model や意図的な非正規化を検討しませんか?」
|
|
117
|
+
|
|
118
|
+
## 参考
|
|
119
|
+
|
|
120
|
+
- [examples/erd-templates.md](examples/erd-templates.md) — エンティティ一覧、カラム定義、主キー戦略、外部キー動作、Mermaid ERD、インデックス・非正規化の例
|
|
121
|
+
- [reference/structure-check.md](reference/structure-check.md) — 構造確認コマンド、チェックリスト、正規化レベル、レビュー質問
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# エンティティ定義と ERD テンプレート
|
|
2
|
+
|
|
3
|
+
SKILL.md 手順3〜5 で使用するエンティティ記述・リレーション・ERD のサンプル。
|
|
4
|
+
|
|
5
|
+
## エンティティ一覧テーブル
|
|
6
|
+
|
|
7
|
+
| 物理名 | 論理名 | 対応 Aggregate | 説明 |
|
|
8
|
+
|:--|:--|:--|:--|
|
|
9
|
+
| users | ユーザー | User | 認証・プロフィール |
|
|
10
|
+
| orders | 注文 | Order | 注文ヘッダ |
|
|
11
|
+
| order_items | 注文明細 | Order (child) | 注文の商品行 |
|
|
12
|
+
| products | 商品 | Product | 商品マスタ |
|
|
13
|
+
|
|
14
|
+
## カラム定義テンプレート
|
|
15
|
+
|
|
16
|
+
### users テーブル
|
|
17
|
+
|
|
18
|
+
| カラム | 型 | 制約 | 説明 |
|
|
19
|
+
|:--|:--|:--|:--|
|
|
20
|
+
| id | UUID | PK | 主キー |
|
|
21
|
+
| email | VARCHAR(255) | NOT NULL, UNIQUE | ログイン ID |
|
|
22
|
+
| password_hash | VARCHAR(255) | NOT NULL | bcrypt ハッシュ |
|
|
23
|
+
| status | VARCHAR(20) | NOT NULL, DEFAULT 'active' | active / suspended |
|
|
24
|
+
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT NOW() | 作成日時 |
|
|
25
|
+
| updated_at | TIMESTAMPTZ | NOT NULL, DEFAULT NOW() | 更新日時 |
|
|
26
|
+
|
|
27
|
+
### 主キー戦略
|
|
28
|
+
|
|
29
|
+
| 戦略 | 適合シーン |
|
|
30
|
+
|:--|:--|
|
|
31
|
+
| Auto Increment | 単一 DB、連番の可読性重視 |
|
|
32
|
+
| UUID v4 | 分散環境、推測困難性 |
|
|
33
|
+
| UUID v7 / ULID | ソート可能な ID が必要 |
|
|
34
|
+
| CUID | 短く衝突しにくい ID |
|
|
35
|
+
|
|
36
|
+
## リレーションシップ定義例
|
|
37
|
+
|
|
38
|
+
- `users 1 : N orders` (FK: orders.user_id → users.id)
|
|
39
|
+
- `orders 1 : N order_items` (FK: order_items.order_id → orders.id, ON DELETE CASCADE)
|
|
40
|
+
- `products 1 : N order_items` (FK: order_items.product_id → products.id, ON DELETE RESTRICT)
|
|
41
|
+
|
|
42
|
+
### 外部キー削除動作の選択
|
|
43
|
+
|
|
44
|
+
- `CASCADE`: 親削除時に子も削除(注文明細など)
|
|
45
|
+
- `SET NULL`: 親削除時に NULL(オプション参照)
|
|
46
|
+
- `RESTRICT`: 子が存在すれば親削除不可(マスタデータ)
|
|
47
|
+
|
|
48
|
+
## Mermaid ERD 記述例
|
|
49
|
+
|
|
50
|
+
```mermaid
|
|
51
|
+
erDiagram
|
|
52
|
+
users ||--o{ orders : places
|
|
53
|
+
orders ||--|{ order_items : contains
|
|
54
|
+
products ||--o{ order_items : referenced_by
|
|
55
|
+
|
|
56
|
+
users {
|
|
57
|
+
uuid id PK
|
|
58
|
+
varchar email UK
|
|
59
|
+
varchar password_hash
|
|
60
|
+
varchar status
|
|
61
|
+
timestamptz created_at
|
|
62
|
+
timestamptz updated_at
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
orders {
|
|
66
|
+
uuid id PK
|
|
67
|
+
uuid user_id FK
|
|
68
|
+
varchar status
|
|
69
|
+
numeric total_amount
|
|
70
|
+
timestamptz created_at
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
order_items {
|
|
74
|
+
uuid id PK
|
|
75
|
+
uuid order_id FK
|
|
76
|
+
uuid product_id FK
|
|
77
|
+
int quantity
|
|
78
|
+
numeric unit_price
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
products {
|
|
82
|
+
uuid id PK
|
|
83
|
+
varchar name
|
|
84
|
+
numeric price
|
|
85
|
+
int stock
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## インデックス戦略の例
|
|
90
|
+
|
|
91
|
+
- 検索頻度の高いカラム(`orders.user_id`, `orders.status`)に単純インデックス
|
|
92
|
+
- 一意性保証: `users.email` に UNIQUE
|
|
93
|
+
- 複合インデックス: `(user_id, created_at DESC)` で注文履歴の高速取得
|
|
94
|
+
- 全文検索用途は別途 pg_trgm / GIN 等を検討
|
|
95
|
+
|
|
96
|
+
## 意図的な非正規化の記録例
|
|
97
|
+
|
|
98
|
+
- `orders.total_amount`: 集計クエリの高速化のため、order_items の合計を冗長保持
|
|
99
|
+
- 更新時のトリガ or アプリ側計算を明記
|
|
100
|
+
|
|
101
|
+
## コミットメッセージ例
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
docs: データモデル(ERD)の定義
|
|
105
|
+
|
|
106
|
+
- エンティティ、属性、リレーションシップを定義
|
|
107
|
+
- Mermaid による ER 図を追加
|
|
108
|
+
```
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# 構造チェックとレビュー観点
|
|
2
|
+
|
|
3
|
+
SKILL.md 手順7〜8 で使う確認コマンドとレビュー観点。
|
|
4
|
+
|
|
5
|
+
## セクション存在確認
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# エンティティ一覧の確認
|
|
9
|
+
grep "## エンティティ一覧" docs/project/design/05-data-model.md && echo "OK" || echo "MISSING: Entities"
|
|
10
|
+
# ERD の確認
|
|
11
|
+
grep "\`\`\`mermaid" docs/project/design/05-data-model.md && echo "OK" || echo "MISSING: ERD"
|
|
12
|
+
# リレーションシップ定義の確認
|
|
13
|
+
grep "## リレーションシップ" docs/project/design/05-data-model.md && echo "OK" || echo "MISSING: Relationships"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## チェックリスト
|
|
17
|
+
|
|
18
|
+
- [ ] `docs/project/design/05-data-model.md` が作成されている
|
|
19
|
+
- [ ] 全エンティティの物理名・論理名が定義されている
|
|
20
|
+
- [ ] 各カラムの型・制約・デフォルト値が定義されている
|
|
21
|
+
- [ ] 主キー戦略(Auto Increment / UUID / CUID)が明記されている
|
|
22
|
+
- [ ] 監査カラム(created_at, updated_at)の有無が決定している
|
|
23
|
+
- [ ] リレーション(1:1, 1:N, N:M)と外部キー動作(CASCADE / SET NULL / RESTRICT)が定義されている
|
|
24
|
+
- [ ] ERD が正しくレンダリングされる
|
|
25
|
+
- [ ] インデックス戦略が記録されている
|
|
26
|
+
- [ ] 意図的な非正規化があれば理由が記載されている
|
|
27
|
+
|
|
28
|
+
## 正規化レベルの目安
|
|
29
|
+
|
|
30
|
+
- **1NF**: 繰り返しグループを排除、原子値のみ
|
|
31
|
+
- **2NF**: 複合主キーの部分従属を排除
|
|
32
|
+
- **3NF**: 推移関数従属を排除
|
|
33
|
+
- 通常は 3NF を基本とし、パフォーマンス目的で意図的に非正規化する場合は理由を明記
|
|
34
|
+
|
|
35
|
+
## レビュー確認質問
|
|
36
|
+
|
|
37
|
+
- 「ドメインモデルの Aggregate 構造と整合していますか?」
|
|
38
|
+
- 「検索・集計のパフォーマンス要件を満たせそうですか?」
|
|
39
|
+
- 「ソフトデリート / 履歴保持の方針は決まっていますか?」
|
|
40
|
+
- 「機微情報(パスワード、PII)の扱いは適切ですか?」
|
|
41
|
+
|
|
42
|
+
## Git への追加(任意)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
git add docs/project/design/05-data-model.md
|
|
46
|
+
git status
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
推奨コミットメッセージ:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
docs: データモデル(ERD)の定義
|
|
53
|
+
|
|
54
|
+
- エンティティ、属性、リレーションシップを定義
|
|
55
|
+
- Mermaid による ER 図を追加
|
|
56
|
+
```
|