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
What's Firebase Realtime Database?
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
k2wanko
August 28, 2017
Technology
0
720
What's Firebase Realtime Database?
https://gcpug-tokyo.connpass.com/event/61973/
k2wanko
August 28, 2017
Tweet
Share
More Decks by k2wanko
See All by k2wanko
Sales AI Cloud "ailead" TSConfig Strictly Adopted / セールスAIクラウド「ailead」の TSConfig厳格化対応した話 /
k2wanko
4
2k
Google Analytics for Firebaseを 使うときに把握しておきたいこと / Keep in mind when using Google Analytics for Firebase
k2wanko
2
510
パスワードのない未来のための Firebaseで実装するFIDO2 / FIDO2 actualized by Firebase for the password-less future
k2wanko
5
2.5k
Firebase Auth& Performance Monitoring
k2wanko
0
360
What's New Firebase 2019 Q1 #FJUG #io19jp
k2wanko
5
2.7k
Firebase for Grow
k2wanko
5
990
gosecを試してみた話 / try gosec
k2wanko
0
3.5k
最近のFirebase / Recent Firebase
k2wanko
4
1.7k
Firebase Japan User Group Introduction 2018 #FJUG
k2wanko
0
620
Other Decks in Technology
See All in Technology
Claude Code Skills 勉強会 (DevelersIO向けに調整済み) / claude code skills for devio
masahirokawahara
1
17k
Claude Codeの進化と各機能の活かし方
oikon48
22
12k
8万デプロイ
iwamot
PRO
2
230
生成AIの利用とセキュリティ /gen-ai-and-security
mizutani
1
1.6k
Go標準パッケージのI/O処理をながめる
matumoto
0
160
AI は "道具" から "同僚" へ 自律型 AI エージェントの最前線と、AI 時代の人材の在り方 / Colleague in the AI Era - Autonomous AI Seminar 2026 at Niigata
gawa
0
160
開発組織の課題解決を加速するための権限委譲 -する側、される側としての向き合い方-
daitasu
5
610
Shifting from MCP to Skills / ベストプラクティスの変遷を辿る
yamanoku
4
820
AWSの資格って役に立つの?
tk3fftk
1
210
JAWS DAYS 2026 楽しく学ぼう!ストレージ 入門
yoshiki0705
2
160
実践 Datadog MCP Server
nulabinc
PRO
1
100
AIエージェント、 社内展開の前に知っておきたいこと
oracle4engineer
PRO
2
110
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Test your architecture with Archunit
thirion
1
2.2k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
200
Designing Experiences People Love
moore
143
24k
Making Projects Easy
brettharned
120
6.6k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
310
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.8k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
220
Transcript
Firebase Realtime Databaseとは? GCPUG Firebase Realtime Database /meetup/1 @k2wanko
コキチーズ @k2wanko GCPUGのスタッフ L社セキュリティエンジニア Go言語とGCP好き JavaScriptも少し書ける Firebase エンジョイ勢 Splatoonエンジョイ勢(S+) SW-4038-0559-8402
Realtime Databaseとは?
RDBではないデータベース
Realtime Database リアルタイムにデータを同期してくれる フルマネージドのNoSQLデータベース SDKを利用してクライアントから直接データの 読み書きが可能 オフラインでも読み書き可能 オンラインになった時データが同期される 一つのJSONオブジェクトの様な形式 アクセス制御はセキュリティルールという仕組
みがある
100,000 有料プランでの同時接続数
どういう用途に向いているか
用途 • チャット • 共同編集できるメモ • ターン制のようなゲーム (ボードゲームなど) • タスクキュー
向いていないもの • 容量の多いドキュメントの保存 • FPSなどの大量のデータが流れる ゲームなど
対応プラットフォーム Android iOSはもちろん、 Webブラウザでも使えるし オフライン対応もしている またUnityやC++(Cocos2dx用?) サポートもある ドキュメントにはないが arduinoもライブラリ(公式)が存在する firebase/firebase-arduino
もし対応しているプラットフォームが なくてもREST APIがあるのでHTTPで 操作できるしイベントをストリームで 受け取れる
データの構造化
データの構造化 Realtime Databaseでは 1つのJSONオブジェクトのような形で 保存される。 深さは32レベルまで Realtime DatabaseへのQueryは トップの要素がヒットするとその下に 連なる全てのオブジェクトを取得する
そのためネストを深くすると パフォーマンスが悪化する。 フラットな構造を心がけよう!
Threadと Messageの例 /threads/thread_id/messages/-K0/text ではなく /threads/thread_id /messages/thread_id/message_id/text のようにフラットにする。 そうしないと Threadの情報を取るためだけに 全てのメッセージを取得してしまう
データの保護とセキュリティ
セキュリティルール セキュリティルールは JSONで記述する。 read,writeオペレーションはマッチした ルールのみ実行される。 記述方法 コンソールの https://console.firebase.google.com/u/0 /project/{projectId}/database/rules で書くか
firebase-toolsを使ってローカルで 書いてデプロイする方法がある 後者のがバージョン管理できるので オススメ
.read .write .readと.writeは名前の通り 読み取る権限と 書き込む権限を制御する 図の例だと/users/{$uid}/に対して 認証したユーザーと同じ uidの場合 書き込めるというルールになる。 fooというuidのユーザがいたら
/users/fooへは書き込めるが /users/barには書き込めない またこのルールは上位の設定が優先さ れるので /users/foo/bar や /users/foo/hoge/hoge などには自由に書 き込める
.validate .validateは値が適切なフォーマットかどう かを制御する。 例では/fooへの書き込む値が 文字列であり100文字以内であるかを検 証する。 newDataはこれから書き込まれる値のス ナップショットで.val()は実際の値
$ variables $付きのものは変数としてデータの 検証に利用できる。 例では/users/fooへの書き込み時に $uidにfooが代入され auth.uidと一致するか検証できる authは認証情報が詰まってる 詳しくはドキュメントへ https://firebase.google.com/docs/refere
nce/security/database/#auth
$other $otherは特殊な命令で 定義したpathにマッチしなかった 場合にマッチする。 なので例では/foo以外にマッチしなかっ た場合にマッチするので /foo以外には書 き込めない 用途としてはユーザーに好きな プロパティを生やして書き込まれないよう
にするなどに利用する。
ところでJSONで書くの 辛くないですか?
Firebase Blaze
Firebase Blaze セキュリティルールを YAMLで書いて コンパイルすると セキュリティルールの JSONになる コンパイラ https://github.com/firebase/blaze_comp iler
関数などを定義できる (使ったことはない)
Firebase Bolt
Firebase Bolt セキュリティルールを書くための言語 コンパイルすると セキュリティルールの JSONになる 型を定義できるし 関数が使えるしコメントも書ける https://github.com/firebase/bolt VSCodeにPluginがある
Firebase Bolt はいいぞ!
Cloud Functions
Cloud Functions 様々なイベントをトリガーに実行する Node.jsのホスティングサービス RealtimeDatabaseでは書き込みを 元に実行できる 今まではonWriteで新規作成も アップデートも削除も 同じように呼ばれてたが onCreate
onUpdate onDelete が追加されて無駄に Functionsを 実行しないようできるようになった https://firebase.googleblog.com/2017/0 7/cloud-functions-realtime-database.ht ml
Functionsの注意点 /fooへの書き込みをトリガーにしていて /foo自身のvalueをFunctionsで 書き換えるとまたイベントが発生する なので繰り返し書き込んで 無限ループにならないようにする 必要がある またフリープランでは Googleのネットワーク外への リクエストはできない
料金 (2017/8/28)
Spark(フリー) - 同時接続 100 - 1GBのストレージ - 月10GBのダウンロード
Flame 月$25 (定額) - 同時接続 100K - 2.5GBのストレージ - 月20GBのダウンロード
Blaze(従量課金) - 同時接続 100K - 月5GB/$5 のストレージ - 月5GB/$5 のダウンロード
- Sparkと同じだけの無料枠あり
超高い
個人的な思い Realtime Databaseにデータを 保存するのは向いていないので Queueとして使い 実際のデータはDatastoreへ保存する Realtime DatabaseのKeyと遂になるよう にするのがよいかも
Cloud Datastore • スケーラビリティの優れたNoSQL • メンテナンスで落ちるとかない • 書き込みも読み込みもストレージも安い ◦ ストレージ
月1GB/$0.18 ◦ Realtime Databaseと比べると5分の1 ◦ 1GBの無料枠あり • Cloud Functionsからも読み書き可能
Tips
ドキュメントの見方 • 公式ドキュメントのURL https://firebase.google.com/docs/database/ • 英語版を読む場合は下の方にある言語設定を 英語にするか • URLのQueryにhl=enと付ける。 https://firebase.google.com/docs/database/?hl=en
• 最新の情報は英語にしかない
障害について RealtimeDatabaseは よくインシデントが発生している (GCPUG/#incidents_jaで確認できる) NSSはデータベースのサーバ名 curl https://<project-id>.firebaseio.com/.set tings/owner.json で確認できる
わからないことは? GCPUGのSlackの #firebase_ja で 聞こう! コキチーズは 日本語版スタックオーバフローも サブスクリプションしてます (リアルタイムではない)
Enjoy Realtime Database!