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を学ぶついでにCloud FunctionsとFirestoreを連動させる時の小技も学ぶ
Search
hecateball
December 03, 2019
Technology
4.4k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CQRSを学ぶついでにCloud FunctionsとFirestoreを連動させる時の小技も学ぶ
小技です。
hecateball
December 03, 2019
More Decks by hecateball
See All by hecateball
Vue 3の導入を急ピッチでやってみた
hecateball
3
680
決済システムを設計するときに忘れてはならないたった1つの大切なこと
hecateball
1
15k
Firebase Summit 2019 ~Webのはなし~
hecateball
0
140
Other Decks in Technology
See All in Technology
ゼロをイチにする仕事が終わったあと
smasato
0
330
cccccc
moznion
0
1.9k
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
270
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
1
650
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5k
CIで使うClaude
iwatatomoya
0
230
SRE Lounge Hiroshimaへの招待
grimoh
0
640
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
13
2k
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
1
110
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
1
150
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
Are puppies a ranking factor?
jonoalderson
1
3.7k
Code Reviewing Like a Champion
maltzj
528
40k
Designing for Timeless Needs
cassininazir
1
320
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
310
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
Transcript
CQRSを学ぶついでに Cloud Functionsと Firestoreを連動させる時の 小技も学ぶ Firebase Meetup #15
自己紹介 Yuuki Fukuda 株式会社ディー・エヌ・エー オープンプラットフォーム事業部 -- Twitter: @hecateball
Disclaimer • このスライドに記載されている内容は発表者個人の知見に基づくものであり、所属 する組織の公式の見解ではありません • また、情報の正確性を保証するものではありません。このスライドの内容を利用し たいかなる結果に関しても責任を負いかねます • 資料は後ほど公開するので、記憶・記録する必要はありません
今日話す内容 • CQRSって何? • FirebaseでCQRSするモチベーション • Functionsを使ったCQRSの実装 • FirestoreとFunctionsを併用する際のポイント
Command Query Responsibility Segregation (コマンドクエリ責務分離)
一般的なデータ読み書き
Read/Writeの関心事 Read Write • データ検索の効率化・高速化 • 結合・集計処理 • データの整合性の維持 •
アトミックオペレーション • 排他制御
CQRS(コマンドクエリ責務分離)とは
なぜFirebaseでCQRS? • Read用/Write用でモデルを分離できることの恩恵が非常に大 きい • Writeモデルを書き込み操作ログとして利用できる
Functions+Firestoreで実装する際のポイント
None
{ “user”: …, “createdAt”: ... } (ツイート) favorite_countを 1増やす
イベント:ビジネスロジック = 1 : n
よい イマイチ
Functionsのディレクトリ構成と Firestoreのコレクション構成を 一致させる小技
その他の小技 • Callable Functionsは使わない • updateトリガーを注意深く避ける • 「似て非なるイベント」はコレクションを分ける
ご清聴ありがとうございました • 主役はバックグラウンド関数 • リアクティブシステムを搭載したフロントエンド技術と相性が良 い • CQRSを適用すべきでないケースももちろんある ◦ ユーザ体験をよく考えて!