yodogawa 2.1.3 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +134 -94
  2. package/LICENSE +1 -1
  3. package/README.md +351 -263
  4. package/bin/checks/id-trace.js +137 -0
  5. package/bin/checks/links.js +59 -0
  6. package/bin/checks/placeholder.js +132 -0
  7. package/bin/checks/structure.js +127 -0
  8. package/bin/cli.js +51 -67
  9. package/bin/commands/doctor.js +128 -0
  10. package/bin/commands/install.js +58 -0
  11. package/bin/commands/new-task.js +117 -0
  12. package/bin/lib/check-cli.js +19 -0
  13. package/bin/lib/findings.js +31 -0
  14. package/bin/lib/markdown.js +103 -0
  15. package/bin/lib/project-spec.js +138 -0
  16. package/bin/lib/walk-md.js +23 -0
  17. package/package.json +68 -55
  18. package/skills/a-001-setup-doc-structure/SKILL.md +68 -68
  19. package/skills/a-001-setup-doc-structure/reference/directory-structure.md +75 -75
  20. package/skills/a-002-initialize-project/SKILL.md +145 -118
  21. package/skills/a-002-initialize-project/reference/hearing-questions.md +91 -41
  22. package/skills/a-002-initialize-project/reference/structure-check.md +12 -22
  23. package/skills/a-002a-slice-mvp-scope/SKILL.md +105 -0
  24. package/skills/a-002b-define-user-stories/SKILL.md +80 -0
  25. package/skills/a-002b-define-user-stories/reference/user-stories-guide.md +78 -0
  26. package/skills/a-003-create-scenarios/SKILL.md +97 -96
  27. package/{templates/project/02-behavior/01-scenarios.md → skills/a-003-create-scenarios/reference/detailed-gherkin-template.md} +413 -406
  28. package/skills/a-003-create-scenarios/reference/structure-check.md +20 -17
  29. package/skills/a-004-define-domain-model/SKILL.md +107 -98
  30. package/skills/a-004-define-domain-model/reference/event-storming-guide.md +33 -7
  31. package/skills/a-004-define-domain-model/reference/ubiquitous-language-guide.md +49 -0
  32. package/skills/a-005-create-domain-diagram/SKILL.md +18 -17
  33. package/skills/a-006-review-requirements-domain/SKILL.md +59 -22
  34. package/skills/a-006-review-requirements-domain/examples/review-report-template.md +27 -7
  35. package/skills/a-006-review-requirements-domain/reference/consistency-checks.md +53 -18
  36. package/skills/a-007-define-tech-stack/SKILL.md +99 -99
  37. package/skills/a-008-define-repository-structure/SKILL.md +96 -96
  38. package/skills/a-009-define-screen-design/SKILL.md +103 -103
  39. package/skills/a-010-define-design-system/SKILL.md +130 -130
  40. package/skills/a-011-define-data-model/SKILL.md +118 -118
  41. package/skills/a-012-define-api-spec/SKILL.md +105 -105
  42. package/skills/a-013-define-architecture/SKILL.md +98 -98
  43. package/skills/a-014-define-infrastructure/SKILL.md +118 -110
  44. package/skills/{a-002-initialize-project → a-014-define-infrastructure}/examples/nfr-baseline.md +2 -1
  45. package/{templates/project/01-requirements/04-non-functional-requirements.md → skills/a-014-define-infrastructure/examples/non-functional-requirements.md} +120 -115
  46. package/skills/a-015-review-design/reference/consistency-checks.md +1 -1
  47. package/skills/b-001-create-task-directory/SKILL.md +68 -68
  48. package/skills/b-002-create-task-definition/SKILL.md +114 -114
  49. package/skills/b-003-create-task-research/SKILL.md +128 -128
  50. package/skills/b-004-create-task-implementation/SKILL.md +98 -98
  51. package/skills/b-005-review-task/reference/assessment-criteria.md +79 -79
  52. package/skills/c-001-implement-task/SKILL.md +186 -186
  53. package/skills/c-001-implement-task/reference/implementation-loop.md +65 -65
  54. package/skills/c-002-update-documentation/SKILL.md +159 -159
  55. package/skills/c-002-update-documentation/examples/project-doc-updates.md +4 -4
  56. package/skills/c-002-update-documentation/reference/doc-structure-and-checks.md +99 -97
  57. package/templates/project/01-requirements/01-product-brief.md +186 -0
  58. package/templates/project/01-requirements/02-mvp-scope.md +64 -0
  59. package/templates/project/01-requirements/03-parking-lot.md +29 -0
  60. package/templates/project/01-requirements/05-user-stories.md +28 -124
  61. package/templates/project/01-requirements/{02-features-implemented.md → 06-features-implemented.md} +77 -73
  62. package/templates/project/02-behavior/01-core-scenarios.md +80 -0
  63. package/templates/project/03-domain/01-domain-model.md +120 -339
  64. package/templates/project/03-domain/01-domain-sketch.md +90 -0
  65. package/templates/project/03-domain/02-ubiquitous-language.md +32 -153
  66. package/templates/project/04-design/01-tech-stack.md +367 -367
  67. package/templates/project/04-design/02-repository-structure.md +391 -391
  68. package/templates/project/04-design/03-screen-design.md +596 -596
  69. package/templates/project/04-design/04-design-system.md +261 -261
  70. package/templates/project/04-design/05-data-model.md +211 -211
  71. package/templates/project/04-design/06-api-spec.md +226 -226
  72. package/templates/project/04-design/07-architecture.md +183 -183
  73. package/templates/project/04-design/08-infrastructure.md +180 -180
  74. package/templates/project/AI_CONTEXT.md +55 -0
  75. package/templates/project/STAKEHOLDER-SUMMARY.md +66 -0
  76. package/templates/tasks/task-template/a-definition.md +143 -143
  77. package/templates/tasks/task-template/b-research.md +185 -185
  78. package/templates/tasks/task-template/c-implementation.md +200 -200
  79. package/templates/project/01-requirements/01-system-overview.md +0 -49
  80. package/templates/project/01-requirements/03-features-planned.md +0 -75
@@ -0,0 +1,80 @@
1
+ # Core Scenarios
2
+
3
+ <!--
4
+ 何のドキュメントか: MVP の「価値提供が成立する最小行動」を定義する軽量資料。
5
+ 全ケース網羅(ハッピー / エラー / 境界値)の BDD ではない。
6
+ Day 1 に必ず通る成功体験と、価値を壊す重大失敗だけを固定する。
7
+
8
+ 使い方:
9
+ - 対象は MVP Scope の Must 機能のみ(02-mvp-scope.md)。Not Now / Won't は扱わない。
10
+ - 各シナリオは「ユーザーの意図」で書く。UI 操作(ボタン名・画面遷移)の詳細には踏み込まない。
11
+ - 網羅したくなったら止める。MVP で対応しない行動・エラーは「Not Covered in MVP」へ逃がす。
12
+
13
+ SSoT の住み分け:
14
+ - User Story(05-user-stories.md)= 要約レベルの受け入れ基準(AC)。
15
+ - Core Scenario(本書)= 実行時の主要行動(誰が・何をして・何が起きれば成功か)。
16
+ - 詳細な Gherkin / 境界値 / Scenario Outline / タグ戦略が必要になったら、実装直前または
17
+ テスト設計時に任意で `skills/a-003-create-scenarios/reference/detailed-gherkin-template.md` を使う。
18
+ -->
19
+
20
+ ## 参照: MVP Scope
21
+
22
+ <!-- 02-mvp-scope.md の Must 機能のうち、本書で主要行動を固定する対象を列挙する。 -->
23
+
24
+ - 対象 Must 機能: <!-- 例: FN-001 プロフィール作成 / FN-002 コメント投稿 -->
25
+
26
+ ## Core Flow 一覧
27
+
28
+ <!--
29
+ 何を書くか: MVP の中核となるユーザー行動の流れ(1〜3本)。価値が成立する最短経路。
30
+ 記法: 表で「フロー / 主アクター / 提供価値(So that)/ 対応 Must」を一覧化する。
31
+ -->
32
+
33
+ | フロー | 主アクター | 提供価値(So that) | 対応 Must |
34
+ |---|---|---|---|
35
+ | <!-- 例: 自己紹介を作り共通点を見つける --> | <!-- 例: 新入社員 --> | <!-- 例: 早くチームに馴染める --> | <!-- 例: FN-001 --> |
36
+
37
+ ## Day 1 Happy Path(1〜3本)
38
+
39
+ <!--
40
+ 何を書くか: リリース初日に「必ず通る」成功シナリオ。MVP の価値検証の中心。
41
+ 記法: Given-When-Then を1〜数文で。ユーザーの意図を書き、UI 詳細は避ける。
42
+ -->
43
+
44
+ ### CS-001: <!-- シナリオ名 -->
45
+
46
+ - **対応フロー / Must**: <!-- 例: 自己紹介フロー / FN-001 -->
47
+ - **Given**: <!-- 前提(例: 新入社員がログイン済み) -->
48
+ - **When**: <!-- 行動(例: ライフラインチャートを入力して公開する) -->
49
+ - **Then**: <!-- 成功条件(例: プロフィールが一覧に表示され、他者が閲覧できる) -->
50
+
51
+ ## Critical Failure(価値を壊す重大失敗)
52
+
53
+ <!--
54
+ 何を書くか: 起きると MVP の価値そのものが崩れる失敗だけ。網羅ではなく「致命傷」に限定。
55
+ 法務・課金・権限・データ消失など、外すと危険な境界条件を優先する。
56
+ -->
57
+
58
+ ### CF-001: <!-- 失敗名 -->
59
+
60
+ - **何が起きると価値が壊れるか**: <!-- 例: 公開範囲を誤り社外に個人情報が漏れる -->
61
+ - **MVP での扱い**: <!-- 例: 公開範囲は社内固定(設定不可)にして発生源を断つ -->
62
+
63
+ ## Not Covered in MVP(MVP で対応しない行動・エラー)
64
+
65
+ <!--
66
+ 何を書くか: 「今回は対応しない」行動・エラーを明示する。スコープ膨張の防止弁。
67
+ 02-mvp-scope.md の Not Now / Won't と整合させる。
68
+ -->
69
+
70
+ - <!-- 例: 退職者プロフィールの自動アーカイブ → Not Now -->
71
+ - <!-- 例: 多言語対応 → Won't -->
72
+
73
+ ## AI 実装時の振る舞い注意点
74
+
75
+ <!--
76
+ 何を書くか: 実装エージェント(Vibe coding / AI)が踏みやすい落とし穴と、固定すべき振る舞い。
77
+ -->
78
+
79
+ - <!-- 例: エラーケースを勝手に網羅実装しない。Not Covered のものは作らない。 -->
80
+ - <!-- 例: 公開範囲のような Critical Failure 対策は仕様どおり固定で実装する。 -->
@@ -1,339 +1,120 @@
1
- # ドメインモデル (Event Storming)
2
-
3
- <!--
4
- 何を書くか: Event Storming形式でドメインモデルを記述したドキュメント
5
-
6
- 目的:
7
- - ビジネスドメインの境界(Bounded Context)を明確化
8
- - 各コンテキスト内のEvent Storming要素を体系的に整理
9
- - ドメイン間の関係性を可視化
10
- - チーム間の共通理解を構築
11
-
12
- Event Storming形式とは:
13
- - Alberto Brandolini考案のドメインモデリング手法
14
- - Actors, Commands, Events, Policies, Aggregatesなどの要素で構成
15
- - 時系列に沿った業務フローの表現
16
- - 色分けされた要素分類(付箋の色に対応)
17
-
18
- ドキュメント構成:
19
- 1. 各Bounded Contextごとにセクションを分ける
20
- 2. 各Context内でEvent Storming要素をリスト化
21
- 3. 最後にContext Map(全体の関係図)を記述
22
-
23
- 更新頻度:
24
- - ドメインモデリング完了後に初版作成
25
- - スプリントレビュー時に見直し
26
- - 新しいBounded Contextや要素の発見時に追加
27
- -->
28
-
29
- ---
30
-
31
- ## Bounded Context: [コンテキスト名]
32
-
33
- <!--
34
- 各Bounded Context(境界づけられたコンテキスト)を個別に記述
35
- 複数のBounded Contextがある場合は、このセクションを繰り返す
36
-
37
- 【コンテキスト名】
38
- - ビジネス領域を表す名前(ユビキタス言語を使用)
39
- - 例: 「ユーザー管理」「注文処理」「在庫管理」「決済」
40
-
41
- 【戦略的分類】
42
- - Core Domain: ビジネスの競争優位性を生む中核領域
43
- - Supporting Domain: コアをサポートする重要な領域
44
- - Generic Domain: 汎用的な機能(既製品で代替可能)
45
- -->
46
-
47
- ### 概要
48
-
49
- **戦略的分類**: <!-- Core / Supporting / Generic -->
50
-
51
- **責務**:
52
- <!-- このBounded Contextが担当するビジネス機能を1-2文で記述 -->
53
-
54
- **主要な責任**:
55
-
56
- - <!-- 責任1 -->
57
- - <!-- 責任2 -->
58
- - <!-- 責任3 -->
59
-
60
- ---
61
-
62
- ### Actors(アクター)
63
-
64
- <!--
65
- コマンドを発行する人やシステム
66
-
67
- 【記載内容】
68
- - アクター名: ユーザーの役割やシステム
69
- - 説明: アクターの責任や権限
70
- - 例: 「管理者」「エンドユーザー」「外部API」
71
-
72
- 【Event Storming表記】小さな黄色の付箋
73
-
74
- 記載のポイント:
75
- - このBounded Context内で行動するアクターのみ記載
76
- - 技術的な役割ではなく、ビジネス上の役割で記述
77
- -->
78
-
79
- | アクター | 説明 |
80
- |---------|------|
81
- | <!-- 例: 管理者 --> | <!-- 例: システム設定を管理し、ユーザー権限を制御する --> |
82
- | <!-- 例: エンドユーザー --> | <!-- 例: サービスを利用する一般ユーザー --> |
83
-
84
- ---
85
-
86
- ### Commands(コマンド)
87
-
88
- <!--
89
- アクターが発行する指示・アクション
90
-
91
- 【記載内容】
92
- - コマンド名: 命令形で記述
93
- - 発行者: どのアクターが実行するか
94
- - 説明: コマンドの目的と効果
95
-
96
- 【Event Storming表記】青色の付箋
97
-
98
- フォーマット:
99
- - 動詞で始める: 「登録する」「更新する」「削除する」「承認する」
100
- - ユーザーの意図を表現
101
- - 例: 「ユーザーを登録する」「注文を確定する」「在庫を補充する」
102
-
103
- 記載のポイント:
104
- - コマンドは必ずDomain Eventをトリガーする
105
- - UIのボタンやAPIエンドポイントに対応することが多い
106
- -->
107
-
108
- | コマンド | 発行者 | 説明 |
109
- |---------|--------|------|
110
- | <!-- 例: ユーザーを登録する --> | <!-- 例: エンドユーザー --> | <!-- 例: 新しいユーザーアカウントを作成する --> |
111
- | <!-- 例: プロフィールを更新する --> | <!-- 例: エンドユーザー --> | <!-- 例: 既存ユーザーの情報を変更する --> |
112
-
113
- ---
114
-
115
- ### Domain Events(ドメインイベント)
116
-
117
- <!--
118
- ビジネスにとって重要な出来事
119
-
120
- 【記載内容】
121
- - イベント名: 過去形で記述
122
- - トリガー: どのコマンドから発生するか
123
- - 説明: イベントの意味とビジネスへの影響
124
-
125
- 【Event Storming表記】オレンジ色の付箋
126
-
127
- フォーマット:
128
- - 過去形で記述: 「〜された」「〜完了」
129
- - ビジネスにとって意味のある出来事を表現
130
- - 例: 「ユーザー登録完了」「注文確定」「決済成功」
131
-
132
- 記載のポイント:
133
- - 技術的なイベント(「DBに保存」)ではなく、ビジネスイベント
134
- - 他のBounded Contextに通知される可能性のあるイベント
135
- - 時系列に沿って並べると業務フローが見えやすい
136
- -->
137
-
138
- | ドメインイベント | トリガー(コマンド) | 説明 |
139
- |-----------------|---------------------|------|
140
- | <!-- 例: ユーザー登録完了 --> | <!-- 例: ユーザーを登録する --> | <!-- 例: 新しいユーザーがシステムに登録された --> |
141
- | <!-- 例: プロフィール更新完了 --> | <!-- 例: プロフィールを更新する --> | <!-- 例: ユーザー情報が変更された --> |
142
-
143
- ---
144
-
145
- ### Policies(ポリシー)
146
-
147
- <!--
148
- 自動化ルールやビジネスルール
149
-
150
- 【記載内容】
151
- - ポリシー名: ルールの名称
152
- - 条件: "Whenever [イベント]"
153
- - アクション: "Then [コマンド]"
154
- - 説明: ルールの詳細
155
-
156
- 【Event Storming表記】紫/ライラック色の付箋
157
-
158
- フォーマット:
159
- - "Whenever [イベント], then [コマンド]"
160
- - "If [条件], then [アクション]"
161
- - 例: "Whenever ユーザー登録完了, then ウェルカムメールを送信する"
162
-
163
- 記載のポイント:
164
- - イベントからコマンドへの自動的な流れを表現
165
- - コードで実装される場合とオペレーターが手動で実行する場合がある
166
- - ビジネスロジックの重要な部分
167
- -->
168
-
169
- | ポリシー | 条件(Whenever) | アクション(Then) | 説明 |
170
- |---------|-----------------|-------------------|------|
171
- | <!-- 例: ウェルカムメール送信 --> | <!-- 例: ユーザー登録完了 --> | <!-- 例: ウェルカムメールを送信する --> | <!-- 例: 新規ユーザーに対して自動的にメールを送信 --> |
172
- | <!-- 例: 管理者通知 --> | <!-- 例: 不正ログイン検知 --> | <!-- 例: 管理者に通知する --> | <!-- 例: セキュリティイベント発生時に管理者へ警告 --> |
173
-
174
- ---
175
-
176
- ### Aggregates(集約)
177
-
178
- <!--
179
- 一貫性を保つべきエンティティの集まり
180
-
181
- 【記載内容】
182
- - Aggregate名: 集約のルートエンティティ
183
- - 責務: この集約が保護するビジネスルール
184
- - 含まれるエンティティ: 集約内のオブジェクト
185
-
186
- 【Event Storming表記】大きな黄色の付箋
187
-
188
- DDDの概念:
189
- - コマンドを受け取り、ビジネスルールを適用し、イベントを発行する
190
- - トランザクション境界を定義
191
- - 一貫性の保証範囲
192
- - 1つのAggregateは1つのルートエンティティを持つ
193
-
194
- 記載のポイント:
195
- - Aggregateは独立してデプロイ可能な単位
196
- - 他のAggregateとは疎結合
197
- - イベントを通じて連携
198
- -->
199
-
200
- | Aggregate | 責務 | 含まれるエンティティ |
201
- |-----------|------|---------------------|
202
- | <!-- 例: User --> | <!-- 例: ユーザーの認証情報とプロフィールの整合性を保つ --> | <!-- 例: User, Profile, Credentials --> |
203
- | <!-- 例: Order --> | <!-- 例: 注文の状態遷移とビジネスルールを管理 --> | <!-- 例: Order, OrderItem, ShippingAddress --> |
204
-
205
- ---
206
-
207
- ### Read Models(読み取りモデル)
208
-
209
- <!--
210
- UIに表示する情報
211
-
212
- 【記載内容】
213
- - Read Model名: 画面やビューの名称
214
- - 表示データ: 必要な情報の一覧
215
- - 利用者: どのアクターが使用するか
216
-
217
- 【Event Storming表記】緑色の付箋
218
-
219
- CQRSの概念:
220
- - Command(書き込み)とQuery(読み込み)を分離
221
- - Read Modelは最適化された読み取り専用のデータ構造
222
- - イベントから非同期に構築されることが多い
223
-
224
- 記載のポイント:
225
- - ドメインモデルとは別の最適化されたモデル
226
- - UIのニーズに合わせた構造
227
- - 複数のAggregateからデータを集約する場合もある
228
- -->
229
-
230
- | Read Model | 表示データ | 利用者 |
231
- |-----------|----------|--------|
232
- | <!-- 例: ユーザープロフィール画面 --> | <!-- 例: 名前, メール, アバター, 登録日, 最終ログイン --> | <!-- 例: エンドユーザー --> |
233
- | <!-- 例: ユーザー一覧画面 --> | <!-- 例: ID, 名前, ステータス, 登録日 --> | <!-- 例: 管理者 --> |
234
-
235
- ---
236
-
237
- ### External Systems(外部システム)
238
-
239
- <!--
240
- このBounded Contextが連携する外部システム
241
-
242
- 【記載内容】
243
- - システム名: 外部システムの名称
244
- - 連携方法: API, メッセージング, バッチなど
245
- - 目的: なぜ連携が必要か
246
-
247
- 【Event Storming表記】ピンク色の大きな付箋
248
-
249
- 記載のポイント:
250
- - 外部システムとの境界を明確にする
251
- - Anticorruption Layer(腐敗防止層)の必要性を検討
252
- - 外部システムの障害がこのContextに与える影響を考慮
253
- -->
254
-
255
- | 外部システム | 連携方法 | 目的 |
256
- |------------|---------|------|
257
- | <!-- 例: メール送信サービス --> | <!-- 例: REST API --> | <!-- 例: ウェルカムメールや通知メールの送信 --> |
258
- | <!-- 例: 認証プロバイダ --> | <!-- 例: OAuth 2.0 --> | <!-- 例: ソーシャルログイン機能の提供 --> |
259
-
260
- ---
261
-
262
- ## 次のBounded Context
263
-
264
- <!--
265
- 上記のセクション構造を繰り返して、他のBounded Contextを記述
266
- 各Contextは独立して理解できるように記述
267
- -->
268
-
269
- ---
270
-
271
- ## Context Map(コンテキスト間の関係図)
272
-
273
- <!--
274
- すべてのBounded Context間の関係性を可視化
275
-
276
- 目的:
277
- - ドメイン間の依存関係を明確化
278
- - チーム間の連携方法を定義
279
- - アーキテクチャの全体像を把握
280
-
281
- Context Mapping Patterns(関係性のパターン):
282
- - Shared Kernel: 共有カーネル(共通のモデルを共有)
283
- - Customer-Supplier: 顧客-供給者関係(下流が上流に依存)
284
- - Conformist: 順応者(上流の変更に従う)
285
- - Anticorruption Layer: 腐敗防止層(変換層を介して連携)
286
- - Open Host Service: 公開ホストサービス(API経由で提供)
287
- - Published Language: 公開言語(共通のデータフォーマット)
288
- - Partnership: パートナーシップ(相互依存、共同開発)
289
- - Separate Ways: 独立した道(連携なし)
290
-
291
- エッジラベルの記載:
292
- - パターン名: どの関係性パターンか
293
- - 通信方法: REST API, イベント, GraphQLなど
294
- - データ: やり取りされる主要なデータ
295
- -->
296
-
297
- ```mermaid
298
- graph TD
299
- A[ユーザー管理<br/>User Management] -->|Domain Events<br/>Customer-Supplier| B[通知<br/>Notification]
300
- A -->|REST API<br/>Open Host Service| C[注文処理<br/>Order Processing]
301
- C -->|Domain Events<br/>Customer-Supplier| D[在庫管理<br/>Inventory]
302
-
303
- %% スタイル定義
304
- classDef core fill:#FFD700,stroke:#333,stroke-width:3px
305
- classDef supporting fill:#87CEEB,stroke:#333,stroke-width:2px
306
- classDef generic fill:#D3D3D3,stroke:#333,stroke-width:1px
307
-
308
- %% Core Domain
309
- class C core
310
- %% Supporting Domain
311
- class A,D supporting
312
- %% Generic Domain
313
- class B generic
314
- ```
315
-
316
- ---
317
-
318
- ## Context間の関係性一覧
319
-
320
- <!--
321
- Context Map図を補足する詳細情報
322
- -->
323
-
324
- | 上流Context | 下流Context | 関係パターン | 通信方法 | やり取りされるデータ |
325
- |------------|------------|-------------|---------|-------------------|
326
- | <!-- 例: ユーザー管理 --> | <!-- 例: 通知 --> | <!-- 例: Customer-Supplier --> | <!-- 例: Domain Events (Kafka) --> | <!-- 例: ユーザー登録完了イベント --> |
327
- | <!-- 例: ユーザー管理 --> | <!-- 例: 注文処理 --> | <!-- 例: Open Host Service --> | <!-- 例: REST API --> | <!-- 例: ユーザー情報取得 --> |
328
-
329
- ---
330
-
331
- ## メモ
332
-
333
- <!--
334
- 全体に関する補足情報:
335
- - ドメインモデル作成日と関与したメンバー
336
- - 次回レビューの予定
337
- - アーキテクチャ上の重要な決定事項
338
- - 技術的な制約や前提条件
339
- -->
1
+ # ドメインモデル (Event Storming)
2
+
3
+ <!--
4
+ 位置づけ(任意 / advanced テンプレート):
5
+ - MVP 標準フローのテンプレートではない。標準は軽量な Domain Sketch(01-domain-sketch.md、/a-004 が生成)。
6
+ - 完全な Event Storming(Bounded Context / Commands / Events / Policies / Aggregates / Read Models /
7
+ Context Map)が必要な複雑ドメインで、任意スキル /a-005-create-domain-diagram から使う。図化の自己目的化に注意。
8
+ - 各要素の意味・付箋の色・CQRS / ACL などの解説は
9
+ skills/a-004-define-domain-model/reference/event-storming-guide.md を参照。
10
+ -->
11
+
12
+ ---
13
+
14
+ ## Bounded Context: [コンテキスト名]
15
+
16
+ <!-- Bounded Context ごとにこの節を繰り返す。名前はユビキタス言語を使う(例: 注文処理 / 在庫管理)。 -->
17
+
18
+ ### 概要
19
+
20
+ **戦略的分類**: <!-- Core(競争優位の中核)/ Supporting / Generic(既製品で代替可能) -->
21
+
22
+ **責務**: <!-- この Context が担うビジネス機能を 1〜2 文で -->
23
+
24
+ **主要な責任**:
25
+
26
+ - <!-- 責任1 -->
27
+ - <!-- 責任2 -->
28
+
29
+ ### Actors(アクター)
30
+
31
+ <!-- コマンドを発行する人やシステム。この Context 内で行動するビジネス上の役割のみ。 -->
32
+
33
+ | アクター | 説明 |
34
+ |---------|------|
35
+ | <!-- 例: 管理者 --> | <!-- 例: システム設定を管理し、ユーザー権限を制御する --> |
36
+
37
+ ### Commands(コマンド)
38
+
39
+ <!-- アクターが発行する指示。動詞・命令形(例: ユーザーを登録する)。必ず Domain Event をトリガーする。 -->
40
+
41
+ | コマンド | 発行者 | 説明 |
42
+ |---------|--------|------|
43
+ | <!-- 例: ユーザーを登録する --> | <!-- 例: エンドユーザー --> | <!-- 例: 新しいアカウントを作成する --> |
44
+
45
+ ### Domain Events(ドメインイベント)
46
+
47
+ <!-- ビジネス上重要な出来事。過去形(例: ユーザー登録完了)。技術イベント(DB 保存)ではなくビジネスイベント。 -->
48
+
49
+ | ドメインイベント | トリガー(コマンド) | 説明 |
50
+ |-----------------|---------------------|------|
51
+ | <!-- 例: ユーザー登録完了 --> | <!-- 例: ユーザーを登録する --> | <!-- 例: 新規ユーザーが登録された --> |
52
+
53
+ ### Policies(ポリシー)
54
+
55
+ <!-- 自動化ルール。「Whenever [イベント], then [コマンド]」形式。 -->
56
+
57
+ | ポリシー | 条件(Whenever) | アクション(Then) | 説明 |
58
+ |---------|-----------------|-------------------|------|
59
+ | <!-- 例: ウェルカムメール送信 --> | <!-- 例: ユーザー登録完了 --> | <!-- 例: ウェルカムメールを送信する --> | <!-- 例: 新規ユーザーへ自動送信 --> |
60
+
61
+ ### Aggregates(集約)
62
+
63
+ <!-- 一貫性を保つエンティティの塊。1 集約 1 ルートエンティティ。トランザクション境界を定義する。 -->
64
+
65
+ | Aggregate | 責務 | 含まれるエンティティ |
66
+ |-----------|------|---------------------|
67
+ | <!-- 例: User --> | <!-- 例: 認証情報とプロフィールの整合性を保つ --> | <!-- 例: User, Profile, Credentials --> |
68
+
69
+ ### Read Models(読み取りモデル)
70
+
71
+ <!-- UI 表示用の参照モデル(CQRS)。イベントから構築される最適化済みの読み取り専用構造。 -->
72
+
73
+ | Read Model | 表示データ | 利用者 |
74
+ |-----------|----------|--------|
75
+ | <!-- 例: ユーザープロフィール画面 --> | <!-- 例: 名前, メール, アバター, 登録日 --> | <!-- 例: エンドユーザー --> |
76
+
77
+ ### External Systems(外部システム)
78
+
79
+ <!-- 連携する外部システム。連携方法と目的を記す。境界には Anticorruption Layer の要否を検討する。 -->
80
+
81
+ | 外部システム | 連携方法 | 目的 |
82
+ |------------|---------|------|
83
+ | <!-- 例: メール送信サービス --> | <!-- 例: REST API --> | <!-- 例: 通知メールの送信 --> |
84
+
85
+ ---
86
+
87
+ ## Context Map(コンテキスト間の関係図)
88
+
89
+ <!--
90
+ すべての Bounded Context 間の関係性を可視化する。
91
+ 関係パターン(Customer-Supplier / Shared Kernel / Anticorruption Layer / Open Host Service など)と
92
+ 通信方法をエッジラベルに記す。各パターンの意味は event-storming-guide.md を参照。
93
+ -->
94
+
95
+ ```mermaid
96
+ graph TD
97
+ A[ユーザー管理] -->|Domain Events / Customer-Supplier| B[通知]
98
+ A -->|REST API / Open Host Service| C[注文処理]
99
+ C -->|Domain Events / Customer-Supplier| D[在庫管理]
100
+
101
+ classDef core fill:#FFD700,stroke:#333,stroke-width:3px
102
+ classDef supporting fill:#87CEEB,stroke:#333,stroke-width:2px
103
+ classDef generic fill:#D3D3D3,stroke:#333,stroke-width:1px
104
+
105
+ class C core
106
+ class A,D supporting
107
+ class B generic
108
+ ```
109
+
110
+ ## Context間の関係性一覧
111
+
112
+ <!-- Context Map 図を補足する詳細。 -->
113
+
114
+ | 上流Context | 下流Context | 関係パターン | 通信方法 | やり取りされるデータ |
115
+ |------------|------------|-------------|---------|-------------------|
116
+ | <!-- 例: ユーザー管理 --> | <!-- 例: 通知 --> | <!-- 例: Customer-Supplier --> | <!-- 例: Domain Events (Kafka) --> | <!-- 例: ユーザー登録完了イベント --> |
117
+
118
+ ## メモ
119
+
120
+ <!-- 作成日・関与メンバー・次回レビュー・重要なアーキテクチャ決定・前提条件など。 -->
@@ -0,0 +1,90 @@
1
+ # Domain Sketch
2
+
3
+ <!--
4
+ 何のドキュメントか: AI が責務混在を起こさない程度の軽量なドメイン理解を共有する資料。
5
+ 完全な Event Storming / Bounded Context / Aggregate / Context Map ではない。
6
+ 主要概念・境界・中核エンティティ・重要ルールだけを素早く固定する。
7
+
8
+ 使い方:
9
+ - 入力は Core Scenarios(02-behavior/01-core-scenarios.md)と MVP Scope(02-mvp-scope.md)。
10
+ - 図を作ること自体を目的にしない。1 枚の簡易 Mermaid は任意。
11
+ - 複雑なドメインで Full DDD(Bounded Context / Aggregate / Context Map)が必要になったら、
12
+ 任意で /a-005-create-domain-diagram(advanced)と 01-domain-model.md を使う。
13
+ -->
14
+
15
+ ## 主要用語(10〜20 個)
16
+
17
+ <!--
18
+ 何を書くか: このドメインで頻出する業務用語。曖昧語(Data / Process / Manager 等)は避ける。
19
+ 使用例・禁止用語まで含む詳細な用語集は 02-ubiquitous-language.md に委ねる。
20
+ -->
21
+
22
+ | 用語 | 意味(1 行) |
23
+ |---|---|
24
+ | <!-- 例: ライフラインチャート --> | <!-- 例: 入社者が経歴の浮き沈みを時系列で描く自己紹介 --> |
25
+
26
+ ## アクター / 外部システム / システム境界
27
+
28
+ <!--
29
+ 何を書くか: 誰がシステムを使い(アクター)、どの外部システムと連携し、システムの境界はどこか。
30
+ -->
31
+
32
+ - **アクター**: <!-- 例: 新入社員 / 受け入れチーム -->
33
+ - **外部システム**: <!-- 例: 社内 SSO(SAML) / 通知基盤 -->
34
+ - **システム境界(MVP で作る範囲)**: <!-- 例: プロフィール作成・閲覧・コメントまで -->
35
+
36
+ ## 中核エンティティと責務
37
+
38
+ <!--
39
+ 何を書くか: MVP の中核となるエンティティと、その 1 行責務。属性の網羅は不要。
40
+ -->
41
+
42
+ | エンティティ | 責務(1 行) |
43
+ |---|---|
44
+ | <!-- 例: Profile --> | <!-- 例: 入社者の自己紹介を保持し公開状態を管理する --> |
45
+
46
+ ## 状態遷移(任意)
47
+
48
+ <!--
49
+ 何を書くか: 重要なエンティティに明確なライフサイクルがある場合のみ記述(例: 下書き→公開→アーカイブ)。
50
+ 不要なら「該当なし」と記す。
51
+ -->
52
+
53
+ - <!-- 例: Profile: 下書き → 公開 → (退職時)アーカイブ -->
54
+
55
+ ## 重要なビジネスルール
56
+
57
+ <!--
58
+ 何を書くか: 守らないと価値や正しさが崩れるルールだけ。Core Scenarios の Critical Failure と整合させる。
59
+ -->
60
+
61
+ - <!-- 例: プロフィールの公開範囲は社内に限定される(社外公開不可)。 -->
62
+
63
+ ## MVP では作らないドメイン範囲
64
+
65
+ <!--
66
+ 何を書くか: 今回モデリングしない領域を明示する。02-mvp-scope.md の Not Now / Won't と整合させる。
67
+ -->
68
+
69
+ - <!-- 例: 人事評価・勤怠は対象外(既存システムが担う)。 -->
70
+
71
+ ## 簡易ドメイン図(任意)
72
+
73
+ <!--
74
+ 何を書くか: アクター・システム境界・外部システムを 1 枚で示す簡易図。任意。
75
+ 複雑な Context Map / Aggregate 図が必要なら /a-005(advanced)で作成する。
76
+ -->
77
+
78
+ ```mermaid
79
+ graph LR
80
+ Actor[新入社員]
81
+ subgraph System[本システム MVP 範囲]
82
+ Profile[Profile]
83
+ Comment[Comment]
84
+ end
85
+ SSO[(社内 SSO)]
86
+
87
+ Actor -->|ログイン| SSO
88
+ Actor -->|自己紹介を作成 / 閲覧| Profile
89
+ Actor -->|コメント| Comment
90
+ ```