yodogawa 1.0.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/.windsurf/templates/documentation-rules.md +143 -0
- package/.windsurf/templates/project/01-requirements/01-system-overview.md +49 -0
- package/.windsurf/templates/project/01-requirements/02-features-implemented.md +73 -0
- package/.windsurf/templates/project/01-requirements/03-features-planned.md +75 -0
- package/.windsurf/templates/project/01-requirements/04-non-functional-requirements.md +115 -0
- package/.windsurf/templates/project/01-requirements/05-user-stories.md +124 -0
- package/.windsurf/templates/project/02-behavior/01-scenarios.md +406 -0
- package/.windsurf/templates/project/03-domain/01-domain-model.md +338 -0
- package/.windsurf/templates/project/03-domain/02-ubiquitous-language.md +153 -0
- package/.windsurf/templates/project/04-design/01-tech-stack.md +360 -0
- package/.windsurf/templates/project/04-design/02-repository-structure.md +390 -0
- package/.windsurf/templates/project/04-design/03-screen-design.md +586 -0
- package/.windsurf/templates/project/04-design/04-data-model.md +211 -0
- package/.windsurf/templates/project/04-design/05-api-spec.md +221 -0
- package/.windsurf/templates/project/04-design/06-architecture.md +183 -0
- package/.windsurf/templates/project/04-design/07-infrastructure.md +180 -0
- package/.windsurf/templates/tasks/task-template/a-definition.md +143 -0
- package/.windsurf/templates/tasks/task-template/b-research.md +185 -0
- package/.windsurf/templates/tasks/task-template/c-implementation.md +197 -0
- package/.windsurf/workflows/a-001-SetupDocStructure.md +165 -0
- package/.windsurf/workflows/a-002-InitializeProject.md +229 -0
- package/.windsurf/workflows/a-003-CreateScenarios.md +130 -0
- package/.windsurf/workflows/a-004-DefineDomainModel.md +133 -0
- package/.windsurf/workflows/a-005-CreateDomainDiagram.md +114 -0
- package/.windsurf/workflows/a-006-ReviewRequirementsDomain.md +132 -0
- package/.windsurf/workflows/a-007-DefineTechStack.md +121 -0
- package/.windsurf/workflows/a-008-DefineRepositoryStructure.md +118 -0
- package/.windsurf/workflows/a-009-DefineScreenDesign.md +121 -0
- package/.windsurf/workflows/a-010-DefineDataModel.md +125 -0
- package/.windsurf/workflows/a-011-DefineAPISpec.md +123 -0
- package/.windsurf/workflows/a-012-DefineArchitecture.md +119 -0
- package/.windsurf/workflows/a-013-DefineInfrastructure.md +120 -0
- package/.windsurf/workflows/a-014-ReviewDesign.md +122 -0
- package/.windsurf/workflows/b-001-CreateTaskDirectory.md +71 -0
- package/.windsurf/workflows/b-002-CreateTaskDefinition.md +165 -0
- package/.windsurf/workflows/b-003-CreateTaskResearch.md +412 -0
- package/.windsurf/workflows/b-004-CreateTaskImplementation.md +97 -0
- package/.windsurf/workflows/b-005-ReviewTask.md +312 -0
- package/.windsurf/workflows/c-001-ImplementTask.md +493 -0
- package/.windsurf/workflows/c-002-UpdateDocumentation.md +797 -0
- package/.windsurf/workflows/x-Accessibility-Check.md +469 -0
- package/.windsurf/workflows/x-Bundle-Optimize.md +386 -0
- package/.windsurf/workflows/x-CI-FixFailure.md +636 -0
- package/.windsurf/workflows/x-CI-Setup.md +641 -0
- package/.windsurf/workflows/x-Code-Refactor.md +71 -0
- package/.windsurf/workflows/x-Code-ResearchAndReview.md +78 -0
- package/.windsurf/workflows/x-Component-Create.md +359 -0
- package/.windsurf/workflows/x-Context-CatchUp.md +63 -0
- package/.windsurf/workflows/x-Database-Seed.md +300 -0
- package/.windsurf/workflows/x-Dependencies-Update.md +315 -0
- package/.windsurf/workflows/x-DevEnvironment-Setup.md +437 -0
- package/.windsurf/workflows/x-Logging-Add.md +682 -0
- package/.windsurf/workflows/x-Migration-Create.md +354 -0
- package/.windsurf/workflows/x-Problem-RootCauseAnalysis.md +65 -0
- package/.windsurf/workflows/x-Repository-Push.md +375 -0
- package/.windsurf/workflows/x-Repository-PushToGithub.md +72 -0
- package/.windsurf/workflows/x-Requirements-Clarify.md +61 -0
- package/.windsurf/workflows/z-CreateWorkflow.md +77 -0
- package/README.md +280 -0
- package/bin/cli.js +74 -0
- package/package.json +28 -0
|
@@ -0,0 +1,338 @@
|
|
|
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
|
+
- <!-- 責任1 -->
|
|
56
|
+
- <!-- 責任2 -->
|
|
57
|
+
- <!-- 責任3 -->
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### Actors(アクター)
|
|
62
|
+
|
|
63
|
+
<!--
|
|
64
|
+
コマンドを発行する人やシステム
|
|
65
|
+
|
|
66
|
+
【記載内容】
|
|
67
|
+
- アクター名: ユーザーの役割やシステム
|
|
68
|
+
- 説明: アクターの責任や権限
|
|
69
|
+
- 例: 「管理者」「エンドユーザー」「外部API」
|
|
70
|
+
|
|
71
|
+
【Event Storming表記】小さな黄色の付箋
|
|
72
|
+
|
|
73
|
+
記載のポイント:
|
|
74
|
+
- このBounded Context内で行動するアクターのみ記載
|
|
75
|
+
- 技術的な役割ではなく、ビジネス上の役割で記述
|
|
76
|
+
-->
|
|
77
|
+
|
|
78
|
+
| アクター | 説明 |
|
|
79
|
+
|---------|------|
|
|
80
|
+
| <!-- 例: 管理者 --> | <!-- 例: システム設定を管理し、ユーザー権限を制御する --> |
|
|
81
|
+
| <!-- 例: エンドユーザー --> | <!-- 例: サービスを利用する一般ユーザー --> |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### Commands(コマンド)
|
|
86
|
+
|
|
87
|
+
<!--
|
|
88
|
+
アクターが発行する指示・アクション
|
|
89
|
+
|
|
90
|
+
【記載内容】
|
|
91
|
+
- コマンド名: 命令形で記述
|
|
92
|
+
- 発行者: どのアクターが実行するか
|
|
93
|
+
- 説明: コマンドの目的と効果
|
|
94
|
+
|
|
95
|
+
【Event Storming表記】青色の付箋
|
|
96
|
+
|
|
97
|
+
フォーマット:
|
|
98
|
+
- 動詞で始める: 「登録する」「更新する」「削除する」「承認する」
|
|
99
|
+
- ユーザーの意図を表現
|
|
100
|
+
- 例: 「ユーザーを登録する」「注文を確定する」「在庫を補充する」
|
|
101
|
+
|
|
102
|
+
記載のポイント:
|
|
103
|
+
- コマンドは必ずDomain Eventをトリガーする
|
|
104
|
+
- UIのボタンやAPIエンドポイントに対応することが多い
|
|
105
|
+
-->
|
|
106
|
+
|
|
107
|
+
| コマンド | 発行者 | 説明 |
|
|
108
|
+
|---------|--------|------|
|
|
109
|
+
| <!-- 例: ユーザーを登録する --> | <!-- 例: エンドユーザー --> | <!-- 例: 新しいユーザーアカウントを作成する --> |
|
|
110
|
+
| <!-- 例: プロフィールを更新する --> | <!-- 例: エンドユーザー --> | <!-- 例: 既存ユーザーの情報を変更する --> |
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### Domain Events(ドメインイベント)
|
|
115
|
+
|
|
116
|
+
<!--
|
|
117
|
+
ビジネスにとって重要な出来事
|
|
118
|
+
|
|
119
|
+
【記載内容】
|
|
120
|
+
- イベント名: 過去形で記述
|
|
121
|
+
- トリガー: どのコマンドから発生するか
|
|
122
|
+
- 説明: イベントの意味とビジネスへの影響
|
|
123
|
+
|
|
124
|
+
【Event Storming表記】オレンジ色の付箋
|
|
125
|
+
|
|
126
|
+
フォーマット:
|
|
127
|
+
- 過去形で記述: 「〜された」「〜完了」
|
|
128
|
+
- ビジネスにとって意味のある出来事を表現
|
|
129
|
+
- 例: 「ユーザー登録完了」「注文確定」「決済成功」
|
|
130
|
+
|
|
131
|
+
記載のポイント:
|
|
132
|
+
- 技術的なイベント(「DBに保存」)ではなく、ビジネスイベント
|
|
133
|
+
- 他のBounded Contextに通知される可能性のあるイベント
|
|
134
|
+
- 時系列に沿って並べると業務フローが見えやすい
|
|
135
|
+
-->
|
|
136
|
+
|
|
137
|
+
| ドメインイベント | トリガー(コマンド) | 説明 |
|
|
138
|
+
|-----------------|---------------------|------|
|
|
139
|
+
| <!-- 例: ユーザー登録完了 --> | <!-- 例: ユーザーを登録する --> | <!-- 例: 新しいユーザーがシステムに登録された --> |
|
|
140
|
+
| <!-- 例: プロフィール更新完了 --> | <!-- 例: プロフィールを更新する --> | <!-- 例: ユーザー情報が変更された --> |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### Policies(ポリシー)
|
|
145
|
+
|
|
146
|
+
<!--
|
|
147
|
+
自動化ルールやビジネスルール
|
|
148
|
+
|
|
149
|
+
【記載内容】
|
|
150
|
+
- ポリシー名: ルールの名称
|
|
151
|
+
- 条件: "Whenever [イベント]"
|
|
152
|
+
- アクション: "Then [コマンド]"
|
|
153
|
+
- 説明: ルールの詳細
|
|
154
|
+
|
|
155
|
+
【Event Storming表記】紫/ライラック色の付箋
|
|
156
|
+
|
|
157
|
+
フォーマット:
|
|
158
|
+
- "Whenever [イベント], then [コマンド]"
|
|
159
|
+
- "If [条件], then [アクション]"
|
|
160
|
+
- 例: "Whenever ユーザー登録完了, then ウェルカムメールを送信する"
|
|
161
|
+
|
|
162
|
+
記載のポイント:
|
|
163
|
+
- イベントからコマンドへの自動的な流れを表現
|
|
164
|
+
- コードで実装される場合とオペレーターが手動で実行する場合がある
|
|
165
|
+
- ビジネスロジックの重要な部分
|
|
166
|
+
-->
|
|
167
|
+
|
|
168
|
+
| ポリシー | 条件(Whenever) | アクション(Then) | 説明 |
|
|
169
|
+
|---------|-----------------|-------------------|------|
|
|
170
|
+
| <!-- 例: ウェルカムメール送信 --> | <!-- 例: ユーザー登録完了 --> | <!-- 例: ウェルカムメールを送信する --> | <!-- 例: 新規ユーザーに対して自動的にメールを送信 --> |
|
|
171
|
+
| <!-- 例: 管理者通知 --> | <!-- 例: 不正ログイン検知 --> | <!-- 例: 管理者に通知する --> | <!-- 例: セキュリティイベント発生時に管理者へ警告 --> |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
### Aggregates(集約)
|
|
176
|
+
|
|
177
|
+
<!--
|
|
178
|
+
一貫性を保つべきエンティティの集まり
|
|
179
|
+
|
|
180
|
+
【記載内容】
|
|
181
|
+
- Aggregate名: 集約のルートエンティティ
|
|
182
|
+
- 責務: この集約が保護するビジネスルール
|
|
183
|
+
- 含まれるエンティティ: 集約内のオブジェクト
|
|
184
|
+
|
|
185
|
+
【Event Storming表記】大きな黄色の付箋
|
|
186
|
+
|
|
187
|
+
DDDの概念:
|
|
188
|
+
- コマンドを受け取り、ビジネスルールを適用し、イベントを発行する
|
|
189
|
+
- トランザクション境界を定義
|
|
190
|
+
- 一貫性の保証範囲
|
|
191
|
+
- 1つのAggregateは1つのルートエンティティを持つ
|
|
192
|
+
|
|
193
|
+
記載のポイント:
|
|
194
|
+
- Aggregateは独立してデプロイ可能な単位
|
|
195
|
+
- 他のAggregateとは疎結合
|
|
196
|
+
- イベントを通じて連携
|
|
197
|
+
-->
|
|
198
|
+
|
|
199
|
+
| Aggregate | 責務 | 含まれるエンティティ |
|
|
200
|
+
|-----------|------|---------------------|
|
|
201
|
+
| <!-- 例: User --> | <!-- 例: ユーザーの認証情報とプロフィールの整合性を保つ --> | <!-- 例: User, Profile, Credentials --> |
|
|
202
|
+
| <!-- 例: Order --> | <!-- 例: 注文の状態遷移とビジネスルールを管理 --> | <!-- 例: Order, OrderItem, ShippingAddress --> |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
### Read Models(読み取りモデル)
|
|
207
|
+
|
|
208
|
+
<!--
|
|
209
|
+
UIに表示する情報
|
|
210
|
+
|
|
211
|
+
【記載内容】
|
|
212
|
+
- Read Model名: 画面やビューの名称
|
|
213
|
+
- 表示データ: 必要な情報の一覧
|
|
214
|
+
- 利用者: どのアクターが使用するか
|
|
215
|
+
|
|
216
|
+
【Event Storming表記】緑色の付箋
|
|
217
|
+
|
|
218
|
+
CQRSの概念:
|
|
219
|
+
- Command(書き込み)とQuery(読み込み)を分離
|
|
220
|
+
- Read Modelは最適化された読み取り専用のデータ構造
|
|
221
|
+
- イベントから非同期に構築されることが多い
|
|
222
|
+
|
|
223
|
+
記載のポイント:
|
|
224
|
+
- ドメインモデルとは別の最適化されたモデル
|
|
225
|
+
- UIのニーズに合わせた構造
|
|
226
|
+
- 複数のAggregateからデータを集約する場合もある
|
|
227
|
+
-->
|
|
228
|
+
|
|
229
|
+
| Read Model | 表示データ | 利用者 |
|
|
230
|
+
|-----------|----------|--------|
|
|
231
|
+
| <!-- 例: ユーザープロフィール画面 --> | <!-- 例: 名前, メール, アバター, 登録日, 最終ログイン --> | <!-- 例: エンドユーザー --> |
|
|
232
|
+
| <!-- 例: ユーザー一覧画面 --> | <!-- 例: ID, 名前, ステータス, 登録日 --> | <!-- 例: 管理者 --> |
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### External Systems(外部システム)
|
|
237
|
+
|
|
238
|
+
<!--
|
|
239
|
+
このBounded Contextが連携する外部システム
|
|
240
|
+
|
|
241
|
+
【記載内容】
|
|
242
|
+
- システム名: 外部システムの名称
|
|
243
|
+
- 連携方法: API, メッセージング, バッチなど
|
|
244
|
+
- 目的: なぜ連携が必要か
|
|
245
|
+
|
|
246
|
+
【Event Storming表記】ピンク色の大きな付箋
|
|
247
|
+
|
|
248
|
+
記載のポイント:
|
|
249
|
+
- 外部システムとの境界を明確にする
|
|
250
|
+
- Anticorruption Layer(腐敗防止層)の必要性を検討
|
|
251
|
+
- 外部システムの障害がこのContextに与える影響を考慮
|
|
252
|
+
-->
|
|
253
|
+
|
|
254
|
+
| 外部システム | 連携方法 | 目的 |
|
|
255
|
+
|------------|---------|------|
|
|
256
|
+
| <!-- 例: メール送信サービス --> | <!-- 例: REST API --> | <!-- 例: ウェルカムメールや通知メールの送信 --> |
|
|
257
|
+
| <!-- 例: 認証プロバイダ --> | <!-- 例: OAuth 2.0 --> | <!-- 例: ソーシャルログイン機能の提供 --> |
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 次のBounded Context
|
|
262
|
+
|
|
263
|
+
<!--
|
|
264
|
+
上記のセクション構造を繰り返して、他のBounded Contextを記述
|
|
265
|
+
各Contextは独立して理解できるように記述
|
|
266
|
+
-->
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Context Map(コンテキスト間の関係図)
|
|
271
|
+
|
|
272
|
+
<!--
|
|
273
|
+
すべてのBounded Context間の関係性を可視化
|
|
274
|
+
|
|
275
|
+
目的:
|
|
276
|
+
- ドメイン間の依存関係を明確化
|
|
277
|
+
- チーム間の連携方法を定義
|
|
278
|
+
- アーキテクチャの全体像を把握
|
|
279
|
+
|
|
280
|
+
Context Mapping Patterns(関係性のパターン):
|
|
281
|
+
- Shared Kernel: 共有カーネル(共通のモデルを共有)
|
|
282
|
+
- Customer-Supplier: 顧客-供給者関係(下流が上流に依存)
|
|
283
|
+
- Conformist: 順応者(上流の変更に従う)
|
|
284
|
+
- Anticorruption Layer: 腐敗防止層(変換層を介して連携)
|
|
285
|
+
- Open Host Service: 公開ホストサービス(API経由で提供)
|
|
286
|
+
- Published Language: 公開言語(共通のデータフォーマット)
|
|
287
|
+
- Partnership: パートナーシップ(相互依存、共同開発)
|
|
288
|
+
- Separate Ways: 独立した道(連携なし)
|
|
289
|
+
|
|
290
|
+
エッジラベルの記載:
|
|
291
|
+
- パターン名: どの関係性パターンか
|
|
292
|
+
- 通信方法: REST API, イベント, GraphQLなど
|
|
293
|
+
- データ: やり取りされる主要なデータ
|
|
294
|
+
-->
|
|
295
|
+
|
|
296
|
+
```mermaid
|
|
297
|
+
graph TD
|
|
298
|
+
A[ユーザー管理<br/>User Management] -->|Domain Events<br/>Customer-Supplier| B[通知<br/>Notification]
|
|
299
|
+
A -->|REST API<br/>Open Host Service| C[注文処理<br/>Order Processing]
|
|
300
|
+
C -->|Domain Events<br/>Customer-Supplier| D[在庫管理<br/>Inventory]
|
|
301
|
+
|
|
302
|
+
%% スタイル定義
|
|
303
|
+
classDef core fill:#FFD700,stroke:#333,stroke-width:3px
|
|
304
|
+
classDef supporting fill:#87CEEB,stroke:#333,stroke-width:2px
|
|
305
|
+
classDef generic fill:#D3D3D3,stroke:#333,stroke-width:1px
|
|
306
|
+
|
|
307
|
+
%% Core Domain
|
|
308
|
+
class C core
|
|
309
|
+
%% Supporting Domain
|
|
310
|
+
class A,D supporting
|
|
311
|
+
%% Generic Domain
|
|
312
|
+
class B generic
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Context間の関係性一覧
|
|
318
|
+
|
|
319
|
+
<!--
|
|
320
|
+
Context Map図を補足する詳細情報
|
|
321
|
+
-->
|
|
322
|
+
|
|
323
|
+
| 上流Context | 下流Context | 関係パターン | 通信方法 | やり取りされるデータ |
|
|
324
|
+
|------------|------------|-------------|---------|-------------------|
|
|
325
|
+
| <!-- 例: ユーザー管理 --> | <!-- 例: 通知 --> | <!-- 例: Customer-Supplier --> | <!-- 例: Domain Events (Kafka) --> | <!-- 例: ユーザー登録完了イベント --> |
|
|
326
|
+
| <!-- 例: ユーザー管理 --> | <!-- 例: 注文処理 --> | <!-- 例: Open Host Service --> | <!-- 例: REST API --> | <!-- 例: ユーザー情報取得 --> |
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## メモ
|
|
331
|
+
|
|
332
|
+
<!--
|
|
333
|
+
全体に関する補足情報:
|
|
334
|
+
- ドメインモデル作成日と関与したメンバー
|
|
335
|
+
- 次回レビューの予定
|
|
336
|
+
- アーキテクチャ上の重要な決定事項
|
|
337
|
+
- 技術的な制約や前提条件
|
|
338
|
+
-->
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# ユビキタス言語一覧
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
何を書くか: プロジェクト全体で共有される共通言語の定義集
|
|
5
|
+
|
|
6
|
+
目的:
|
|
7
|
+
- 開発者とドメインエキスパート間の共通理解を構築
|
|
8
|
+
- 用語の曖昧さを排除し、コミュニケーションの齟齬を防ぐ
|
|
9
|
+
- コード、ドキュメント、会話で一貫した用語を使用
|
|
10
|
+
- 新しいチームメンバーのオンボーディングを支援
|
|
11
|
+
|
|
12
|
+
ユビキタス言語とは:
|
|
13
|
+
- Domain-Driven Designの中核概念
|
|
14
|
+
- ビジネス用語と技術用語の橋渡し
|
|
15
|
+
- すべてのコミュニケーション(コード、会話、ドキュメント)で使用
|
|
16
|
+
- Bounded Contextごとに定義される(同じ用語でも異なるContextでは異なる意味を持つ場合がある)
|
|
17
|
+
|
|
18
|
+
記載のポイント:
|
|
19
|
+
- ドメインエキスパートが使う言葉を優先
|
|
20
|
+
- 技術用語ではなく、ビジネス用語で記述
|
|
21
|
+
- クラス名、メソッド名、変数名にも反映
|
|
22
|
+
- 曖昧な用語は禁止用語として明記
|
|
23
|
+
|
|
24
|
+
Living Document(生きたドキュメント):
|
|
25
|
+
- ドメイン理解が深まるにつれて継続的に更新
|
|
26
|
+
- 新しい用語の追加、既存用語の洗練
|
|
27
|
+
- Git管理で変更履歴を追跡
|
|
28
|
+
- Wikiやconfluenceなど、チーム全員がアクセス可能な場所に配置
|
|
29
|
+
|
|
30
|
+
更新頻度:
|
|
31
|
+
- ドメインモデリング時に初版作成
|
|
32
|
+
- Event Stormingやレビュー時に追加・修正
|
|
33
|
+
- 用語の混乱や不一致が見つかった時に即座に更新
|
|
34
|
+
-->
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## [Bounded Context名]: 用語定義
|
|
39
|
+
|
|
40
|
+
<!--
|
|
41
|
+
各Bounded Contextごとにセクションを分けて用語を定義
|
|
42
|
+
同じ用語でも異なるContextでは異なる意味を持つ可能性があるため
|
|
43
|
+
|
|
44
|
+
【Bounded Context共通】セクションを作成して、プロジェクト全体で共通の用語を記述することも推奨
|
|
45
|
+
|
|
46
|
+
記載例:
|
|
47
|
+
- [Bounded Context共通]
|
|
48
|
+
- [ユーザー管理]
|
|
49
|
+
- [注文処理]
|
|
50
|
+
- [在庫管理]
|
|
51
|
+
-->
|
|
52
|
+
|
|
53
|
+
<!--
|
|
54
|
+
テーブル構成:
|
|
55
|
+
|
|
56
|
+
【用語】
|
|
57
|
+
- ドメインエキスパートが使用する正式な用語
|
|
58
|
+
- 単数形・複数形を明確に(例: Order, Orders)
|
|
59
|
+
- 日本語の場合は表記ゆれに注意(例: 「ユーザ」か「ユーザー」か統一)
|
|
60
|
+
- 略語は避け、フルスペルで記載(略語を使う場合は別途定義)
|
|
61
|
+
|
|
62
|
+
【定義】
|
|
63
|
+
- 1-3文で明確に定義
|
|
64
|
+
- そのBounded Context内での意味を正確に記述
|
|
65
|
+
- 曖昧さを排除した具体的な説明
|
|
66
|
+
- ドメインエキスパートと合意した定義
|
|
67
|
+
- 技術的な実装詳細ではなく、ビジネス的な意味を記述
|
|
68
|
+
|
|
69
|
+
【使用例】
|
|
70
|
+
- コード例: クラス名、メソッド名、変数名での使用
|
|
71
|
+
- ドキュメント例: 仕様書やユーザーストーリーでの使用
|
|
72
|
+
- 会話例: チーム内での会話での使用
|
|
73
|
+
- 複数の例を記載する場合は改行して箇条書き
|
|
74
|
+
|
|
75
|
+
記載のベストプラクティス:
|
|
76
|
+
- ドメインエキスパートとペアで作成
|
|
77
|
+
- コードに現れる用語は必ず定義
|
|
78
|
+
- 類似用語の違いを明確にする(例: Customer vs User)
|
|
79
|
+
- 動詞も含める(例: Order(注文する), Ship(出荷する))
|
|
80
|
+
- 状態遷移に関わる用語も定義(例: Pending, Confirmed, Shipped)
|
|
81
|
+
-->
|
|
82
|
+
|
|
83
|
+
| 用語 | 定義 | 使用例 |
|
|
84
|
+
|------|------|--------|
|
|
85
|
+
| <!-- 例: Order --> | <!-- 例: 顧客が商品を購入する意思を示した取引単位。確定後は変更不可 --> | <!-- 例: `class Order`, `createOrder()`, ユーザーストーリー「注文を確定する」 --> |
|
|
86
|
+
| <!-- 例: Customer --> | <!-- 例: 商品を購入する個人または組織。アカウント登録の有無は問わない --> | <!-- 例: `class Customer`, `customer.placeOrder()` --> |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 禁止用語
|
|
91
|
+
|
|
92
|
+
<!--
|
|
93
|
+
使用を避けるべき曖昧な用語や誤解を招く用語
|
|
94
|
+
|
|
95
|
+
目的:
|
|
96
|
+
- 用語の混乱を防ぐ
|
|
97
|
+
- 過去に問題を引き起こした用語を記録
|
|
98
|
+
- 新しいチームメンバーへの注意喚起
|
|
99
|
+
- コードレビュー時のチェックリスト
|
|
100
|
+
|
|
101
|
+
記載すべき用語:
|
|
102
|
+
- 複数の意味を持つ曖昧な用語
|
|
103
|
+
- 技術用語とビジネス用語が混在する用語
|
|
104
|
+
- 過去に混乱を招いた用語
|
|
105
|
+
- 異なるBounded Contextで異なる意味を持つ用語(誤用を防ぐため)
|
|
106
|
+
- 略語で意味が不明瞭なもの
|
|
107
|
+
|
|
108
|
+
記載のポイント:
|
|
109
|
+
- なぜ禁止なのか明確に説明
|
|
110
|
+
- 代替となる明確な用語を提示
|
|
111
|
+
- 必要に応じて複数の推奨用語を記載(文脈によって使い分け)
|
|
112
|
+
-->
|
|
113
|
+
|
|
114
|
+
| 禁止用語 | 理由 | 推奨用語 |
|
|
115
|
+
|----------|------|----------|
|
|
116
|
+
| <!-- 例: Data --> | <!-- 例: 曖昧すぎて何を指すか不明。Order Data? Customer Data? --> | <!-- 例: Order, Customer, OrderDetails(具体的に指定) --> |
|
|
117
|
+
| <!-- 例: Process --> | <!-- 例: 動詞なのか名詞なのか、どの処理なのか不明 --> | <!-- 例: PlaceOrder, ShipOrder, ConfirmPayment(具体的なアクション) --> |
|
|
118
|
+
| <!-- 例: User --> | <!-- 例: このContextではCustomerとAdminを区別する必要がある --> | <!-- 例: Customer(顧客), Admin(管理者) --> |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## メモ
|
|
123
|
+
|
|
124
|
+
<!--
|
|
125
|
+
全体に関する補足情報
|
|
126
|
+
|
|
127
|
+
記載すべき内容:
|
|
128
|
+
- 命名規則: クラス名、メソッド名、変数名の命名パターン
|
|
129
|
+
- 表記規則: 単数形/複数形、大文字/小文字の使い分け
|
|
130
|
+
- 言語の選択: 英語/日本語の使い分けルール
|
|
131
|
+
- 更新履歴: 重要な用語変更の記録(GitコミットログへのリンクでもOK)
|
|
132
|
+
- 参考資料: ドメインに関する参考書籍、業界標準、用語集へのリンク
|
|
133
|
+
- レビューサイクル: 定期的な用語見直しのスケジュール
|
|
134
|
+
- 承認プロセス: 新しい用語を追加する際の承認フロー
|
|
135
|
+
|
|
136
|
+
コード実装との整合性:
|
|
137
|
+
- コードレビュー時にこのドキュメントを参照
|
|
138
|
+
- CI/CDでlintルールとして用語チェックを自動化(可能であれば)
|
|
139
|
+
- IDEのスニペットやテンプレートに用語を反映
|
|
140
|
+
|
|
141
|
+
コミュニケーション:
|
|
142
|
+
- ドメインエキスパートとの会話で必ずこの用語を使用
|
|
143
|
+
- ドキュメントや仕様書でもこの用語を使用
|
|
144
|
+
- 新しいチームメンバーにはオンボーディング時にこのドキュメントを共有
|
|
145
|
+
- 用語の理解度を確認するための質問リストを作成することも有効
|
|
146
|
+
|
|
147
|
+
ベストプラクティス:
|
|
148
|
+
- 用語の変更は慎重に(コード全体への影響が大きい)
|
|
149
|
+
- 用語変更時はリファクタリングタスクを作成
|
|
150
|
+
- 用語の進化を歓迎(ドメイン理解が深まる証)
|
|
151
|
+
- 図やダイアグラムを併用して理解を深める
|
|
152
|
+
- Event Stormingの成果物と連携させる
|
|
153
|
+
-->
|