Nitroプロジェクトにfirebase-adminを導入する
こんにちは、合同会社Stegの @keigo です。今回は、Nitroプロジェクトにfirebase-admin
を導入する方法を紹介します。
Nitroプロジェクトにfirebase-admin
を導入する手順は以下の通りです。
-
firebase-admin
用の認証情報(Credentials)を取得 -
firebase-admin
をインストール - pluginとしてライブラリの初期化処理を記載
CredentialsをまとめたJSONファイルを作成
バックエンドサーバよりFirebaseを操作するためには、Firebase Admin SDKを利用します。
このSDKを利用するには、Firebaseの「サービスアカウントの認証情報」が含まれたJSONファイルを読み込ませる必要があります。
このJSONファイルは、Firebase管理画面の サービスアカウント > 新しい秘密鍵を生成
から入手できます。
{
"type": "service_account",
"project_id": "xxxx",
"private_key_id": "xxxxx",
"private_key": "-----BEGIN PRIVATE KEY-----\nxxxxxxx\n-----END PRIVATE KEY-----\n",
"client_email": "xxxxx",
"client_id": "xxxx",
"auth_uri": "xxxx",
"token_uri": "xxxx",
"auth_provider_x509_cert_url": "xxxx",
"client_x509_cert_url": "xxxx"
}
プロジェクト内の任意のディレクトリにファイルを格納してください。
次に、firebase-admin
の関数を使用するTypeScriptファイルでは、以下のようにimportする必要があります。
import serviceAccount from "../../example/path/xxxxxxxx.json";
import { ServiceAccount } from "firebase-admin";
firebase-admin
をインストールする
npm install -D firebase-admin
initializeFirebaseApp.ts
を作成、初期化処理を作成
pluginsにNitroでは、plugins/
ディレクトリ内にTypeScriptファイルを作成することにより、サーバーが起動する際に一度だけ実行されるファイルを作成できます。
今回は、plugins/initializeFirebaseApp.ts
というファイルを作成するものとします。
nitro.config.ts
に、以下の行を追加します。
plugins: ['plugins/initializeFirebaseApp.ts']
pluginsにて以下のimport文を追加し、firebase-admin/app
がexportしている関数を読み込みます。
// plugins/initializeFirebaseApp.ts
import { initializeApp, cert, getApps, getApp } from 'firebase-admin/app';
Firebaseを初期化する関数を作成します。ここではgetApps()
の返り値を利用して、まだ一度も初期化されていない(返り値が0の場合)に限り、処理を実施します。
// plugins/initializeFirebaseApp.ts
import { initializeApp, cert, getApps } from 'firebase-admin/app';
import { ServiceAccount } from "firebase-admin";
import serviceAccount from "../credentials/xxxxx.json";
const initializeFirebaseApp = () => {
if (!getApps().length) {
initializeApp({
credential: cert(serviceAccount as ServiceAccount),
})
}
}
サーバーを起動時にinitializeFirebaseApp()関数が実行されることで、firebase-adminの認証が完了し、各種関数が利用可能になります。
Discussion