🌊

Understanding Eventsourcingというイベントソーシング関連本が出たので見てみる

2024/12/05に公開

株式会社ジェイテックジャパン CTOの高丘 @tomohisaです。C#でイベントソーシング・CQRSのフレームワーク Sekibanを開発しています。

今回は、英語、かつLearnpubで未完成でも購入できる形でリリースされています。イベントソーシングは提唱者のGreg Youngも本を執筆していたのですが、なかなかリリースされずにいるので、ほんとしてまとめられているのは貴重です。

https://leanpub.com/eventmodeling-and-eventsourcing

タイトルですが、「Understanding Eventsourcing - Planning and Implementing scalable Systems with Eventmodeling and Eventsourcing」というタイトルで、和訳すると「イベントモデリングとイベントソーシングを活用したスケーラブルなシステムの計画と実装」となります。イベントモデリングを提唱した方で、アダム・ディミトルクという方が企画から関わっているものとのことです。イベントモデリングは、イベントストーミングと似た、イベント、コマンドとプロセスを実装可能なモデルで整理する手法です。

https://eventmodeling.org

https://www.eventstorming.com

今回は、Webサイトにも出ている目次を見つつ、本を斜め読みしながら、どのような内容が扱われているかをまとめてみたいと思います。epub, pdfで本は日本からも購入できると思いますので、よろしければご覧ください。

章のタイトルは元の英語版および、日本語訳も載せています。本は全部英語です。

目次の紹介

目次

  • アダム・ディミトルクによる序文
  • ガブリエル・N・シェンカーによる序文
  • なぜ私がこれに関心を持つのか
  • 基礎
  • なぜこれが重要なのか

Table of Contents

Foreword by Adam Dymitruk
Foreword by Gabriel N. Schenker
Why I Care
Foundations
Why You Should Care

第1部: 基礎

  1. イベントソーシングとは何か?
  2. イベントモデリングを用いたシステム設計
  3. CQRS、並行性、(最終的) 一貫性
  4. 内部データ vs. 外部データ
  5. イベントソースドアプリケーションの構造
  6. イベントストリーミング、イベントソーシング、ストリーム設計
  7. ドメイン駆動設計
  8. サガ - 分散システムでのトランザクション処理
  9. 垂直分割

Part I: Foundations
1.Event Sourcing - What Is It?
2.Planning Systems Using Event Modeling
3.CQRS, Concurrency, (Eventual) Consistency
4.Internal vs. External Data
5.The Anatomy of an Event-Sourced Application
6.Event Streaming, Event Sourcing, and Stream Design
7.Domain-Driven Design
8.Sagas - Handling Transactions in Distributed Systems
9.Vertical Slicing

第2部: システムのモデリング
10. システムのモデリング
11. ブレインストーミング
12. ワイヤーフレームによるユースケースのモデリング
13. 「Given / When / Then」シナリオ
14. ユースケース: カートをクリアする
15. ユースケース: カートを送信する
16. ユースケース: 在庫の変更
17. ユースケース: 価格の変更
18. イベントモデルの構造化

Part II: Modeling the System
10.Modeling the System
11.Brainstorming
12.Modeling Use Cases with Wireframes
13."Given / When / Then" Scenarios
14.Use Case: Clear Cart
15.Use Case: Submit Cart
16.Use Case: Inventory Changed
17.Use Case: Price Changed
18.Structuring an Event Model

第3部: ゼロから動作するソフトウェアへ
19. ゼロから動作するソフトウェアへ
20. テクノロジースタック
21. Axonの簡単な紹介
22. 最初のスライス「アイテムを追加する」の実装
23. ライブプロジェクションを使用した状態ビューのスライス実装
24. 「アイテムを削除する」および「カートをクリアする」の実装
25. Apache Kafkaとの統合例と翻訳
26. 在庫用データベースプロジェクションの実装
27. 自動化の実装
28. カートの送信
29. 破壊的変更への対応

Part III: From Zero to Running Software
19.From Zero to Running Software
20.Technology Stack
21.Brief Introduction to Axon
22.Implementing the First Slice - "Add Item"
23.Implementing State View Slices Using Live-Projections
24.Implementing Remove-Item and Clear-Cart
25.Example Integration with Apache Kafka and Translations
26.Implementing a Database Projection for Inventories
27.Implementing Automations
28.Submitting the Cart
29.Handling Breaking Changes

第4部: 実装パターン
30. 実装パターン
31. この章の目的
32. パターン: データベース投影型リードモデル
33. パターン: ライブモデル
34. パターン: (部分的に) 同期プロジェクション
35. パターン: ロジックリードモデル
36. パターン: スナップショット
37. パターン: 「プロセッサTODOリスト」パターン
38. パターン: 予約パターン
39. 次のステップ

Part IV: Implementation Patterns
30.Implementation Patterns
31.What This Part Is About
32.Pattern: Database Projected Read Model
33.Pattern: Live Model
34.Pattern: The (Partially) Synchronous Projection
35.Pattern: The Logic Read Model
36.Pattern: Snapshots
37.Pattern: "Processor-TODO-List" Pattern
38.Pattern: The Reservation Pattern
39.Where to Go From Here?
40.Notes

第5部: 未収録の章
40. メタデータの扱い

Part V: The Missing Chapters
41.Handle Metadata

まとめ

イベントソーシングはシンプルなパターンなのですが、Eric Evansが『異なるモデリングパラダイム』といったように、簡単に利点も含めて理解しにくいという問題があります。

https://zenn.dev/jtechjapan_pub/articles/c90646b33fd903

この本のように具体的な実装方法に関して詳しく解説した本があるのはとても良いこと感じました。

ただ、イベントソーシングの実装方法でも色々ありますし、Sekibanに関しても今まで書いてきた記述方法から、さらに関数指向で良い方法を現在模索中です。この本では、独自実装でイベンントソーシングを実装することに関してはあまり触れらていませんが、実際にアプリケーションを作るときに必要な内容は十分に含まれていて、関心のある方にはとても良い本ではないかと感じました。

2024年12月21日に、日本では初めての、イベントソーシングとCQRSに特化したカンファレンスが開かれます。もう少し空き席もありそうですので、よろしかったらどうぞ。僕も来日してイベントに参加して、登壇も行う予定です。

https://cqrs-es-con.connpass.com/event/333271/?utm_campaign=event_participate_to_follower&utm_source=notifications&utm_medium=twitter

ジェイテックジャパンブログ

Discussion