Slide 1

Slide 1 text

CQRSを学ぶついでに Cloud Functionsと Firestoreを連動させる時の 小技も学ぶ Firebase Meetup #15

Slide 2

Slide 2 text

自己紹介 Yuuki Fukuda 株式会社ディー・エヌ・エー オープンプラットフォーム事業部 -- Twitter: @hecateball

Slide 3

Slide 3 text

Disclaimer ● このスライドに記載されている内容は発表者個人の知見に基づくものであり、所属 する組織の公式の見解ではありません ● また、情報の正確性を保証するものではありません。このスライドの内容を利用し たいかなる結果に関しても責任を負いかねます ● 資料は後ほど公開するので、記憶・記録する必要はありません

Slide 4

Slide 4 text

今日話す内容 ● CQRSって何? ● FirebaseでCQRSするモチベーション ● Functionsを使ったCQRSの実装 ● FirestoreとFunctionsを併用する際のポイント

Slide 5

Slide 5 text

Command Query Responsibility Segregation (コマンドクエリ責務分離)

Slide 6

Slide 6 text

一般的なデータ読み書き

Slide 7

Slide 7 text

Read/Writeの関心事 Read Write ● データ検索の効率化・高速化 ● 結合・集計処理 ● データの整合性の維持 ● アトミックオペレーション ● 排他制御

Slide 8

Slide 8 text

CQRS(コマンドクエリ責務分離)とは

Slide 9

Slide 9 text

なぜFirebaseでCQRS? ● Read用/Write用でモデルを分離できることの恩恵が非常に大 きい ● Writeモデルを書き込み操作ログとして利用できる

Slide 10

Slide 10 text

Functions+Firestoreで実装する際のポイント

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

{ “user”: …, “createdAt”: ... } (ツイート) favorite_countを 1増やす

Slide 13

Slide 13 text

イベント:ビジネスロジック = 1 : n

Slide 14

Slide 14 text

よい イマイチ

Slide 15

Slide 15 text

Functionsのディレクトリ構成と Firestoreのコレクション構成を 一致させる小技

Slide 16

Slide 16 text

その他の小技 ● Callable Functionsは使わない ● updateトリガーを注意深く避ける ● 「似て非なるイベント」はコレクションを分ける

Slide 17

Slide 17 text

ご清聴ありがとうございました ● 主役はバックグラウンド関数 ● リアクティブシステムを搭載したフロントエンド技術と相性が良 い ● CQRSを適用すべきでないケースももちろんある ○ ユーザ体験をよく考えて!