🧩 Event Sourcing
✅ このスタイルの概要
状態そのものではなく「状態を変化させたイベント」を蓄積し、それを再生して現在の状態を得るスタイル。
✅ 解決しようとした問題
- 更新履歴の完全な保持(監査・再現)
- 競合の検知や非同期処理との整合性確保
- 状態変化の意味(なぜこの状態になったか)を後から把握しやすく
✅ 基本思想・ルール
- 変更操作はすべてイベントとして保存
- 現在状態 = 過去イベントの再生結果(Replay)
- Event Store(イベント専用 DB)を利用することが多い
概念図(Conceptual Diagram)

出典: Microsoft, “Event Sourcing pattern – Azure Architecture Center”.
https://learn.microsoft.com/en-us/azure/architecture/patterns/event-sourcing
✅ 得意なアプリケーション
- 金融・会計など履歴管理が必須の領域
- DDD の Aggregate と相性の良いドメイン
- 自動再処理・再演算が必要なシステム
❌ 不向きなケース
- 履歴保持の必要が薄いシンプルな CRUD
- イベント量が多すぎ、リプレイコストが問題になるケース
✅ 歴史
- Actor Model などイベント中心の計算モデルに影響
- CQRS との併用が一般的
✅ 関連スタイル
✅ 代表的なフレームワーク
-
EventStoreDB
Event Sourcing 専用の Event Store として最も広く使われる。 -
Kafka / Kinesis / Pub/Sub
Append-only ログとしてイベントを蓄積し、Replay で状態再構築を行う実装が可能。 -
Axon Framework(Java)
Event Sourcing と CQRS を統合した実装が容易。 -
Temporal / Cadence
長期間のイベント履歴管理とワークフローのリプレイをサポート。
✅ このスタイルを支えるデザインパターン
-
Memento
スナップショットの保存・復元に利用される。 -
Command
イベントを生成する操作オブジェクトとして扱う。 -
Observer
イベント購読者が状態変化を通知として受け取る構造。 -
Iterator
Event Stream の順次再生に利用される。 -
State
Aggregate がイベントを適用しながら内部状態を更新する。
✅ まとめ
Event Sourcing は 履歴を第一級データとして扱い、
意味のある状態管理を実現するアーキテクチャ である。