Firebase Admin SDK とは
Firebase Admin SDK を使うと、Firebase の管理者(おそらくあなた)用に提供された API キーを使って、Firebase 上のデータを管理することができます。
例えば、ローカル PC にある JSON データを解析して Firestore データベースのドキュメントとして登録するといったことができます。
Firebase Admin SDK がサポートしている言語としては、Node.js、Java、Python、Go、C# などがありますが、Node.js から順番に機能提供されていくようです。
ここでは Node.js (TypeScript) で Firestore の API を呼び出してみます。
☝️ サーバーライブラリとクライアントライブラリ
Firebase Admin SDK はしばしば サーバーライブラリ とも呼ばれます。
一方で、Web アプリやモバイルアプリなどで使う SDK は クライアントライブラリ と呼ばれ、Firebase が提供するセキュリティルールという仕組みでアクセス制御を行います。
具体的には、Firebase Auth などでユーザー認証を行うことで、各クライアントに対してアクセス権限を付与します。
これに対して、Firebase Admin SDK はあらかじめローカルに保持しているアクセスキーを使って API を呼び出すので、セキュリティルールを無視した特権アクセスが可能です。
秘密鍵のダウンロード
Firebase Admin SDK を使って API 呼び出しを行うには、秘密鍵(API キー)を取得する必要があります。
- Firebase コンソール にサインインして、対象のプロジェクトを選択する。
- プロジェクトの設定 を開き、サービスアカウント タブを選択する。
- 新しい秘密鍵の生成 をクリックして、秘密鍵ファイル (.json) をダウンロード。
ダウンロードされる .json ファイルは、次のような感じの内容になっています。
このファイルは、Credential ファイル や Configuration ファイル と呼ばれます。
このファイルには、管理者権限で Firebase を操作するための秘密鍵が含まれているので、外部に公開されないように保管してください。
間違って Git コミットしないように、ホームディレクトリなどに配置しておくのがいいです。
ここでは、次のように Dropbox に保存してみました。
~/Dropbox/firebase/myapp-12345-firebase-adminsdk-xxxx-abcde12345.json
Node.js (TypeScript) プロジェクトの作成
Firebase Admin SDK を使うための Node.js プロジェクトを作成していきます。
まずは、プロジェクト用のディレクトリを作成して、必要な NPM パッケージをインストールします。
ここでは、TypeScript コードをビルドなしで手軽に実行するために、ts-node を使います。
Firebase Admin SDK は、firebase-admin という NPM パッケージとして提供されています。
$ mkdir myapp && cd myapp
### npm の場合
$ npm init -y
$ npm install -D typescript ts-node
$ npm install firebase-admin
### yarn の場合
$ yarn init -y
$ yarn add -D typescript ts-node
$ yarn add firebase-admin
ついでに NPM スクリプトを追加して、yarn start
(npm start
) コマンドで main.ts
を起動できるようにしておきます。
Firebase Admin SDK の初期化
Firebase Admin SDK の各種サービスにアクセスするには、最初に initializeApp
関数を呼び出して、Firebase の App
インスタンスを初期化しておく必要があります。
initializeApp
関数は、デフォルトで GOOGLE_APPLICATION_CREDENTIALS
環境変数に設定したパスから、Credential ファイルをロードしようとするので、先にこの環境変数を設定しておきます。
export GOOGLE_APPLICATION_CREDENTIALS=~/Dropbox/firebase/myapp-12345-firebase-adminsdk-xxxx-abcde12345.json
次の TypeScript コードは、この Credential ファイルを使って Firebase の App
インスタンスを初期化し、その設定内容を表示します。
次のように実行して、秘密鍵の情報などが表示されればうまく設定できています。
複数の Firebase プロジェクトを運用している場合は、GOOGLE_APPLICATION_CREDENTIALS
という 1 つの環境変数を使いまわすのは都合が悪いかもしれません。
そのような場合は、次のようにすれば、任意の環境変数に Credential ファイルのパスを設定しておくことができます。
この例ではまず FIREBASE_MYAPP_CREDENTIALS
環境変数を参照し、見つからなかった場合はフォールバックとして GOOGLE_APPLICATION_CREDENTIALS
環境変数を参照するようにしています。
これで、Firebase の各種 API を呼び出す準備ができました。
Admin SDK で Firestore データベースにアクセスしてみる
上記で作成した initFirebase.ts
モジュールを読み込めば、Firebase の各種サービスにアクセスできるようになります。
例えば、firebase-admin/firestore モジュール が提供する getFirestore
関数を使って、Firestore
インスタンスを取得すれば、Firestore データベースを操作することができます。
次の例では、addSampleBooks
関数で books
コレクションにサンプルデータを登録し、dumpSampleBooks
関数でその情報を取得しています。
関連記事