DDDアーキテクチャ・設計 2026年4月4日

イベントソーシング

📁 パターン 👁 -- 閲覧

イベントソーシング

定義

イベントソーシング(Event Sourcing)とは、アプリケーションの状態を「現在の状態」として保存するのではなく、状態変化を引き起こしたイベントのシーケンスとして保存するパターン。

通常のアプローチ:
  Order { status: "shipped", total: 3000 }  ← 現在の状態を上書き保存

イベントソーシング:
  OrderCreated(total: 3000)
  ItemAdded(item: "本", price: 1000)
  PaymentReceived(amount: 3000)
  OrderShipped(carrier: "ヤマト")  ← イベントを追記のみ

現在の状態を知りたい場合は、すべてのイベントを順に再生(リプレイ)して再構築する。

なぜ重要か

  • 完全な変更履歴:何がいつ起きたかが失われない(監査ログが無料で手に入る)
  • 任意時点への巻き戻し:イベントをある時点まで再生することで、過去の状態を復元できる
  • デバッグの容易さ:バグが発生した時点のイベントシーケンスを再現できる
  • イベント駆動アーキテクチャとの親和性ドメインイベントがそのまま永続化の単位になる

適用場面

  • 変更履歴・監査ログが重要なシステム(金融、医療、EC)
  • CQRSと組み合わせて書き込みモデルをイベントストアで管理するとき
  • 時系列で「何が起きたか」を分析する必要があるとき

トレードオフ

メリットデメリット
完全な監査ログクエリが複雑(リプレイが必要)
過去状態の復元イベント数が増えるとリプレイが遅くなる(スナップショット戦略が必要)
ドメインイベントとの一致学習コストが高い
バグの再現性スキーマ変更(イベントのバージョン管理)が難しい

関連概念

出典

実践ドメイン駆動設計(Vaughn Vernon)第4章