Admin Node.js SDK のバージョン 10 では、次の 2 つの重要な変更が導入されました。
- Node.js 10 のサポートの終了(これは互換性を破る変更です)
- SDK でのモジュラー API パターンの採用
このガイドではデベロッパーに向けて、既存の Node.js アプリを Admin SDK の以前のバージョンから v10 にアップグレードするための手順や情報を説明します。
Node.js を v12 以降に更新する
Admin Node.js SDK v10 のリリースに伴い、Firebase での Node.js 10 のサポートは終了しました。Admin SDK を使用する場合は、Node.js 12 以降を使用する必要があります。Admin Node.js SDK を Cloud Functions for Firebase と併用している場合は、Node.js のバージョンを 12 以降にアップグレードしたことを確認してください。
名前空間の代わりにモジュールを使用する
Admin Node.js SDK は当初より、ネストされた名前空間階層として構造化されている安定した API を提供しています。そのため、デベロッパーは次のようなコードの記述方法に慣れていると思われます。
// Import the global admin namespace
import * as admin from 'firebase-admin';
const app: admin.app.App = admin.initializeApp();
const token: string = await admin.auth().createCustomToken('alice');
const user: admin.auth.UserRecord = await admin.auth().getUser('bob');
v10 より、Admin Node.js SDK は名前付きエクスポートを使用する複数のモジュール エントリ ポイントを提供します。今後はグローバルな admin
名前空間ではなく、これらの新しいエントリ ポイントを使用して SDK のさまざまな API にアクセスすることをおすすめします。
新しいモジュール エントリ ポイントを使用すると、上記の例は次のようになります。
TypeScript
// Import only what you need
import { initializeApp, App } from 'firebase-admin/app';
import { getAuth, UserRecord } from 'firebase-admin/auth';
const app: App = initializeApp();
const token: string = await getAuth().createCustomToken('alice');
const user: UserRecord = getAuth().getUser('bob');
Node.js
// Import only what you need
const { initializeApp } = require('firebase-admin/app');
const { getAuth } = require('firebase-admin/auth');
const app = initializeApp();
const token = await getAuth().createCustomToken('alice');
const user = getAuth().getUser('bob');
v10 モジュラーのエントリ ポイントを使用する
上の例では、グローバルな admin
名前空間をインポートしていません。代わりに、複数のモジュール エントリ ポイントから必要なシンボルのみを明示的にインポートします。また、TypeScript のデベロッパーは、admin.auth.UserRecord
や admin.database.Reference
のような、三重のネストになっているタイプ識別子を使用する必要がなくなりました。各タイプが 1 つのモジュールに属するため、UserRecord
や Reference
のような略称でインポートできます。
v10 の SDK で利用可能なすべてのモジュール エントリ ポイントは、次のとおりです。
- firebase-admin/app
- firebase-admin/auth
- firebase-admin/database
- firebase-admin/firestore
- firebase-admin/instance-id
- firebase-admin/machine-learning
- firebase-admin/messaging
- firebase-admin/project-management
- firebase-admin/remote-config
- firebase-admin/security-rules
- firebase-admin/storage
以下の表は、従来の名前空間関数に代わるインポート構文を示します。
v9 | v10 |
---|---|
admin.initializeApp()
|
import { initializeApp } from 'firebase-admin/app'
|
admin.app()
|
import { getApp } from 'firebase-admin/ap'
|
admin.credential.cert()
|
import { cert } from 'firebase-admin/app'
|
admin.auth()
|
import { getAuth } from 'firebase-admin/auth'
|
admin.database()
|
import { getDatabase } from 'firebase-admin/database'
|
admin.firestore()
|
import { getFirestore } from 'firebase-admin/firestore'
|
admin.instanceId()
|
import { getInstanceId } from 'firebase-admin/instance-id'
|
admin.machineLearning()
|
import { getMachineLearning } from 'firebase-admin/machine-learning'
|
admin.messaging()
|
import { getMessaging } from 'firebase-admin/messaging'
|
admin.projectManagement()
|
import { getProjectManagement } from 'firebase-admin/project-management'
|
admin.remoteConfig()
|
import { getRemoteConfig } from 'firebase-admin/remote-config'
|
admin.securityRules()
|
import { getSecurityRules } from 'firebase-admin/security-rules'
|
admin.storage()
|
import { getStorage } from 'firebase-admin/storage'
|
アプリのメソッドの代わりにエクスポートされた関数を使用する
従来の API では、App
オブジェクトによって app.auth()
や app.database()
などの多数のメソッドを公開していました。今後は、これらのメソッドは使用しないでください。代わりに、上記のモジュール エントリ ポイントを使用して、特定の App
オブジェクトをスコープとするサービス インスタンスを取得し、その他のアプリ固有のタスクを実行することをおすすめします。
v9 | v10 |
---|---|
app.auth()
|
import { getAuth } from 'firebase-admin/auth';
|
app.database()
|
import { getDatabase } from 'firebase-admin/database';
|
app.database(url)
|
import { getDatabaseWithUrl } from 'firebase-admin/database';
|
app.firestore()
|
import { getFirestore } from 'firebase-admin/firestore'
|
app.instanceId()
|
import { getInstanceId } from 'firebase-admin/instance-id'
|
app.machineLearning()
|
import { getMachineLearning } from 'firebase-admin/machine-learning'
|
app.messaging()
|
import { getMessaging } from 'firebase-admin/messaging'
|
app.projectManagement()
|
import { getProjectManagement } from 'firebase-admin/project-management'
|
app.remoteConfig()
|
import { getRemoteConfig } from 'firebase-admin/remote-config'
|
app.securityRules()
|
import { getSecurityRules } from 'firebase-admin/security-rules'
|
app.storage()
|
import { getStorage } from 'firebase-admin/storage'
|
app.delete()
|
import { deleteApp } from 'firebase-admin/app';
|
ES モジュールのサポート
Node.js 12 以降では ES モジュールが試験運用版でサポートされ、TypeScript 以外のデベロッパーもコードで export
キーワードと import
キーワードを使用できるようになりました。v10 リリース以降、Admin Node.js SDK は ES モジュールもサポートしています。つまり、プレーンな Node.js に ES モジュールを実装するデベロッパーが import
構文を使用して SDK をインポートできます。
Admin SDK で ES モジュールを使用するには、まず Node.js ランタイムの ESM サポートが有効になっていることを確認します。通常は、package.json
ファイルに "type":
"module"
フィールドを追加し、このサポートを有効にします。これで、次のようなアプリケーション コードを作成できるようになります。
// With {type: module} in the package.json...
// Import only what you need
import { initializeApp } from 'firebase-admin/app';
import { getAuth } from 'firebase-admin/auth';
const app = initializeApp();
const token = await getAuth().createCustomToken('alice');
const user = getAuth().getUser('bob');