概要
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}