Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ステートソーシング型イベント駆動の視点で捉えるCQRS+ES
Search
shinnosuke0522
March 14, 2025
Programming
780
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ステートソーシング型イベント駆動の視点で捉えるCQRS+ES
shinnosuke0522
March 14, 2025
More Decks by shinnosuke0522
See All by shinnosuke0522
テストコードのために読みたい本3選
shinnosuke0522
1
54
非同期連携のための メッセージングサービスを考える
shinnosuke0522
2
190
Other Decks in Programming
See All in Programming
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
170
フィードバックで育てるAI開発
kotaminato
1
120
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.2k
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
280
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
230
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
340
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
560
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
AIエージェントで 変わるAndroid開発環境
takahirom
2
680
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
110
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
510
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Exploring anti-patterns in Rails
aemeredith
3
450
Paper Plane
katiecoart
PRO
2
52k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
730
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
We Are The Robots
honzajavorek
0
280
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Transcript
ステートソーシング型 イベント駆動 の視点で捉える CQRS + ES
Introduction 名前 廣田新之典 (@shin_developer) ECサイト開発のバックエンド開発 業務 経験 Java / Spring
Boot: 5年 Kotlin / Spring Boot : 3ヶ月
Archtecture 現在開発を行っているシステムの概要図。 それぞれ基幹マイクロサービスのProduceする Eventを外部連携用のマイクロービスが Consumeし、外部サービスへの連携をしたりし ている。 また逆に外部から受けたリクエスを基幹サービス へ連携する場合もある。 基本的にはステートソーシングでデータは永続化 されている
本日はそのようなシステムの開発に携わっている 視点からCQRS+ESをみていく
Eventのreplayが大変 1. 2. 過去状態を辿るのが大変 Problems StateSourcingのため最新の状態にデータが書き換わってしまう。 履歴が重要の情報だけデータモデルとして履歴にすることもできるが、 まったく意図しない挙動をしてしまった時はログから調査が必要になるが 運用方針次第ではProd環境で完全に遡ることが困難である場合もある 基本的にはEventは処理されると消えてしまうので、何か不具合が発生し
た場合にイベントを再作成に苦労する。また本番環境ではドメインイベン トをログとして出力しない運用になっている場合、その時何が起きたのか も失われてしまう可能性がある。
Eventのreplayが大変 1. 2. 過去状態を辿るのが大変 Problems StateSourcingのため最新の状態にデータが書き換わってしまう。 履歴が重要の情報だけデータモデルとして履歴にすることもできるが、 まったく意図しない挙動をしてしまった時はログから調査が必要になるが 運用方針次第ではProd環境で完全に遡ることが困難である場合もある 基本的にはEventは処理されると消えてしまうので、何か不具合が発生し
た場合にイベントを再作成に苦労する。また本番環境ではドメインイベン トをログとして出力しない運用になっている場合、その時何が起きたのか も失われてしまう可能性がある。 運用でカバーできなくはないがEventStoreがほしい
EventStoreを導入するなら もはやCQRS +ESにしたほうがいいのでは?
What is Event Store ドメインイベントを時系列順に記 録するデータストアとしての特性 を持つ。一度記録されたデータは 基本的に更新されることがなく、 データの更新の際には新たなイベ ントが記録される。
イベント履歴 ドメインイベントの種別にデータ 構造が異なる可能性が高い。その ようなデータを蓄積する必要があ るため、柔軟なスキーマを併せ持 つNoSQL系DBがイベントストア として採用されるケースが多い。 Kurrent(旧EventStore)のような 専用データストアを用いるケース もある。 柔軟なスキーマ バージョン管理 による拡張 ドメインイベントのを履歴として 管理する必要があり、各イベント 履歴はImmutableである必要が ある。よってバージョンを用いた デシリアライズが一般的である。
CQRS+ES によって どう変わるか 01 イベント履歴の永続化 イベントが履歴として永続化されることで、障害 時の原因調査や、イベントの再構築が容易にな る。また監査ログとしても利用できる。 Read/Writeのデータモデル衝突の回避 ソフトウェアは性質上記録したい情報と、見せたい情
報で形式が異なりこれを一つのデータモデルで再現し ようとしてバッティングが生じてきた。書き込み側は ビジネスロジックや整合性を重視するのに対し、読み 取り側は迅速なデータ取得や集計を優先したデータ構 造を使用したい。これらを分離することで、システム の保守性の向上が期待できる。 スケーラブルなWriterアプリケーションの構築 柔軟なスキーマ設計を行える点からWrite側のアプリケーシ ョンのデータストアとしてMongoDBのようなNoSQLを用 いるケースが多い。そのためRDBのように複数のインスタ ンスに対して書き込み処理を行えるため、書き込みがスケー ルしない問題を解消することが期待できる。 02 03
とはいえ移行は相当大変なので そこまでしたいほどのモチベはない (その権限もない) 個人的にはトレンドを 趣味で追う程度で現状満足....
Thank you