ジャコ Lab

プログラミング関連のメモ帳的ブログです

Firebase Realtime Database の初回セットアップのやり方

zako-lab929.hatenablog.com

昨日、Firebase プロジェクトを作成しました。

本日は、Realtime Database の初期セットアップのやり方をまとめておきます。

Realtime Database とは

クラウド上にホストされたNoSQLデータベースで、リアルタイムでデータの読み書きが可能です。データの変更が即座に反映されるため、リアルタイムチャットやライブフィードなどのアプリに適しています。

firebase.google.com

料金体系

Firebase Pricing (日本語ページ)

料金ページ
料金ページ

あれ!?Spark プラン (無料プラン)の項目にRealtime Databaseが無くなっている!?
それどころかFirebase AuthenticationStorage, Firestoreなど諸々無くなっている!?

すごく焦りました。

どうやら、日本語ページでの記載が遅れているだけのようです。
英語ページにはちゃんと記載がありました。

Firebase Pricing (英語ページ)

Realtime Database 料金体系
Realtime Database 料金体系

Realtime Database Spark プラン Blaze プラン
同時接続 100 200k/DB
保存 1GB $5/GB
通信 10 GB/month $1/GB
複数DB
1GB あたり $5 と非常に高い!

Cloud Firestore は、たぶん $0.156/GiB ですかね?

初回セットアップ

DB を新規に作成する

Realtime Database トップへ遷移する

Firebase プロジェクトトップ画面
Firebase プロジェクトトップ画面

左メニューの「構築」内にある「Realtime Database」をクリックします。

データベースを作成する

Realtime Database トップ画面
Realtime Database トップ画面

「データベースを作成」のボタンがありますのでクリックします。

ロケーションを選ぶ

データベースの設定 (1/2)
データベースの設定 (1/2)

東京リージョンも無いですし、適当で良いです。

セキュリティルールを選択する

ロックモードのルールテストモードのルール
データベースの設定 (2/2)

◆ロックモード

「読み取り / 書き込み」共に false なので外からは読み書きできません。

◆テストモード

now < ${timestamp} の間「読み取り / 書き込み」共に true となります。
つまり、API-Key 等を知っていれば、30日間は誰でもアクセス可能になります。

これは後から設定できるのでどちらでも良いです

セキュリティルールの設定

さて「ロックモード」or「テストモード」でルールを設定しましたが、
ロックモードでは、読み書き共に false なのでウェブアプリからアクセス出来ませんし、テストモードでは、一定期間しかアクセス出来ません。

テストモードで、30日間経ってしまって、ある時、急に動かなくなって焦りました

firebase.google.com

細かい設定は上記を参照

例えば、
「ログインした人にだけ◯◯一覧を表示する」だったり、
users.$uid 配下は本人しか編集できないようにする」など細かい設定ができます。

セキュリティルールをとりあえず設定
{
  "rules": {
    ".read": true,
    ".write": true,
  }
}
このような設定だとルート要素から全てのデータの閲覧権限が付いてしまうので ❌
{
  "rules": {
    ".read": false,
    ".write": false,
    "hello-world": {
      ".read": true,
      ".write": true,
    }
  }
}
このように設定すると //path/to へのアクセス権は無く、
/hello-world 配下のみアクセス権がある状態になるので、安全?です。
ルールのプレイグラウンドで確認してみましょう

ルート(/)のアクセス権がないことを確認している様子
ルート(/)のアクセス権がないことを確認している様子

/hello-world にはアクセス権があることを確認している様子
/hello-world にはアクセス権があることを確認している様子

その他のパスにはアクセス権がないことを確認している様子
その他のパスにはアクセス権がないことを確認している様子

SDK の設定サンプルを確認

SDK の設定サンプル
SDK の設定サンプル

昨日の記事
昨日のSDK の設定サンプルとは異なり、
databaseURL の項目が増えていることがわかります。

まとめ

これで Realtime Database が使えるところまで来ました。
次回は実際に Web アプリから使ってみます。