1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

fsrplを使う

Last updated at Posted at 2020-03-27

fsrpl

概要

Cloud Firestoreのデータのダンプ、リストアとかできるツール 便利

利用環境の構築

インストール

homebrew を信じろ

$ brew tap matsu0228/homebrew-fsrpl
$ brew install fsrpl

サービスアカウントから秘密鍵をダウンロード

  • firebase -> プロジェクトを設定 -> サービスアカウント
  • Firebase Admin SDKの「新しい秘密鍵を生成」を押下

秘密鍵を環境変数に追加

コマンドの基本利用方法はオプションに秘密鍵へのパスを指定するらしいが、面倒なので登録を推奨

$ export FIRESTORE_SECRET=生成した秘密鍵への絶対パス

ぼくは複数環境扱う関係でこうしました。

alias dev="export FIRESTORE_SECRET=~/.fsrpl/dev_secret_key.json"
alias stg="export FIRESTORE_SECRET=~/.fsrpl/stg_secret_key.json"
alias prd="export FIRESTORE_SECRET=~/.fsrpl/prd_secret_key.json"

利用方法

ダンプ

ダンプするとドキュメント単位で ${DOCUMENT_ID}.json で保存される

単一ドキュメントをダンプ

$ fsrpl "${COLLECTION_NAME}/${DOCUMENT_ID}" -f ${LOCAL_DUMP_PATH}

コレクション内の全ドキュメントをダンプ

$ fsrpl "${COLLECTION_NAME}/*" -f ${LOCAL_DUMP_PATH}

リストア

※この際 ${DOCUMENT_ID} を指定すれば指定したID、*の場合はファイル名をIDとする

単一ファイルをリストア

$ fsrpl "${COLLECTION_NAME}/${DOCUMENT_ID}" -i ${RESTORE_FILE}
or
$ fsrpl "${COLLECTION_NAME}/*" -i ${RESTORE_FILE_PATH}

複数ファイルをリストア

$ fsrpl "${COLLECTION_NAME}/*" -i ${RESTORE_FILES_PATH}

同一環境内でコピー

同一コレクションにドキュメントIDを変えてコピー
$ fsrpl "${COLLECTION_NAME}/${DOCUMENT_ID}" --destPath="${COLLECTION_NAME}/${OTHER_DOCUMENT_ID}"
別のコレクションに同一ドキュメントIDでコピー
$ fsrpl "${COLLECTION_NAME}/${DOCUMENT_ID}" --destPath="${OTHER_COLLECTION_NAME}/*"

別のコレクションに別のドキュメントIDでコピー

$ fsrpl "${COLLECTION_NAME}/${DOCUMENT_ID}" --destPath="${OTHER_COLLECTION_NAME}/${OTHER_DOCUMENT_ID}"

別のコレクションにコレクションを丸ごとコピー

$ fsrpl "${COLLECTION_NAME}/*" --destPath="${OTHER_COLLECTION_NAME}/*"

別の環境にコピー

単一ドキュメントをコピー

$ fsrpl "${COLLECTION_NAME}/${DOCUMENT_ID}" --destfs --dest-secret="${SECRET_KEY_FULLPATH}" --destPath="${COLLECTION_NAME}/*"

コレクションをコピー

$ fsrpl "${COLLECTION_NAME}/*" --destfs --dest-secret="${SECRET_KEY_FULLPATH}" --destPath="${COLLECTION_NAME}/*"

便宜上同じコレクション名でコピーしているが、コピー先のコレクション名を変えることも可能

--destPath="*/*" としてしまうとそれぞれの ${DOCUMENT_ID} のコレクションができてしまうので注意

できないこと

  • 参照フィールドを別環境にコピー

全ての参照しているフィールドが参照元のドキュメントIDを指すような参照に置き換わってしまう
projects/${SRC_PROJECT_ID}/databases/(default)/documents/${SRC_REF}/${SRC_DOCUMENT_ID}

参考:
https://qiita.com/mtskhs/items/65e66caa6dc9cd706c76

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?