複式簿記から紐解くイベント駆動アーキテクチャの歴史

イベントソーシングの本質は「状態を直接更新せず、出来事を追記し、畳み込んで状態を導く」こと。この発想は複式簿記(15世紀)に始まる数百年来の知恵の再発見であり、銀行の勘定系は命名される何十年も前からこのアーキテクチャを実践していた。その系譜を辿る。

TL;DR

入り口としての比喩:複式簿記はイベントソーシングである

設計パターンを理解する最短経路は、すでに知っている構造との対応を見つけることだ。イベントソーシングの場合、その対応物は複式簿記である。

複式簿記の仕訳は、不変の追記専用ログ(append-only log)そのものだ。「いつ・何が・いくら動いたか」を借方・貸方のペアとして記録し、過去のエントリは決して書き換えない。残高は独立した真実のデータではなく、仕訳をすべて畳み込んだ導出結果にすぎない。

balance = fold(journal_entries)   // 残高 = 仕訳の畳み込み

これはイベントソーシングの中核的な等式と完全に一致する。

current_state = fold(events)      // 現在状態 = イベントの畳み込み

残高表は「派生ビュー」、すなわちプロジェクション(projection)に相当する。

単式簿記との対比:CRUD vs イベントソーシング

観点単式簿記 / CRUD複式簿記 / イベントソーシング
書き込み残高を直接上書き出来事を追記
現在状態テーブルに保持された値イベントの畳み込みで導出
過去の経路失われる完全に保持される
訂正方法値を書き換える打ち消すイベントを足す

単式簿記(CRUDモデル)はシンプルで読みやすいが、「なぜ今この残高なのか」という経路が消える。複式簿記が長らく標準であり続けたのは、この経路を保持することで得られる三つの性質ゆえだ。

特筆すべきは「訂正を削除で行わない」という哲学だ。誤りがあっても元データは残し、打ち消す記録を追記する。これにより履歴が線形に積み上がり、監査可能性が担保される。そして複式簿記をルカ・パチョーリが体系化したのは15世紀——イベントソーシングに約500年先行している。

歴史を紐解く

前史:追記専用ログは新しくない

追記専用の不変ログという発想自体は、極めて古い。イベントソーシングと CQRS を体系化した Greg Young 自身が、これらは「非常に古い概念」であり、すでに何千ものシステムがこの方式で稼働していたと述べている。SQL データベースが登場する以前のメインフレーム時代には、システムは典型的にこのように作られていた。

技術的に見ても、データベースは内部的にトランザクションログ(WAL: Write-Ahead Logging)というイベントソーシングで動作している。状態を更新する前に「何をするか」を不変ログに追記し、そこから状態を構築する——RDBMS の心臓部がすでにイベントソーシングなのだ。つまりイベントソーシングは「発明」というより「再発見と再命名」に近い。

起源:金融という出発点

イベントソーシングの体系化は、Greg Young がアルゴリズム取引に携わっていた文脈から生まれた。求められたのは、決定論的で、正しさを証明できる監査ログを備えたシステムだった。これは規制産業では一般的な要件である。

ここから Young は「状態遷移こそがドメインの本質であり、それをイベントとしてモデリングすべきだ」という発想に至る。出発点が金融——複式簿記の世界——だったことは示唆的だ。実際、Young の2014年の講演では、台帳のエントリを消しゴムで消すという象徴的なスライドが用いられ、イベントストアが金融記録にとって有用なツールであることを示すのに会計台帳の例が使われている。本稿の入り口とした複式簿記の比喩は、この分野の創始者自身が中心に据えていたものだった。

命名と普及:CQRS という名前

Young が CQRS(Command Query Responsibility Segregation)という用語を作ると、コミュニティは即座にこれを採用し、以降ずっと発展させ続けてきた。当初は教育上、CQRS を先に教えてからイベントソーシングを教えるのが有利だったが、後に Young 本人は「本来はイベントソーシングが先だ」と言うようになった。

この時期、DDD(ドメイン駆動設計)コミュニティと密接に結びつきながら広まった点も重要である。Eric Evans のドメインモデリングの思想と、Young のイベント中心の発想が結合し、2010年代のマイクロサービス時代に一気に実用化された。

製品化:学術的パターンから主流へ

2012年に Event Store(2019年に正式法人化)が設立される。これはイベントソーシングが学術的パターンから主流のアーキテクチャ標準へと成熟していく、10年がかりの進化を象徴している。EventStoreDB という専用データベースが開発され、現在は Kurrent という名称になっている。

時期出来事
15世紀複式簿記の体系化(追記専用・不変ログの原型)
〜2000年代メインフレーム/金融系で追記ログ方式が無名のまま稼働
2000年代後半Greg Young が金融文脈でイベントソーシングを再発見・体系化
2000年代末〜2010年代CQRS として普及、DDD と結合
2010年代〜現在専用DB(Event Store / EventStoreDB → Kurrent)と共に製品化

ケーススタディ:銀行勘定系という名前のないイベントソーシング

「メインフレーム時代には普通にこう作っていた」を最もよく体現するのが、銀行のオンラインシステムである。イベントソーシングや CQRS が命名されるより何十年も前から、金融系ではこの構造が当たり前に動いていた。

典型的な構成は次の三層に分かれる。

  1. 勘定系(更新系 / コマンド側): 日中のオンライン取引を「取引明細(トランザクションログ)」として追記する。各取引は借方/貸方のペアであり、これが不変のイベントログにあたる。残高をその場で上書きせず、取引を積み上げる。
  2. 夜間バッチ(プロジェクション生成): 営業終了後にバッチが起動し、その日の取引明細を集計して残高テーブルや照会用テーブルを再計算・書き出しする。これは CQRS のリードモデル構築そのものである。
  3. 照会系(参照系 / クエリ側): 翌営業日、窓口や ATM が参照するのはバッチで生成された照会用テーブルだ。書き込み(コマンド)と読み取り(クエリ)が、経路もデータモデルも分離されている——これが CQRS の本質である。

注目すべきは、この分離が理論からの演繹ではなく、制約からの必然だった点だ。当時のハードウェアでは、オンラインのレスポンスタイムを守りつつリアルタイムで全集計を維持することは不可能であり、重い集計は夜間にまとめて処理するほかなかった。「即時性が必要な更新」と「整合した状態での参照」を時間軸で分離した結果、コマンドとクエリが自然に分かれた。後年 Young らが理論として整理したものを、現場は性能要件への対処として先に実践していたのである。

旧来の勘定系と現代のイベントソーシングの差分

同じ追記ログ方式でも、両者には設計思想上の決定的な違いがある。

まとめ

歴史的には「銀行はずっとイベントソーシングを実践していた」と言えると同時に、「だが誰もそう呼ばず、思想として体系化もしていなかった」とも言える。さらに遡れば、複式簿記は500年前から同じ哲学を実践していた。

イベント駆動アーキテクチャの本質は、特定の技術スタックではなく、「過去を消さず、状態を出来事の積み重ねとして捉える」という考え方そのものにある。Greg Young らの仕事は、ゼロからの発明ではなく、現場の暗黙知と数百年来の知恵に名前と理論を与え、再利用可能な設計パターンとして確立したことだった。新しいパターンに出会ったとき、その起源を古い実務に探してみると、理解がぐっと深まることがある——複式簿記とイベントソーシングは、その好例である。

← Back to all posts