Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Firebase Realtime Databaseとは? GCPUG Firebase Realtime Database /meetup/1 @k2wanko
Slide 2
Slide 2 text
コキチーズ @k2wanko GCPUGのスタッフ L社セキュリティエンジニア Go言語とGCP好き JavaScriptも少し書ける Firebase エンジョイ勢 Splatoonエンジョイ勢(S+) SW-4038-0559-8402
Slide 3
Slide 3 text
Realtime Databaseとは?
Slide 4
Slide 4 text
RDBではないデータベース
Slide 5
Slide 5 text
Realtime Database リアルタイムにデータを同期してくれる フルマネージドのNoSQLデータベース SDKを利用してクライアントから直接データの 読み書きが可能 オフラインでも読み書き可能 オンラインになった時データが同期される 一つのJSONオブジェクトの様な形式 アクセス制御はセキュリティルールという仕組 みがある
Slide 6
Slide 6 text
100,000 有料プランでの同時接続数
Slide 7
Slide 7 text
どういう用途に向いているか
Slide 8
Slide 8 text
用途 ● チャット ● 共同編集できるメモ ● ターン制のようなゲーム (ボードゲームなど) ● タスクキュー
Slide 9
Slide 9 text
向いていないもの ● 容量の多いドキュメントの保存 ● FPSなどの大量のデータが流れる ゲームなど
Slide 10
Slide 10 text
対応プラットフォーム Android iOSはもちろん、 Webブラウザでも使えるし オフライン対応もしている またUnityやC++(Cocos2dx用?) サポートもある ドキュメントにはないが arduinoもライブラリ(公式)が存在する firebase/firebase-arduino もし対応しているプラットフォームが なくてもREST APIがあるのでHTTPで 操作できるしイベントをストリームで 受け取れる
Slide 11
Slide 11 text
データの構造化
Slide 12
Slide 12 text
データの構造化 Realtime Databaseでは 1つのJSONオブジェクトのような形で 保存される。 深さは32レベルまで Realtime DatabaseへのQueryは トップの要素がヒットするとその下に 連なる全てのオブジェクトを取得する そのためネストを深くすると パフォーマンスが悪化する。 フラットな構造を心がけよう!
Slide 13
Slide 13 text
Threadと Messageの例 /threads/thread_id/messages/-K0/text ではなく /threads/thread_id /messages/thread_id/message_id/text のようにフラットにする。 そうしないと Threadの情報を取るためだけに 全てのメッセージを取得してしまう
Slide 14
Slide 14 text
データの保護とセキュリティ
Slide 15
Slide 15 text
セキュリティルール セキュリティルールは JSONで記述する。 read,writeオペレーションはマッチした ルールのみ実行される。 記述方法 コンソールの https://console.firebase.google.com/u/0 /project/{projectId}/database/rules で書くか firebase-toolsを使ってローカルで 書いてデプロイする方法がある 後者のがバージョン管理できるので オススメ
Slide 16
Slide 16 text
.read .write .readと.writeは名前の通り 読み取る権限と 書き込む権限を制御する 図の例だと/users/{$uid}/に対して 認証したユーザーと同じ uidの場合 書き込めるというルールになる。 fooというuidのユーザがいたら /users/fooへは書き込めるが /users/barには書き込めない またこのルールは上位の設定が優先さ れるので /users/foo/bar や /users/foo/hoge/hoge などには自由に書 き込める
Slide 17
Slide 17 text
.validate .validateは値が適切なフォーマットかどう かを制御する。 例では/fooへの書き込む値が 文字列であり100文字以内であるかを検 証する。 newDataはこれから書き込まれる値のス ナップショットで.val()は実際の値
Slide 18
Slide 18 text
$ variables $付きのものは変数としてデータの 検証に利用できる。 例では/users/fooへの書き込み時に $uidにfooが代入され auth.uidと一致するか検証できる authは認証情報が詰まってる 詳しくはドキュメントへ https://firebase.google.com/docs/refere nce/security/database/#auth
Slide 19
Slide 19 text
$other $otherは特殊な命令で 定義したpathにマッチしなかった 場合にマッチする。 なので例では/foo以外にマッチしなかっ た場合にマッチするので /foo以外には書 き込めない 用途としてはユーザーに好きな プロパティを生やして書き込まれないよう にするなどに利用する。
Slide 20
Slide 20 text
ところでJSONで書くの 辛くないですか?
Slide 21
Slide 21 text
Firebase Blaze
Slide 22
Slide 22 text
Firebase Blaze セキュリティルールを YAMLで書いて コンパイルすると セキュリティルールの JSONになる コンパイラ https://github.com/firebase/blaze_comp iler 関数などを定義できる (使ったことはない)
Slide 23
Slide 23 text
Firebase Bolt
Slide 24
Slide 24 text
Firebase Bolt セキュリティルールを書くための言語 コンパイルすると セキュリティルールの JSONになる 型を定義できるし 関数が使えるしコメントも書ける https://github.com/firebase/bolt VSCodeにPluginがある
Slide 25
Slide 25 text
Firebase Bolt はいいぞ!
Slide 26
Slide 26 text
Cloud Functions
Slide 27
Slide 27 text
Cloud Functions 様々なイベントをトリガーに実行する Node.jsのホスティングサービス RealtimeDatabaseでは書き込みを 元に実行できる 今まではonWriteで新規作成も アップデートも削除も 同じように呼ばれてたが onCreate onUpdate onDelete が追加されて無駄に Functionsを 実行しないようできるようになった https://firebase.googleblog.com/2017/0 7/cloud-functions-realtime-database.ht ml
Slide 28
Slide 28 text
Functionsの注意点 /fooへの書き込みをトリガーにしていて /foo自身のvalueをFunctionsで 書き換えるとまたイベントが発生する なので繰り返し書き込んで 無限ループにならないようにする 必要がある またフリープランでは Googleのネットワーク外への リクエストはできない
Slide 29
Slide 29 text
料金 (2017/8/28)
Slide 30
Slide 30 text
Spark(フリー) - 同時接続 100 - 1GBのストレージ - 月10GBのダウンロード
Slide 31
Slide 31 text
Flame 月$25 (定額) - 同時接続 100K - 2.5GBのストレージ - 月20GBのダウンロード
Slide 32
Slide 32 text
Blaze(従量課金) - 同時接続 100K - 月5GB/$5 のストレージ - 月5GB/$5 のダウンロード - Sparkと同じだけの無料枠あり
Slide 33
Slide 33 text
超高い
Slide 34
Slide 34 text
個人的な思い Realtime Databaseにデータを 保存するのは向いていないので Queueとして使い 実際のデータはDatastoreへ保存する Realtime DatabaseのKeyと遂になるよう にするのがよいかも
Slide 35
Slide 35 text
Cloud Datastore ● スケーラビリティの優れたNoSQL ● メンテナンスで落ちるとかない ● 書き込みも読み込みもストレージも安い ○ ストレージ 月1GB/$0.18 ○ Realtime Databaseと比べると5分の1 ○ 1GBの無料枠あり ● Cloud Functionsからも読み書き可能
Slide 36
Slide 36 text
Tips
Slide 37
Slide 37 text
ドキュメントの見方 ● 公式ドキュメントのURL https://firebase.google.com/docs/database/ ● 英語版を読む場合は下の方にある言語設定を 英語にするか ● URLのQueryにhl=enと付ける。 https://firebase.google.com/docs/database/?hl=en ● 最新の情報は英語にしかない
Slide 38
Slide 38 text
障害について RealtimeDatabaseは よくインシデントが発生している (GCPUG/#incidents_jaで確認できる) NSSはデータベースのサーバ名 curl https://.firebaseio.com/.set tings/owner.json で確認できる
Slide 39
Slide 39 text
わからないことは? GCPUGのSlackの #firebase_ja で 聞こう! コキチーズは 日本語版スタックオーバフローも サブスクリプションしてます (リアルタイムではない)
Slide 40
Slide 40 text
Enjoy Realtime Database!