第15章:イベント名の付け方:過去形 + ドメイン語彙📝✨
(Past chat)(Past chat)(Past chat)(Past chat)(Past chat)
15.0 この章のゴール🎯✨
この章が終わると…
- ドメインイベント名を「読んだ瞬間に意味が伝わる」形で付けられる📣✨
- 命令(Command)っぽい名前や 技術っぽい名前を避けられる🙅♀️🧯
- 例題ミニEC(Order / Payment / Shipment)で、イベント名をスラスラ作れる🛒💳📦
15.1 命名の基本ルール:過去形で、ドメインの言葉で✍️🔔

ドメインイベントの名前をつけるときは、以下のルールを守ります。 だから、イベント名がキレイだと…
- ログを見た瞬間に「何が起きた?」が分かる🔭🧾
- 後から読み返しても「仕様そのもの」になってる📘✨
- 変な名前だと、イベントが“命令”や“処理メモ”に見えて事故る😵💫💥
.NET の DDD ガイドでも、ドメインイベントは **過去形(起きたこと)**として表現するのが自然だよ、と説明されてるよ。 (Microsoft Learn)
15.2 命名の大原則 5つ🧩✨(これだけで8割勝てる)
原則①:イベント名は「過去形」🕒🔔
- ✅ OrderPaid(支払いが完了した)
- ✅ OrderShipped(発送された)
- ❌ PayOrder(命令っぽい)
- ❌ Shipping(状態?処理?曖昧)
「イベント=すでに起きたこと」なので 過去形にするのが王道だよ。 (Microsoft Learn)
原則②:「ドメインの言葉(ユビキタス言語)」で付ける🗣️🎀
- ✅ PaymentAuthorized(与信が取れた)
- ✅ OrderCancelled(注文がキャンセルされた)
- ❌ SavedToDb(技術)
- ❌ MessagePublished(技術)
“DBに保存した”はドメインの事実じゃなくて実装の都合になりがち⚠️ ドメインイベントは業務の意味で命名しようね💕
原則③:「主語(だれ/なに)+起きたこと」で作る🧠🧷
イベント名はだいたいこの形が強い💪✨
-
{集約/対象} + {過去形の動詞}
- Order + Paid → OrderPaid
- Shipment + Dispatched → ShipmentDispatched
原則④:C#の型名は PascalCase🧼✨
イベントを クラス/レコードで表すなら、型名は PascalCase が基本だよ。 (Microsoft Learn)
原則⑤:チーム内で“型名の流派”を固定する📏✨
よくある2つの流派👇(どっちもアリ!)
- 短い派:OrderPaid / OrderPlaced
- サフィックス派:OrderPaidDomainEvent / OrderPlacedDomainEvent
Microsoft のガイド例では “〜DomainEvent” を付ける例が出てるよ。 (Microsoft Learn) 教材では読みやすさ重視で **短い派(OrderPaid)**を主に使うね🩷(でもどっちでもOK、混ぜないのが大事!)
15.3 Completed / Failed の使い分け🙂⚖️
ここ、超つまずきポイント!🧠💥
15.3.1 まず結論:結果を表したいなら「成功」と「失敗」を対にする🎭✨
- ✅ PaymentCompleted / PaymentFailed
- ✅ PaymentSucceeded / PaymentFailed
- ✅ PaymentAuthorized / PaymentAuthorizationFailed
「Completed」って便利だけど、単体だと 成功なの?ただ終わったの? が曖昧になりがち😵💫 だから Failed とセットで置くと安心だよ✨
15.3.2 「Requested」は命令じゃないの?🤔📝
Requested は「要求が発生した」という事実だから、イベントとして成立するよ👍
- ✅ OrderCancellationRequested(キャンセル要求が来た)
- ✅ OrderCancelled(注文がキャンセルされた)
この2つは 別の事実だよね🧠✨ “要求が来た”段階と “キャンセル完了”段階を分けたいときに便利🎀
15.4 “やりがちNG命名”あるある集😱🧯
NG①:技術用語を混ぜる🙅♀️🔌
- ❌ OrderSavedToDb
- ❌ OrderInserted
- ❌ EntityTracked
→ ✅ OrderPlaced(注文が確定した) → ✅ OrderUpdated(注文内容が更新された:ただし粒度は注意)
NG②:メソッド名っぽい(命令っぽい)📣💦
- ❌ SendOrderPaidEmail
- ❌ UpdateStock
- ❌ CreateShipment
→ ✅ OrderPaid(支払いが完了した) → ✅ StockReserved(在庫が引き当てられた) → ✅ ShipmentCreated(発送が作成された)
NG③:Before/After を付ける🕰️🚫
“BeforeX / AfterX” は避けよう、というルールが .NET の命名ルールにもあるよ。 (Microsoft Learn) 順序を表したいなら…
- ✅ OrderPaying(支払い処理中:進行形・現在形)
- ✅ OrderPaid(支払い完了:過去形)
みたいに 時制で表現するのがスッキリ✨ (Microsoft Learn)
15.5 ミニEC:イベント名の作り方(具体例)🛒💳📦
「業務の会話」→「イベント名」へ変換してみよう🎀
注文(Order)
- 「注文が確定した」→ OrderPlaced 🧾✨
- 「注文内容が変更された」→ OrderUpdated ✍️
- 「注文がキャンセルされた」→ OrderCancelled 🛑
支払い(Payment)
- 「支払いが完了した」→ OrderPaid 💳✅
- 「支払いに失敗した」→ PaymentFailed 💥❌
- 「与信が取れた」→ PaymentAuthorized 🏦✅
- 「返金が完了した」→ RefundCompleted 💸✅
発送(Shipment)
- 「発送が作られた」→ ShipmentCreated 📦✨
- 「発送した(出荷した)」→ ShipmentDispatched 🚚💨
- 「配達完了した」→ DeliveryCompleted 🏠✅
15.6 C#でイベント型を作ってみる🧩✨
イベントは「変えない事実」なので、**不変(イミュータブル)**にすると安心だよ🔒✨ C#なら record が相性いい🌸
public interface IDomainEvent
{
DateTimeOffset OccurredAt { get; }
}
public sealed record OrderPaid(
Guid OrderId,
decimal Amount,
DateTimeOffset OccurredAt
) : IDomainEvent;
public sealed record PaymentFailed(
Guid OrderId,
string Reason,
DateTimeOffset OccurredAt
) : IDomainEvent;
ポイント🎀
- 型名は PascalCase(C#の基本) (Microsoft Learn)
- 名前は 過去形 + ドメイン語彙 (Microsoft Learn)
- データは「必要最小限」になりやすい(太らせないの大事!)📦✂️
15.7 リライト練習✍️✨(悪い例→良い例)
問題:次のイベント名、どこが微妙?どう直す?🧠🖍️
- OrderSavedToDb
- SendOrderPaidEmail
- BeforeOrderPaid
- UpdateInventory
- PublishMessageToRabbit
- OrderPaymentProcessing
- PaymentCompleted(単体)
- CreateShipment
- OrderStateChanged
- SyncToExternalApi
解答例(ひとつの正解じゃないよ🙂✨)
- ❌ OrderSavedToDb → ✅ OrderPlaced / OrderUpdated(業務の意味に寄せる)
- ❌ SendOrderPaidEmail → ✅ OrderPaid(メールは“反応”でやる)
- ❌ BeforeOrderPaid → ✅ OrderPaying / OrderPaid(時制で表す) (Microsoft Learn)
- ❌ UpdateInventory → ✅ StockReserved / StockAdjusted(何が起きた?)
- ❌ PublishMessageToRabbit → ✅ OrderPaid / ShipmentDispatched(技術を捨てる)
- ❌ OrderPaymentProcessing → ✅ PaymentProcessingStarted(開始の事実ならOK)
- ❌ PaymentCompleted → ✅ PaymentCompleted + PaymentFailed(失敗とペアにする)🙂⚖️
- ❌ CreateShipment → ✅ ShipmentCreated(命令→事実へ)
- ❌ OrderStateChanged → ✅ OrderCancelled / OrderPaid など(具体的に)
- ❌ SyncToExternalApi → ✅ CustomerAddressUpdated など(外部同期は“結果”じゃなく“事実”に戻す)
15.8 AI(Copilot/Codex)で命名を爆速にするプロンプト例🤖✨
命名はAIが得意😌💖 ただし「採用するか」は人間の役目🎯
例:ユビキタス言語から候補を出す📝
- 伝える情報:用語集(Order/Payment/Shipment)、起きた事実、NGワード(DB/HTTPなど)
ミニECのドメインイベント名を提案して。
条件:
- ドメイン語彙を使う(Order/Payment/Shipment)
- 過去形の事実として命名する
- 技術用語(DB/HTTP/MessageQueueなど)は入れない
欲しい:イベント名候補10個と、それぞれ「何の事実か」の説明
15.9 章末チェック✅✨(これで命名ミス激減)
次の質問に全部「うん!」って言えたら合格💮🎀
- イベント名は 過去形になってる?🕒 (Microsoft Learn)
- 技術用語じゃなくて 業務の言葉になってる?🗣️
- “命令”っぽくない?(PayOrder / SendEmail になってない?)📣🚫
- 主語+起きたことが読める?🧠
- Completed を使うなら Failed とペアで考えた?🙂⚖️
- 型名は PascalCase で統一できてる?🧼 (Microsoft Learn)