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
Firestoreとうまく付き合うために
Search
株式会社ビットキー / Bitkey Inc.
PRO
October 24, 2022
Technology
820
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Firestoreとうまく付き合うために
株式会社ビットキー / Bitkey Inc.
PRO
October 24, 2022
More Decks by 株式会社ビットキー / Bitkey Inc.
See All by 株式会社ビットキー / Bitkey Inc.
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
430
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
260
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
250
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
440
AIのために、AIを使った、Effect-TSからの脱却 〜テストを活用した安全なリファクタリングの進め方〜
bitkey
PRO
2
890
Flutter初心者が生成AIで大規模アプリ開発をキャッチアップした工夫 〜元ネイティブエンジニアが実践した、技術転換の高速道路〜 / Flutter with LLM: A Former Native Engineer's Fast Track to Large-Scale Apps
bitkey
PRO
0
310
〜備えあれば憂いなし〜とりあえず障害訓練やろ? デジタル/フィジカル横断プロダクトを24365で維持するための戦略 / Better Safe Than Sorry: Incident Drills for 24/365 Digital-Physical Products
bitkey
PRO
0
170
雑談は、センサーだった
bitkey
PRO
2
550
AIが書いたコードを信じられない問題 〜レビュー負荷を下げるために変えたこと〜 / The AI Code Trust Gap: Reducing the Review Burden
bitkey
PRO
8
1.6k
Other Decks in Technology
See All in Technology
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
220
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
1
220
Zoom2Youtube.Claude
kawaguti
PRO
3
460
SRE Lounge Hiroshimaへの招待
grimoh
0
410
どうして今サーバーサイドKotlinを選択したのか
nealle
0
210
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
1.9k
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
1.6k
ローカルLLMとLINE Botの組み合わせ その3 / LINE DC Generative AI Meetup #8
you
PRO
0
120
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
12
5k
証券システムを10年Scalaで作り続けるということ - 関数型まつり2026
krrrr38
3
750
次世代ランサムウェア対策の考察 / 20260704 Mitsutoshi Matsuo
shift_evolve
PRO
5
1.7k
金融の未来を考える / Thinking About the Future of Finance
ks91
PRO
0
180
Featured
See All Featured
Skip the Path - Find Your Career Trail
mkilby
1
160
A designer walks into a library…
pauljervisheath
211
24k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Embracing the Ebb and Flow
colly
88
5.1k
Leo the Paperboy
mayatellez
8
1.9k
From π to Pie charts
rasagy
0
230
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Into the Great Unknown - MozCon
thekraken
41
2.6k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
330
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Transcript
Copyright © 2022 Bitkey Inc. All right reserved. Firestoreとうまく付き合うために 株式会社ビットキー 白木
孝典 2022.10.24
2 Copyright © 2022 Bitkey Inc. All right reserved. Outline
1. 自己紹介 2. これまでの話 3. Firestoreについて 4. Firestoreを実際使ってきて 5. 今後の話
3 Copyright © 2022 Bitkey Inc. All right reserved. 自己紹介
白木孝典 Shiraki Takanori 2014 2016 2018 株式会社ワークスアプリケーションズに入社 会計システムのソフトウェア開発者として、管理会 計、特に予算管理を主に担当 会計事業からEC事業へ異動 受注・決済管理の開発チームのマネージャーとなる 現場でマネジメントをしながら、導入業務も兼任 創業からビットキーへジョイン スマホアプリ・ウェブアプリ・バックエンドの基礎設 計、インフラ選定、アーキテクチャ設計、フレーム ワークやライブラリの決定から実装までを担う 2022 新規サービスの設計・実装、既存サービスの改善、開 発体験の改善、色々やってます
4 Copyright © 2022 Bitkey Inc. All right reserved. 1.
これまでの話
5 Copyright © 2022 Bitkey Inc. All right reserved. これまでの話
GCP製品を使うようになった理由 • コスト • 機能 • 将来性 • 考え方 • ほか
6 Copyright © 2022 Bitkey Inc. All right reserved. これまでの話
GCP製品を使うようになった理由 • コスト • 機能 • 将来性 • 考え方 • ほか 2018年の創業時、他のクラウドサービスと比較して 一番自分たちに合っていた
7 Copyright © 2022 Bitkey Inc. All right reserved. これまでの話
コンシューマー向けスマホアプリからスタート Firestore、Storage、Functionsを主軸に開発 当時は快適に開発できていました
8 Copyright © 2022 Bitkey Inc. All right reserved. これまでの話
事業拡大期。 Webアプリを作り、機能が広がる中、 だんだんペインが増えていく・・・ Firestoreに向かないユースケースや、 Cloud Functionsの限界など。
9 Copyright © 2022 Bitkey Inc. All right reserved. 2.
Firestoreについて
10 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreについて
Firestoreとは… • ドキュメント指向データベース • スケーラビリティすごい • オフラインサポートがアツい • リアルタイムアップデートが強力 • トリガーが簡単 • (正しく使えば)異次元の安さ 東京リージョンの場合 $0.038 / 100,000 read
11 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreについて
逆によく考えて使わないといけないポイントも・・・
12 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreについて
• スキーマレス • 動的な結合はできない • ドキュメントの更新頻度の制限 • ドキュメントサイズの制限 • プロジェクトにひとつだけ • ロケーションの変更はできない • クエリの制約が厳しめ • 複合インデックス上限200 • 一度の書き込み上限500
13 Copyright © 2022 Bitkey Inc. All right reserved. 3.
Firestoreを実際使ってきて
14 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
実際に使って感じたこと • スケーラビリティについて • リアルタイムアップデートについて • オフラインサポートについて • クエリについて • コレクション設計について • イベントトリガーについて • スキーマレスについて • ロケーションについて
15 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
実際に使って感じたこと • スケーラビリティについて • リアルタイムアップデートについて • オフラインサポートについて • クエリについて • コレクション設計について • イベントトリガーについて • スキーマレスについて • ロケーションについて
16 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
クエリについて 日々苦労するのは、 結局ここ。 • joinはできず、inに渡せる値は10まで • 範囲検索は1フィールドが上限 • 範囲+αの検索には複合インデックスが必要 • 複合インデックスの上限は全体で200まで
17 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
クエリについて 日々苦労するのは、 結局ここ。 • joinはできず、inに渡せる値は10まで • 範囲検索は1フィールドが上限 • 範囲+αの検索には複合インデックスが必要 • 複合インデックスの上限は全体で200まで
18 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
クエリについて グループ1に所属する人のアクティビティを取得したい → ?? or 所属 group id 1 1 1 2 2 1 行動 id activity 1 A 1 B 2 C 行動 group id activity 1 1 A 1 1 B 1 2 C 2 1 A 2 1 B or 行動 groups id activity 1, 2 1 A 1, 2 1 A 1 2 C
19 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
クエリについて 日々苦労するのは、 結局ここ。 • joinはできず、inに渡せる値は10まで • 範囲検索は1フィールドが上限 • 範囲+αの検索には複合インデックスが必要 • 複合インデックスの上限は全体で200まで
20 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
クエリについて 範囲検索は1フィールドが上限 できる できない
21 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
クエリについて 日々苦労するのは、 結局ここ。 • joinはできず、inに渡せる値は10まで • 範囲検索は1フィールドが上限 • 範囲+αの検索には複合インデックスが必要 • 複合インデックスの上限は全体で200まで
22 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
クエリについて 日々苦労するのは、 結局ここ。 • joinはできず、inに渡せる値は10まで • 範囲検索は1フィールドが上限 • 範囲+αの検索には複合インデックスが必要 • 複合インデックスの上限は全体で200まで → 問題となるユースケースでは 素直に他のDBを検討するべき
23 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
コレクション設計について めちゃくちゃ悩みました
24 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
コレクション設計について 設計が難しい 設計ができてもすっきりしない レビューはもっと難しい
25 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
イベントトリガーについて 便利で簡単に作れてしまうから使いがち。 だけど本当に慎重になった方が良い。 • 変更から処理までのタイムラグ • エラーハンドリング • やりすぎるとカオス • 変更難易度がめちゃくちゃ高い
26 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
スキーマレスについて 実際は、変なデータが取得される可能性を 常に考慮するコストのほうが、大きい。 メリットとして語られる こともあるが… ネストも含めた全フィールドに対して 定義しきることは、かなり大変 セキュリティルールで 制御はできるが…
27 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
スキーマレスへの向き合い方 その1 定義はOpenAPI • 厳密なセキュリティルールを書くのは大変 • ランタイムエラーよりコンパイルエラー • 必要ならここからセキュリティルールを生成できる
28 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
スキーマレスへの向き合い方 その2 定義違反は都度チェック チェックと変換
29 Copyright © 2022 Bitkey Inc. All right reserved. Firestoreを実際使ってきて
ロケーション選択について ロケーションは一度決めたら変更できず、 Firestoreはプロジェクトごとにひとつしかもてない。 • 基本はユーザーとバックエンドとFirestoreをすべて近づけるべき • 事業展開が予定通りでない場合のインパクト • 初期のプロジェクト全体の設計が重要
30 Copyright © 2022 Bitkey Inc. All right reserved. 4.
今後の話
31 Copyright © 2022 Bitkey Inc. All right reserved. 今後の話
結論 Firestoreの強みを活かし 弱い所は使わない • Firestoreを主軸にサービスを作らないほうがいい • 不足を他で補うのではなく、Firestoreがサポートに回る形 • Firestoreで困らない機能だけを提供するなら話は別
32 Copyright © 2022 Bitkey Inc. All right reserved. 今後の話
目指す形 メインがFirestore これまで RDBをベースに、 Firestoreがサポートする これから Cloud SQL Cloud Spanner AlloyDB Firestore Firestore
33 Copyright © 2022 Bitkey Inc. All right reserved. 今後の話
Firestoreが担う領域 だいたい全部 これまで これから 以下によってユーザー体験がよくなるところ • Getの負荷分散 • リアルタイム更新 • オフラインサポート
34 Copyright © 2022 Bitkey Inc. All right reserved. 今後の話
結論 得意なものに任せる • 厳密な情報の管理(整合性、トランザクション) → RDB • 全文検索・統計量 → 検索エンジン • 類似度検索 → Vertex AI Matching Engine • リアルタイム更新・オフライン操作 → Firestore • 分析 → BigQuery • スケール・レイテンシの限界 → Bigtable
35 Copyright © 2022 Bitkey Inc. All right reserved. 今後の話
やっぱり『ベストプラクティス』をしっかり読むこと Firestoreについてはおすすめの使い方ではなく、 守るべきルールが書かれています。 https://firebase.google.com/docs/firestore/best-practices?hl=ja
36 Copyright © 2022 Bitkey Inc. All right reserved. 今後の話
やっぱり『ベストプラクティス』をしっかり読むこと • ドキュメントへの書き込みを1秒間に複数回行わないでください • オフセットは使用しないでください • 単一フィールド除外を追加した方がよい場合があります • 最近削除されたデータをスキップするようなクエリの使用をさけてください • 辞書順で近い一連のドキュメントに対して、高頻度で読み取りや書き込みを 行わないでください 例えばこんなことが書かれています
37 Copyright © 2022 Bitkey Inc. All right reserved.