📘

Firebase Functions にてファイルを分割して管理する方法

2023/01/13に公開

とりあえずテスト実装ができるまでにかかった時間なんと3時間。
多いのか少ないのか。基本がさっぱり出来ない場合はやっぱりエラーが連発して
どこにどんなエラーがあるのかよく分からない。こんな現象に陥ってしまいます。

ま、とりま動いたので自分用のメモ程度にシェアします。

index.js
const admin = require("firebase-admin");

const serviceAccount = {
  ...
}

admin.initializeApp({
  ...
});

const test = require("./test");

module.exports = { test }
test.js
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const _db = admin.firestore();

exports.addMessage = functions.https.onCall((data, context) => {
  console.log('hello world');
});

とりあえずは上記のコードと同様にすれば、デプロイする時に問題なくtest.jsもデプロイされます。

ただ、理解はさっぱり出来ていません。

まぁ、exportsってのがtest.jsを使えるようにしているのは何となく理解できますが、
基本がわからないので、まぁ、エクスポートしてるんだろうなぁみたいなノリです。

厄介なエラー

翻訳:デフォルトの Firebase アプリが存在しない。Firebase のサービスを使用する前に、必ず initializeApp() を呼び出してください。

シンプルになんこれ。って感じではありますが色々と調べていると
どうやら、firebaseを使用する場合は先に初期化せんかい!って感じらしいです。

まぁ、そうでしょうけど...。と思っていましたが
結構、このエラーに遭遇して改善できませんでした。
一番の理由は下記のコードからです。

index.js
const admin = require("firebase-admin");
const test = require("./test");

const serviceAccount = {
  ...
}

admin.initializeApp({
  ...
});

module.exports = { test }

test.jsでもadmin処理を使用しているのですが、
先にこいつがインポートされてるみたいで、firebaseの処理を初期化する前に参照してるからみたいです。
その結果、上記のエラーが度々発生します。

普通に考えれば一番上の方でimport系は済ましたいのに、
わざわざ初期化の下に書くって考えるとなんそれって感じです。

これを改善するまで、面倒だった・・・
ま、改善したから問題ないけどね。

Discussion