📑

CQRS/Event Sourcingを学ぶための教材(2020年版)

2020/09/24に公開

https://blog.j5ik2o.me/entry/2016/03/06/114459

この記事の更新版です。

僕がCQRSに入門したの2016年でした。すでに海外のDDDコミュニティではCQRS/Event Sourcing(以下, ES)に関する議論は盛んにされていました。

2020年になってようやく日本でも話題になることが多くなった印象なので、教材となりそうな書籍などの情報を簡単に紹介します。

前提となる教材

前提としてはEvans本を読んでいるということにさせてください。

さらにDDD本には ES の基礎となる ドメインイベント の解説が含まれていません。そのドメインイベントの概要を掴みたければ、実践ドメイン駆動設計に記載があります。

基礎教材

考案者であるGregさんのドキュメントです。

CQRS Documents by Greg Young
和訳版はこちら。CQRS Documents by Greg Young 和訳版

概念を把握するならこれが以外にないです。

もともとは2009年11月に公開された「CQRS à la Greg Young」というブログ記事が起源だそうです。日本では10年遅れですね。

CQRS à la Greg Young

2010年2月に投稿された記事もあります。

CQRS, Task Based UIs, Event Sourcing agh!Posted by gregyoung on February 16, 2010

関連教材

書籍

最近の書籍でよいなと思ったのは以下です。どう実装するかという観点で読むにはよい本です。

僭越ですが、僕のこれまでの活動履歴のような、スライドとブログ記事は以下です。★がお勧めです。

スライド

ブログ記事

Event Storming

CQRS/ESとしての設計技法は時間を掛けて学べば身につくと思いますが、イベントを基軸に対象ドメインをどう分析するかのスキルも養わなければなりません。Event Stormingを学ぶとよいです。以下は考案者執筆中の書籍です。

Introducing EventStorming

その他関連スライドや記事は以下。

実践教材

プロダクションでスケールするCQRS/ESは、今のところAkka以外ではほぼ選択肢がないです。Event Storeを使う方法もありますが、そもそもストレージが限定される制約が許容できない場合は使えません(Akkaではストレージのプラグインが対応していれば制限はありません)。Golangではproto.actorは有望ですが、先駆者であるAkkaの後追いの開発になっているようです。

というわけで、実践するための教材は、Akkaがお勧めです。教材というかツールキットなのですが、チュートリアルやサンプルを通して、理解を深められるはずです。

プログラミング言語はScalaになりますが、Java/Kotlinでも利用できます。あと.NET版もあります。とはいえ、関連書籍やドキュメントにはScalaで書かれているものが多いので、Scala以外の言語でやるとしてもScalaコードが読めたほうがよいという話になります。

お勧めの書籍は、僕も翻訳レビューに参加させてもらった、Akka実践バイブル アクターモデルによる並行・分散システムの実現です。この本にはAkkaでESを行うための解説があります。公式ドキュメントと併せて読むと良いです。

この書籍に一つ難点があるとしたら、最近AkkaのAPIが刷新されて、書籍に記載されているコードが古くなったということです(Akkaで実装できるアクターにはメッセージを送受信する機能があり、受信できるメッセージの型を指定できるようになりました。つまりメッセージ送受信がタイプセーフになりました)。この本は一つ前のメジャーバージョン(2.5)で書かれています。最新バージョン(2.6)でも古い形式のAPIはサポートされています。CQRS/ESの概念理解にバージョンは関係ありません。古いバージョンでも問題はありません。Akkaに慣れたら新APIで書き直せばよいです。

実装コードは以下を参考にしてください。

Akka2.5でのサンプル

Akka2.6でのサンプル

2.6のサンプル二個目は僕が開発中のものです。

自分が運営している、私塾 匠真堂(しょうまどう)のDiscordでCQRS/ESはフォローしているので、興味があれば参加して質問していただければよいと思います。

https://discord.gg/huJXUhM

最後に手前味噌ですが、ZennでBookを発売中です。まだ執筆中ですがよかったらどうぞ。

Akkaによるリアクティブシステム開発ガイド

Discussion