くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Cloud Functionでサブコレクションまで再帰的に削除する(firebase-tools)

Firebaseの公式ドキュメントを見ていたら、こんな記事を見つけた。
試してみたので、そのときの備忘録。

Functionのソースはこんな感じ

// index.ts

import * as functions from "firebase-functions";

export onDeleteUser = functions
  .runWith({
    timeoutSeconds: 540,
    memory: "2GB"
  })
  .firestore.document("users/{uid}")
  .onDelete(async (snapshot, context) => {
    const firebase_tools = require("firebase-tools");

    // サブディレクトリを含めて一括削除
    await firebase_tools.firestore.delete(snapshot.ref.path, {
      project: process.env.GCLOUD_PROJECT,
      recursive: true,
      yes: true,
      token: functions.config().fb.token
    });
  });

デプロイする前に、トークンの取得と設定

# トークンを取得するために認証
$ firebase login:ci

# 取得したトークンをconfigに設定
# config名は"fb.token"なので、任意の変更可
firebase functions:config:set fb.token="YOUR_TOKEN_HERE"

これを設定しないと、上記のtoken: functions.config().fb.tokenトークンを取得できない。。

また、デプロイ時に反映されるので、デプロイ前に設定しないといけない

以上!!

参考にしたサイト様