イベントソーシング
定義
イベントソーシング(Event Sourcing)とは、アプリケーションの状態を「現在の状態」として保存するのではなく、状態変化を引き起こしたイベントのシーケンスとして保存するパターン。
通常のアプローチ:
Order { status: "shipped", total: 3000 } ← 現在の状態を上書き保存
イベントソーシング:
OrderCreated(total: 3000)
ItemAdded(item: "本", price: 1000)
PaymentReceived(amount: 3000)
OrderShipped(carrier: "ヤマト") ← イベントを追記のみ
現在の状態を知りたい場合は、すべてのイベントを順に再生(リプレイ)して再構築する。
なぜ重要か
- 完全な変更履歴:何がいつ起きたかが失われない(監査ログが無料で手に入る)
- 任意時点への巻き戻し:イベントをある時点まで再生することで、過去の状態を復元できる
- デバッグの容易さ:バグが発生した時点のイベントシーケンスを再現できる
- イベント駆動アーキテクチャとの親和性:ドメインイベントがそのまま永続化の単位になる
適用場面
- 変更履歴・監査ログが重要なシステム(金融、医療、EC)
- CQRSと組み合わせて書き込みモデルをイベントストアで管理するとき
- 時系列で「何が起きたか」を分析する必要があるとき
トレードオフ
| メリット | デメリット |
|---|---|
| 完全な監査ログ | クエリが複雑(リプレイが必要) |
| 過去状態の復元 | イベント数が増えるとリプレイが遅くなる(スナップショット戦略が必要) |
| ドメインイベントとの一致 | 学習コストが高い |
| バグの再現性 | スキーマ変更(イベントのバージョン管理)が難しい |
関連概念
出典
実践ドメイン駆動設計(Vaughn Vernon)第4章