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
810
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
370
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
230
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
210
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
350
AIのために、AIを使った、Effect-TSからの脱却 〜テストを活用した安全なリファクタリングの進め方〜
bitkey
PRO
2
750
Flutter初心者が生成AIで大規模アプリ開発をキャッチアップした工夫 〜元ネイティブエンジニアが実践した、技術転換の高速道路〜 / Flutter with LLM: A Former Native Engineer's Fast Track to Large-Scale Apps
bitkey
PRO
0
270
〜備えあれば憂いなし〜とりあえず障害訓練やろ? デジタル/フィジカル横断プロダクトを24365で維持するための戦略 / Better Safe Than Sorry: Incident Drills for 24/365 Digital-Physical Products
bitkey
PRO
0
150
雑談は、センサーだった
bitkey
PRO
2
520
AIが書いたコードを信じられない問題 〜レビュー負荷を下げるために変えたこと〜 / The AI Code Trust Gap: Reducing the Review Burden
bitkey
PRO
8
1.6k
Other Decks in Technology
See All in Technology
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
200
自律型AIエージェントは何を破壊するのか
kojira
0
160
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.1k
【2026年版】 ベクトル検索䛸 Embedding最前線
mocobeta
0
180
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
110
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
7
2k
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
130
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
6
5.2k
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
670
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
260
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
200
SONiC Scale-Up Working Group から探る Scale-UpやUltraEthernet機能の実装方法
ebiken
PRO
2
350
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
340
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
190
How to Talk to Developers About Accessibility
jct
2
230
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
230
Believing is Seeing
oripsolob
1
140
Automating Front-end Workflow
addyosmani
1370
210k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
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.