Blog

シーマデータ読み込み処理、早くしました

初期設定時のシーマデータの読み込み処理が遅いので、バックエンドのCloudFunctionsを使って早くしました。 5/16の週に反映予定です。

現在ステージング環境にて、テストしています。

CloudFunctionsを利用するときの忘備録

特定のコレクション以下すべてを削除するときは await firebase_tools.firestore .delete関数が便利

ただしfirebase toolsのバージョンは、”firebase-tools”: “9.18.0”以下にすること

これ以上のバージョンだと、コレクションの一括削除ができないため

functsions delete関数

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";

const firebase_tools: any = require('firebase-tools')
const field = await db.collection(fieldCollectionName).doc(data.fieldId).get()


//この関数でコレクションの一括削除をする
export const deleteField = functions
  .region(FIREBASE_REGION)
  .runWith({

//Timeoutの時間を設定する
    timeoutSeconds: 540,

//このメモリを大きくするとバックエンドで処理を早くできる
    memory: '2GB',
    // secrets: ['GOOGLE_APPLICATION_CREDENTIALS']
  })//呼び出し
  .https.onCall(async (data: { fieldId: string }, context: any) => {


    const fieldPath = `${fieldCollectionName}/${data.fieldId}`

    // FieldUser 削除
    const FieldUserCollectionName = 'field-users'

//非同期処理 バックエンドからFrontのFirebaseへの処理
    const deletedFieldUsers = await
    admin.firestore().collection(FieldUserCollectionName).where('fieldId', '==', data.fieldId)
    .get()

    const fieldUsersDeletions = deletedFieldUsers.docs.map(fieldUser => fieldUser.ref.delete())
    await Promise.all(fieldUsersDeletions)

    await firebase_tools.firestore
      .delete(fieldPath, {

//ここに環境変数を設定する必要がある
        project: process.env.GCLOUD_PROJECT,
        recursive: true,
        yes: true,
        token: process.env.FIREBASE_TOKEN
      });

//ただの文字列を返す
    return 'field deleted !'
   
  });

CloudFunctions 環境変数設定方法

https://stackoverflow.com/questions/33128207/firebase-cli-authentication-through-token

ポイント

firebase-admin からFirebaseへアクセスできるインスタンスを生成できる

FirebaseへのCRUDへは、tokenをセットする Firebaseのtokenは1時間毎に自動で書き換えられる

ご連絡、質問は、Facebook よりお願いいたします。