Tech Server

Firestoreのルール設定とdumpやrestoreが簡単に行えるfsrpl

投稿日:2021年2月8日 更新日:

はじめに

こんにちは、nukkyです。
今回は、実際に使用しているFirestoreの本番用のルール設定の話と、Firestoreのデータのdumpや、restoreを簡単に行える fsrpl を紹介したいと思います。

Firestoreのルール設定

Firestoreのルールとは、データベースへのセキュリティルールを定め、アクセス制御を行うことが出来る機能です。

全て許可

Firestore作成時や開発時などはこちらのルールになっていると思います。

この記述で、Firestoreのデータベースのルートを表しており、その中にルールを記述していきます。

{document=**} のワイルドカード表記によって、このパス以降の全てのドキュメントを対象にルールが適用されます。
ですので、上の記述、match /{document=**} だと全てのドキュメントが対象になっています。
ルールの基本的な書き方は、以下の通りです。

つまり、例の記述である以下のルールだと、

read (get, list)と write (create, update, delete)を常に許可という記述になります。
このように、ドキュメントのパスに対してルールを設定していきます。

本番環境でのルール設定例

例えばログインしているユーザーへの読み書きを許可する場合は、以下のようにします。

request.auth が null でなければログインしているとみなし、read と write の許可を出しています。

ユーザー同士がアクセスしあい、共有化されているドキュメントなら上記でもいいかもしれませんが、ユーザーが自分のデータのみを読み書きしたい場合は以下の様に設定します。

パスの中に{}で囲っている箇所がありますが、これは変数として使用することができます、

この場合、ログインしておりパスの{userId}に当たる箇所がユーザーのuidと一致している場合は読み込み、更新、削除が許可されます。
今まで write で記述していたのを分けたのは二つ目のルールのためです。

初回のアクセス時など、users 以下にドキュメントがない場合に作成許可を出すため、create は ログインしていれば許可としています。

fsrpl

私も大変お世話になっている、Firestoreの運用に便利な fsrpl (Firestore Replication Tool) の使い方を解説していきます。

fsrplとは

公式にも記載されていますが fsrpl はシンプルに以下の3つの機能があります。

  • copy 特定のドキュメントを、別のCollection配下にコピーできる。また、ワイルドカードを利用することでコレクション配下のすべてのドキュメントをコピーできる。
    • さらに、特定のProjectのFirebaseから他のFirebaseへ、特定のドキュメントのデータをコピーできる
  • dump 特定のドキュメントをローカルのJSONファイルとしてバックアップができる。
  • restore ローカルのJSONファイルからドキュメントを復元できる。 firestore emulator へもデータの復元ができるため、テストデータ作成にも利用できる

インストール

今回は homebrew を使ってインストールします。

秘密鍵

fsrpl を使用するにはFirestoreの秘密鍵が必要になります。
サービス アカウント用の秘密鍵ファイルを生成するには、

  1. Firebase コンソールで、[設定] > [サービス アカウント] を開きます。
  2. [新しい秘密鍵の生成] をクリックし、[キーを生成] をクリックして確定します。
  3. キーを含む JSON ファイルを保管します。

取得した秘密鍵は、下記いずれかの方法で指定できます

  • 環境変数 FSRPL_CREDENTIALS に、秘密鍵のPATHを指定する方法
  • CLIのオプション --cred で、秘密鍵のPATHを指定する方法

copy

特定のドキュメントをコピーするために、 copy コマンドを利用します。

FSRPL_CREDENTIALS にPATHを通していない場合は、以下の様に指定します。

また、ワイルドカード * の指定ですべてのドキュメントをコピーできます。

開発環境から、本番環境へコピーする

開発環境と本番環境の秘密鍵があれば、CLIのオプション --dest_cred で、コピー先の秘密鍵のPATHを指定することで環境をまたいでコピーすることが出来ます。

dump

dump することで、ドキュメントからローカルJSONファイルとしてデータをバックアップすることができます。

restore

restore は、dump でバックアップしたJSONファイルを使用してデータを復元することができます。

さいごに

fsrpl はめちゃくちゃ便利なので、使ったことのない方はぜひ使ってみてください。

おすすめ書籍

実践Firestore Firebaseによるサーバーレスシングルページアプリケーション サーバーレス開発プラットフォーム Firebase入門

blog-page_footer_336




blog-page_footer_336




-Tech, Server
-,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

[Unity] Terrain(地形)を使ってみた

1 はじめに2 Terrainの追加方法3 Terrainの使い方4 Create Neighbor Terrain5 Paint Terrain5.1 Raise or Lower Terrain5 ...

Go言語

GoフレームワークGinでミドルウェアを使ってログインAPIを実装

1 はじめに2 ログインAPIの作成3 ログインのセッション管理4 ミドルウェア4.1 gin.Default()4.2 Logger4.3 Recovery4.4 sessions5 独自ミドルウェ ...

[CentOS7] systemdにサービスを登録して、サーバ起動時に自動でサービスを立ち上げる

1 はじめに2 chkconfigについてざっくり3 前提4 起動スクリプトを作成する5 Unitを定義する6 EnvironmentFileを作成する7 確認と設定7.1 systemdで管理できる ...

[Flutter]画像のトリミングを簡単に行えるimage_cropperを使ってみる

1 はじめに2 準備3 実装4 さいごに5 おすすめ書籍 はじめに 今回は、トリミングなど画像加工を簡単に行えるimage_cropperを使ってみたいと思います。 準備 次のコマンドを使用し、パッケ ...

aws

EventBridge Pipesを使ってSQSからECSタスクを起動する

1 はじめに2 EventBridge Pipesとは2.1 ソース2.2 フィルタリング2.3 エンリッチメント2.4 ターゲット3 EventBridge Pipesを使うメリット4 EventB ...

フォロー

blog-page_side_responsive

2021年2月
 123456
78910111213
14151617181920
21222324252627
28  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。