【いべんとそーしんぐ】

イベントソーシング とは?

💡 「何が起きたか」を全て記録して状態を再現する
📌 このページのポイント
イベントソーシング イベントストア(全履歴を保存) 注文作成 商品A × 2 数量変更 商品A × 3 住所変更 東京→大阪 支払完了 ¥9,000 時間→ イベントを再生(リプレイ) 現在の状態(リビルド結果) 商品A × 3 配送先: 大阪 支払済 ※ 任意の時点の状態をイベントから復元可能
イベントソーシングのイメージ(イベント履歴から状態を復元)
ひよこ ひよこ

普通のDBと何が違うの?

ペンギン先生 ペンギン先生

普通のDBは「現在の残高は10,000円」と最新の状態だけ保持する。イベントソーシングは「入金5,000円→入金8,000円→出金3,000円」と全ての変更イベントを保持する。イベントを順番に再生すれば現在の状態を復元できるし、過去の任意の時点に「巻き戻す」こともできるんだよ

ひよこ ひよこ

どんな場面で使うの?

ペンギン先生 ペンギン先生

①金融システム(全取引の監査証跡が必要)、②ECの注文処理(注文→確認→発送→配達の状態遷移を記録)、③バージョン管理Gitは実はイベントソーシングの一種)、④ゲームのリプレイ機能。「なぜこの状態になったか」を遡って調べる必要がある場面に最適だよ

ひよこ ひよこ

CQRSって何?

ペンギン先生 ペンギン先生

Command Query Responsibility Segregation(コマンドクエリ責務分離)の略。書き込み(Command)と読み取り(Query)のモデルを分離するパターン。イベントソーシングでイベントを書き込み、読み取り用のビューを別途構築する。書き込みと読み取りを独立してスケールできるメリットがあるよ

ひよこ ひよこ

イベントソーシングの難しさは?

ペンギン先生 ペンギン先生

①イベントのスキーマ変更が難しい(過去のイベントとの互換性維持)、②イベント数が膨大になるとリプレイに時間がかかる(スナップショットで対策)、③初学者には直感的でない(CRUDの方がシンプル)。大多数のアプリではCRUDで十分。本当に必要な場面でだけ採用するのが正解だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「イベントソーシング」って出てきたら「状態の変更を全てイベントとして記録する設計パターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「Event Sourcing」 = イベントソーシング
💬 Event(出来事)をSource(源泉)にしてシステムの状態を管理する考え方だよ
← 用語集にもどる