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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
l-freeze
July 25, 2024
Programming
0
50
CQRS そして現実へ
l-freeze
July 25, 2024
Tweet
Share
More Decks by l-freeze
See All by l-freeze
referential-transparency
lfz
0
17
エンティティリレー
lfz
0
28
Other Decks in Programming
See All in Programming
2026年 エンジニアリング自己学習法
yumechi
0
130
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.3k
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
200
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
120
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
160
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
100
CSC307 Lecture 09
javiergs
PRO
1
830
CSC307 Lecture 03
javiergs
PRO
1
490
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.8k
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
190
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
290
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
170
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
[SF Ruby Conf 2025] Rails X
palkan
0
740
Un-Boring Meetings
codingconduct
0
200
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
350
How to Talk to Developers About Accessibility
jct
2
130
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
72
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
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していきましょう。
おしまい そして現実へ…