Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ステートソーシング型イベント駆動の視点で捉えるCQRS+ES
Search
shinnosuke0522
March 14, 2025
Programming
820
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
58
非同期連携のための メッセージングサービスを考える
shinnosuke0522
2
210
Other Decks in Programming
See All in Programming
一人だけ、Kiroが静止する日
hideg
0
140
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
180
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
400
mrbgem 三角測量 開発
ogom
0
150
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
240
wkhtmltopdfの次どうするか問題2026
willnet
2
1.8k
Verilogで学ぶCPU自作入門.pdf
uyuki234
7
3.8k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
19
19k
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
210
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
440
アクセシビリティから考える情報設計
high_g_engineer
0
430
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
570
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Crafting Experiences
bethany
1
360
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
750
Scaling GitHub
holman
464
140k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
440
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
850
Being A Developer After 40
akosma
91
590k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
710
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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