Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Firestoreとうまく付き合うために
Search
株式会社ビットキー / Bitkey Inc.
PRO
October 24, 2022
Technology
840
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.
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
410
Swift&Xcodeのバージョンアップにまつわる怖かった思い出 / Scary Memories of Swift and Xcode Updates
bitkey
PRO
0
200
iOS/Androidの二刀流エンジニアがFlutter & TypeScriptへ越境後の現在地 - Flutterがメインになって見えた景色と現在の醍醐味 / Dual-Platform Mobile Engineer Shifts to Flutter & TypeScript - The View and Real Thrill of Going Flutter-First
bitkey
PRO
0
550
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
510
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
560
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
320
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
350
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
510
AIのために、AIを使った、Effect-TSからの脱却 〜テストを活用した安全なリファクタリングの進め方〜
bitkey
PRO
2
1k
Other Decks in Technology
See All in Technology
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
180
「図書館」という名前のままでいいのか -Code4Lib JAPANカンファレンス2026 アンカンファレンス報告- / Code4Lib JAPAN Conference 2026: Unconference Report
ykiyota
0
170
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
690
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
170
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
230
AIで仕事のやり方を変える
matsu7874
3
1.1k
消えない 動かない 効かない
yama3133
1
120
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
480
Podは生きているのにGoだけが落ちる:GOGCとGOMEMLIMITで追うInvisible OOM Killの謎
tkc66buzz
1
670
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
170
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
270
Tab5をRubyで動くパソコンにする
kishima
2
360
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
The Pragmatic Product Professional
lauravandoore
37
7.4k
How to make the Groovebox
asonas
2
2.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Designing for humans not robots
tammielis
254
26k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
520
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
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.