🖇️

Nitroプロジェクトにfirebase-adminを導入する

2024/03/11に公開

こんにちは、合同会社Stegの @keigo です。今回は、Nitroプロジェクトにfirebase-adminを導入する方法を紹介します。

Nitroプロジェクトにfirebase-adminを導入する手順は以下の通りです。

  1. firebase-admin 用の認証情報(Credentials)を取得
  2. firebase-admin をインストール
  3. 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

pluginsにinitializeFirebaseApp.tsを作成、初期化処理を作成

Nitroでは、plugins/ディレクトリ内にTypeScriptファイルを作成することにより、サーバーが起動する際に一度だけ実行されるファイルを作成できます。
https://nitro.unjs.io/guide/plugins

今回は、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の認証が完了し、各種関数が利用可能になります。

Steg Inc.

Discussion