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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
株式会社ビットキー / Bitkey Inc.
PRO
October 24, 2022
Technology
850
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.
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
470
Swift&Xcodeのバージョンアップにまつわる怖かった思い出 / Scary Memories of Swift and Xcode Updates
bitkey
PRO
0
240
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
660
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
590
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
650
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
400
人が担う「価値」とは?これからの「QA」とは / Human Value and the Future of Quality Assurance
bitkey
PRO
0
370
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
580
Other Decks in Technology
See All in Technology
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
6k
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
170
hackers_champloo_2026_tidb
makocchi
0
160
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
860
夫婦で子育てするための育児標準化
codmoninc
PRO
0
340
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
Local CI × GitHub Actions
gogutan
2
190
Classmethod Company Deck
satoshi7
1
690
しろおびから始める!ログ活用の第一歩
shumei_ito
0
950
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
940
エンタメ企業のM&Aを支えるデータ基盤 ― 統合から店舗のリアルタイム分析まで / Data Engineering Summit 2026
genda
0
180
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.7k
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
ラッコキーワード サービス紹介資料
rakko
1
5.3M
Ethics towards AI in product and experience design
skipperchong
2
430
Designing for Performance
lara
612
70k
Are puppies a ranking factor?
jonoalderson
2
4.1k
First, design no harm
axbom
PRO
2
1.3k
Building AI with AI
inesmontani
PRO
1
1.3k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
The Cost Of JavaScript in 2023
addyosmani
55
10k
My Coaching Mixtape
mlcsv
0
360
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
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.