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 そして現実へ
Search
l-freeze
July 25, 2024
Programming
0
49
CQRS そして現実へ
l-freeze
July 25, 2024
Tweet
Share
More Decks by l-freeze
See All by l-freeze
referential-transparency
lfz
0
10
エンティティリレー
lfz
0
24
Other Decks in Programming
See All in Programming
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
190
[Kaigi on Rais 2025] 全問正解率3%: RubyKaigiで出題したやりがちな危険コード5選
power3812
0
110
Le côté obscur des IA génératives
pascallemerrer
0
140
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
4
820
Web フロントエンドエンジニアに開かれる AI Agent プロダクト開発 - Vercel AI SDK を観察して AI Agent と仲良くなろう! #FEC余熱NIGHT
izumin5210
3
520
SpecKitでどこまでできる? コストはどれくらい?
leveragestech
0
690
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.6k
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
3.3k
Domain-centric? Why Hexagonal, Onion, and Clean Architecture Are Answers to the Wrong Question
olivergierke
2
820
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
810
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
130
技術的負債の正体を知って向き合う / Facing Technical Debt
irof
0
160
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Visualization
eitanlees
149
16k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
Embracing the Ebb and Flow
colly
88
4.8k
Become a Pro
speakerdeck
PRO
29
5.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
970
Building Flexible Design Systems
yeseniaperezcruz
329
39k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
860
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Transcript
CQRS そして現実へ…
CQRSって聞いたことありますか?
CQRSとは? CQRS はコマンド クエリ責務分離を表し、データ ストアの読み取りと更新の操作を分離 するパターンです。 参考:https://learn.microsoft.com/ja-jp/azure/architecture/patterns/cqrs
コマンド? クエリー? 責務分離は医師 と薬剤師の事ね
コマンドとは? 副作用のある操作の事 副作用とは? DBの更新や、ログの出力、ファイルの新規作成など・・・ 具体例は? DBならINSERT/UPDATE/DELETEなど
クエリーとは? なにかを参照する操作の事 参照とは? DBの取得や、ログの表示、ファイルの読み込みなど・・・ 具体例は? DBならSELECTなど
クエリーは・・・ タダ!(見るだけなら) タダ!!!(金欠)
コマンドは・・・ 実行すると・・・ 副作用が!!!
コマンドは・・・!!! 実行すると・・・ 副作用が!!!
コード例 (Not CQRS)
部屋を予約する(Not CQRS) もしかして:MVC MVCアーキテクチャーで作られたものは100%CQRSではありません。 (サンプルコードはありません 😞)
コード例 (CQRS)
部屋を予約する(CQRS) 各ファイルの説明 apis/reservation/command/Room.ts 部屋の予約に関するコマンド ソース配置 apis/reservation/query/RoomQuery.ts 部屋の情報(広さなど)に関するクエリー apis/reservation/query/RoomRankQuery.ts 部屋の情報(広さなど)に関するクエリー apis/pages/apiCaller.ts
上記の呼び出し元
apis/reservation/command/Room.ts 部屋予約 予約取り消し 部屋の変更
apis/pages/apiCaller.ts クエリー コマンド
apis/reservation/query/RoomRankQuery.ts,RoomQuery.ts 空き部屋のランク一 覧を取得 部屋のランク一覧を 取得 部屋情報を取得
何が嬉しい?(Query) • ランク情報取得や空き部屋のランク情報取得など、情報取得系の操作はとにかく Queryと書かれているソースを見ればいい • 取得・参照処理だったらQueryを見れば良い、という事だけ覚えておけば良い • だから機能改修で取得結果を変更したい時は何も考えずにQueryだけを触れば良 い •
取得した結果が正しい事だけをテストすれば良い! • 副作用が無いから何回実行しても良い!
何が嬉しい?(Command) • コマンド名を見れば何をするのか分かる! • 副作用が発生する処理だという事が分かる! ◦ なので無闇に実行してはいけない事が分かる。 ◦ なので機能改修で修正が必要な場合は自然と緊張感が増す。 •
副作用の結果も考慮してテストする必要がある事が分かる。
現実の例 (Not CQRS)
プログラム教えて 来客です どうされますか? 税理士に提出して 決算報告書提出して 資料できました! どうですか? 決算は丁寧確認して、 貸借対照表と簿記は提出 してOK、資料はプログラム
の後で、来客対応先にして・・・ 💦
現実の例 (CQRS)
プログラム教えて 来客です どうされますか? 資料できました! どうですか? こいつら全部クエリー やな、ナンボ来ても良 さそうや
税理士に提出して 決算報告書提出して う、副作用のあるもの ばかり、これはコマンド ね 提出結果も確認しな きゃ
何が嬉しい?(現実) 副作〆
まとめ • クエリーとコマンドは分ける • クエリーは何度実行しても問題無い • コマンドは副作用が発生する
余談
気を付けること ここまでの話は機能に限ったものです。それ以外に関しては一切考慮をしていません。
気を付けること、それは非機能要件 クエリーも何度も実行し続ければ負荷が掛かります。同時に実行する数が多ければ極 端に負荷が掛かります。負荷に耐えられなければシステムは死んでしまいます。 これを機能に関係ない要件、非機能要件と言います。 非機能要件にも注意を払いながらCQRSしていきましょう。
おしまい そして現実へ…