コンソールへ移動

Firebase CLI リファレンス

Firebase CLI(GitHub)は、Firebase プロジェクトの管理、表示、デプロイを行うためのさまざまなツールを提供します。

Firebase CLI を使用する前に、Firebase プロジェクトを設定してください。

Firebase CLI をインストールする

Firebase CLI(コマンドライン インターフェース)を使用するには、Node.jsnpm(Node Package Manager)が必要です。

  1. 以下のいずれかのオプションを使用して、Node.js をインストールします。Node.js をインストールすると、npm が自動的にインストールされます。

    • Mac または Linux の場合は、nvm(Node Version Manager)を使用します。
    • Windows の場合は、nvm-windows を使用します。
  2. 次のコマンドを実行して、npm で Firebase CLI をインストールします。

    npm install -g firebase-tools

    これにより、グローバルに使用できる firebase コマンドがインストールされます。Firebase CLI を最新バージョンに更新するには、同じく npm install コマンドを実行します。

  3. 次のコマンドを実行し、Google アカウントで Firebase にログインします。

    firebase login

    このコマンドにより、ローカルマシンが Firebase に接続し、Firebase プロジェクトへのアクセスが許可されます。

  4. 認証が機能したことをテストするには、次のコマンドを実行します。Firebase プロジェクトの一覧を表示する場合にも、このコマンドを使用します。

    firebase list

    Firebase コンソールと同じ Firebase プロジェクトが表示されているはずです。

最新の CLI バージョンに更新する

CLI のインストール コマンドを再度実行して、Firebase CLI の最新バージョンを使用していることを確認します。

npm install -g firebase-tools

Firebase プロジェクトを初期化する

CLI を使用して実行される多くの共通タスク(Firebase プロジェクトへのデプロイなど)には、プロジェクト ディレクトリが必要です。プロジェクト ディレクトリを設定するには、firebase init コマンドを使用します。プロジェクト ディレクトリは通常、ソース管理のルートと同じディレクトリであり、firebase init の実行後、ディレクトリには firebase.json 構成ファイルが格納されます。

新しい Firebase プロジェクトを初期化するには、アプリのディレクトリ内から次のコマンドを実行します。

firebase init

firebase init コマンドを実行すると、プロジェクト ディレクトリといくつかの Firebase サービスが順を追って設定できます。プロジェクトの初期化中に、Firebase CLI から次の操作を行うように求められます。

  • 必要な Firebase サービスを選択してから、選択したサービスの特定のファイルを構成する。

    プロジェクトに特定の Firebase サービスを設定するには、該当するサービスのドキュメントで設定情報(ホスティングなど)をご覧ください。あとで firebase init を実行して別の Firebase サービスを設定することもできます。

  • デフォルトの Firebase プロジェクトを選択する。

    このステップにより、プロジェクト固有のコマンド(firebase deploy など)が適切な Firebase プロジェクトに対して実行されるように、現在のプロジェクト ディレクトリが Firebase プロジェクトに関連付けられます。

    また、同じプロジェクト ディレクトリに複数の Firebase プロジェクトを関連付けることもできます(ステージング プロジェクトと本番環境プロジェクトなど)。

初期化の最後に、Firebase は 2 つのファイルを自動的に作成し、ローカルアプリ ディレクトリのルートに追加します。

  • プロジェクトの構成を含む firebase.json 構成ファイル。

  • プロジェクト エイリアスが保存される .firebaserc ファイル。

firebase.json ファイル

firebase init コマンドを実行すると、プロジェクト ディレクトリのルートに firebase.json 構成ファイルが作成されます。

firebase.json ファイルは、Firebase CLI でアセットをデプロイするために必要です。このファイルにより、どのファイルと設定がプロジェクト ディレクトリから Firebase プロジェクトにデプロイされるかが指定されます。一部の設定はプロジェクト ディレクトリまたは Firebase コンソールで定義できるため、発生しうるデプロイの競合を解決してください。

ほとんどの Firebase Hosting オプションの構成は、firebase.json ファイル内で直接行うことができます。ただし、その他の Firebase CLI でデプロイできる Firebase サービスについては、firebase init コマンドによって特定のファイルが作成され、そのファイルでそれらのサービスの設定を定義できます(Cloud Functions 用の index.js ファイルなど)。firebase.json ファイルでデプロイ前フックまたはデプロイ後フックを設定することもできます。

以下は、初期化時に Firebase Hosting、Cloud Firestore、Cloud Functions for Firebase を選択した場合の、デフォルトの設定を含む firebase.json ファイルの例です。

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint"
    ]
  }
}

Firebase プロジェクトをローカルで実行してテストする

本番環境にデプロイする前に、ローカルでホストされる URL で Firebase プロジェクトを表示してテストできます。選択した機能のみをテストする場合は、firebase serve コマンドのフラグ内でカンマ区切りのリストを使用します。

次のいずれかを行う場合は、ローカル プロジェクト ディレクトリのルートから次のコマンドを実行します。

  • Firebase がホストするアプリの静的コンテンツを表示する。
  • Cloud Functions を使用して Firebase Hosting の動的コンテンツを生成し、本番環境(デプロイ済み)の HTTP 関数を使用して、ローカル URL で Hosting をエミュレートする。
firebase serve --only hosting

プロジェクト ディレクトリから次のいずれかのコマンドを実行し、ローカル HTTP 関数を使用してプロジェクトをエミュレートします。

  • テストのためにローカル URL で HTTP 関数およびホスティングをエミュレートするには、次のいずれかのコマンドを使用します。

    firebase serve
    firebase serve --only functions,hosting // uses a flag
  • HTTP 関数のみをエミュレートするには、次のコマンドを使用します。

    firebase serve --only functions

デフォルトでは、firebase servelocalhost からのリクエストにのみ応答します。つまり、ホストされているコンテンツには同じコンピュータのウェブブラウザからアクセスできますが、ネットワーク上の他のデバイスからはアクセスできません。他のローカル デバイスからテストする場合は、--host フラグを使用します。

firebase serve --host 0.0.0.0  // accepts requests to any host

Firebase プロジェクトにデプロイする

Firebase CLI では、次のようなコードとアセットの Firebase プロジェクトへのデプロイを管理できます。

  • Firebase Hosting サイトの新規リリース
  • 新規、更新済み、既存の Cloud Functions for Firebase
  • Firebase Realtime Database のルール
  • Cloud Storage for Firebase のルール
  • Cloud Firestore のルール
  • Cloud Firestore のインデックス

Firebase プロジェクトにデプロイするには、プロジェクト ディレクトリから次のコマンドを実行します。

firebase deploy

デフォルトでは、firebase deploy を実行すると、プロジェクト ディレクトリ内にあるデプロイ可能なすべてのリソースについて、リリースが作成されます。特定の Firebase サービスまたは機能をデプロイするには、部分デプロイを使用します。

プロジェクト ディレクトリからリソースをデプロイするには、プロジェクト ディレクトリに firebase.json ファイルが必要であることに注意してください。このファイルは firebase init コマンドによって自動的に作成されています。

オプションで、各デプロイにコメントを追加できます。このコメントは、他のデプロイ情報とともにプロジェクトの Firebase Hosting ページに表示されます。次に例を示します。

firebase deploy -m "Deploying the best new feature ever."

セキュリティ ルールのデプロイの競合

Firebase Realtime Database、Cloud Storage for Firebase、Cloud Firestore の場合、ローカル プロジェクト ディレクトリまたは Firebase コンソールのいずれからでもセキュリティ ルールを定義できます。

デプロイの競合を回避するもう 1 つのオプションは、部分デプロイを使用し、Firebase コンソールでのみルールを定義することです。

デプロイの割り当て

可能性は低いものの、Firebase のデプロイ オペレーションのレートやボリュームを制限する割り当てを超えることがあります。たとえば、非常に多数の関数をデプロイすると、HTTP 429 Quota エラー メッセージが表示されることがあります。このような問題を解決するには、部分デプロイを使用するか、特定の Firebase サービスの割り当て量の増加をリクエストします。たとえば、1 ユーザーの 100 秒あたりの書き込みリクエスト数という割り当てを適用することで、上記の Cloud Functions 429 エラーの解決につながる場合があります。

デプロイをロールバックする

プロジェクトの Firebase Hosting ページから、目的のリリースの [ロールバック] アクションを選択すると、Firebase Hosting のデプロイをロールバックできます。

現時点では、Firebase Realtime Database、Cloud Storage for Firebase、Cloud Firestore のセキュリティ ルールのリリースをロールバックすることはできません。

特定の Firebase サービスをデプロイする

特定の Firebase サービスまたは機能のみをデプロイする場合は、firebase deploy コマンドのフラグ内でカンマ区切りリストを使用します。たとえば、次のコマンドは Firebase Hosting のコンテンツと Cloud Storage のセキュリティ ルールをデプロイします。

firebase deploy --only hosting,storage

次の表に、部分デプロイで利用できるサービスと機能を示します。フラグ内の名前は、firebase.json 構成ファイル内のキーに対応しています。

フラグの構文 デプロイされるサービスまたは機能
--only hosting Firebase Hosting のコンテンツ
--only database Firebase Realtime Database のルール
--only storage Cloud Storage for Firebase のルール
--only firestore Cloud Firestore のルールおよびインデックス
--only firestore:rules Cloud Firestore のルール
--only firestore:indexes Cloud Firestore のインデックス
--only functions Cloud Functions for Firebase(このフラグはより詳細な指定も可能です)

特定の関数をデプロイする

関数をデプロイするときは、特定の関数をターゲットにできます。次に例を示します。

firebase deploy --only functions:function1
firebase deploy --only functions:function1,functions:function2

もう 1 つのオプションは、/functions/index.js ファイルで関数をエクスポート グループにグループ化することです。関数をグループ化すると、1 つのコマンドで複数の関数をデプロイできます。

たとえば、次の関数を記述して groupAgroupB を定義できます。

var functions = require('firebase-functions');

exports.groupA = {
  function1: functions.https.onRequest(...);
  function2: functions.database.ref('\path').onWrite(...);
}
exports.groupB = require('./groupB');

この例では、groupB の関数を個別に定義するために別途用意された functions/groupB.js ファイルに追加の関数が含まれています。

var functions = require('firebase-functions');

exports.function3 = functions.storage.object().onChange(...);
exports.function4 = functions.analytics.event('in_app_purchase').onLog(...);

この例では、プロジェクト ディレクトリから次のコマンドを実行することによって、groupA のすべての関数をデプロイできます。

firebase deploy --only functions:groupA

または、グループ内の特定の関数をターゲットにするには、次のコマンドを実行します。

firebase deploy --only functions:groupA.function1,groupB.function4

関数を削除する

Firebase CLI では、以前にデプロイした関数を削除するための次のコマンドとオプションがサポートされています。

  • すべてのリージョンで、指定した名前と一致するすべての関数を削除します。

    firebase functions:delete function1-name

  • デフォルト以外のリージョンで実行されている指定した関数を削除します。

    firebase functions:delete function1-name --region region-name

  • 複数の関数を削除します。

    firebase functions:delete function1-name function2-name

  • 指定した関数グループを削除します。

    firebase functions:delete group-name

  • 確認メッセージを省略します。

    firebase functions:delete function1-name --force

デプロイ前とデプロイ後にスクリプトで実行されるタスクを設定する

シェル スクリプトを firebase deploy コマンドに接続して、デプロイ前のタスクまたはデプロイ後のタスクを実施できます。たとえば、デプロイ前スクリプトで TypeScript コードを JavaScript にトランスパイルしたり、デプロイ後フックで管理者に Firebase Hosting への新しいサイト コンテンツのデプロイを通知したりといったことが可能です。

デプロイ前フックまたはデプロイ後フックを設定するには、firebase.json 構成ファイルに bash スクリプトを追加します。firebase.json ファイルで簡単なスクリプトを直接定義するか、プロジェクト ディレクトリ内にある他のファイルを参照できます。

たとえば、次のスクリプトは、Firebase Hosting へのデプロイが成功した場合に Slack メッセージを送信するデプロイ後のタスクの firebase.json 式です。

"hosting": {
  // ...

  "postdeploy": "./messageSlack.sh 'Just deployed to Firebase Hosting'",
  "public": "public"
}

messageSlack.sh スクリプト ファイルはプロジェクト ディレクトリにあり、次のようになります。

curl -X POST -H 'Content-type: application/json' --data '{"text":"$1"}'
     \https://Slack-Webhook-URL

デプロイ可能なアセットに対して、predeploy フックと postdeploy フックを設定できます。firebase deploy を実行すると、firebase.json ファイルで定義されているすべてのデプロイ前のタスクおよびデプロイ後のタスクがトリガーされることに注意してください。特定の Firebase サービスに関連付けられているタスクのみを実施するには、部分デプロイ コマンドを使用します。

predeploy フックと postdeploy フックは、いずれもスクリプトの標準出力とエラー ストリームをターミナルに出力します。障害が発生した場合は、次の点に注意してください。

  • デプロイ前フックが予期したとおりに完了しなかった場合、デプロイはキャンセルされます。
  • なんらかの理由でデプロイが失敗すると、デプロイ後フックはトリガーされません。

環境変数

デプロイ前フックとデプロイ後フックで実行されているスクリプト内では、次の環境変数を使用できます。

  • $GCLOUD_PROJECT - アクティブなプロジェクトの ID
  • $PROJECT_DIR - firebase.json を含むルート ディレクトリ
  • $RESOURCE_DIR -(hostingfunctions のスクリプトのみ)デプロイする Hosting または Cloud Functions のリソースが格納されているディレクトリの場所

プロジェクト エイリアスを管理する

複数の Firebase プロジェクトを同じプロジェクト ディレクトリに関連付けることができます。たとえば、1 つの Firebase プロジェクトをステージングに使用し、もう 1 つのプロジェクトを本番環境に使用するとします。その場合、別のプロジェクト環境を使用することで、本番環境にデプロイする前に変更内容を確認できます。firebase use コマンドを使用すると、エイリアス間の切り替えや新しいエイリアスの作成を行うことができます。

プロジェクト エイリアスを追加する

プロジェクトの初期化中に Firebase プロジェクトを選択すると、このプロジェクトのエイリアスは自動的に default と呼ばれます。ただし、プロジェクト固有のコマンドを別の Firebase プロジェクトに対して実行しつつ、同じプロジェクト ディレクトリを使用するには、プロジェクト ディレクトリから次のコマンドを実行します。

firebase use --add

このコマンドを実行すると、別の Firebase プロジェクトを選択し、そのプロジェクトに定義したエイリアスを付与するよう求められます。エイリアスの定義は、プロジェクト ディレクトリ内にある .firebaserc ファイルに書き込まれます。

プロジェクト エイリアスを使用する

定義した Firebase プロジェクト エイリアスを使用するには、プロジェクト ディレクトリから次のいずれかのコマンドを実行します。

コマンド 説明
firebase use プロジェクト ディレクトリに現在定義されているエイリアスのリストを表示します。
firebase use alias_or_projectID プロジェクト ディレクトリに対してエイリアスを切り替えます。
firebase use --clear 現在「使用している」エイリアスをクリアし、すべてのコマンドを default エイリアスに振り向けます。
firebase use --unalias alias プロジェクト ディレクトリからエイリアスを削除します。

エイリアスの使用中、プロジェクト固有のすべてのコマンド(firebase deployfirebase data:get など)は、現在「使用している」Firebase プロジェクトに対して実行されます。プロジェクト ディレクトリにエイリアスが 1 つだけ定義されている場合は、プロジェクト固有のコマンドは自動的にそのエイリアスに対して実行されます。

ソース管理と Firebase プロジェクト エイリアス

一般的に、.firebaserc ファイルはソース管理にチェックインするべきです。これにより、チーム全体で共通のプロジェクト エイリアスを共有できます。ただし、オープンソース プロジェクトまたはスターター テンプレートについては、通常 .firebaserc ファイルをチェックインするべきではありません。

自分だけで使用する開発プロジェクトがある場合は、各コマンドとともに --project フラグを渡すか、Firebase プロジェクト エイリアスを定義せずに firebase use projectID を実行できます。

複数の Firebase Realtime Database インスタンスを管理する

単一のプロジェクトに複数の Realtime Database インスタンスがある場合は、--instance instance-name オプションを使用して、デフォルト以外のデータベース インスタンス(instance-name.firebaseio.com)を操作します。

--instance オプションは次のコマンドでサポートされています。

コマンド
database:profile
database:remove
database:push
database:set
database:update
database:get

コマンド リファレンス

管理コマンド

コマンド 説明
login Firebase アカウントに対して認証を行います。ウェブブラウザにアクセスできる必要があります。
logout Firebase CLI からログアウトします。
login:ci 非対話形式の環境で使用する認証トークンを生成します。
list すべての Firebase プロジェクトのリストを出力します。
use 進行中の Firebase プロジェクトの設定、プロジェクトのエイリアスの管理を行います。
open 関連するプロジェクト リソースをブラウザで迅速に開きます。
init 現在のディレクトリで新しい Firebase プロジェクトを設定します。このコマンドを実行すると、firebase.json 構成ファイルが現在のディレクトリに作成されます。
help CLI または特定のコマンドに関するヘルプ情報を表示します。

デプロイとローカルでの開発

次のコマンドを使用すると、デプロイおよび Firebase Hosting サイトとの通信を行うことができます。

コマンド 説明
deploy コードとアセットをプロジェクト ディレクトリから Firebase プロジェクトにデプロイします。Firebase Hosting の場合、firebase.json 構成ファイルが必要です。
serve Firebase Hosting の構成を使用してローカル ウェブサーバーを起動します。Firebase Hosting の場合、firebase.json 構成ファイルが必要です。

Realtime Database のコマンド

コマンド 説明
database:get 現在のプロジェクトのデータベースからデータを取得して、JSON として表示します。インデックス付きデータのクエリがサポートされます。
database:set 現在のプロジェクトのデータベース内の指定された場所にあるすべてのデータを置き換えます。ファイル、STDIN、またはコマンドライン引数からの入力を受け取ります。
database:update 現在のプロジェクトのデータベース内の指定された場所で部分更新を実行します。ファイル、STDIN、またはコマンドライン引数からの入力を受け取ります。
database:push 新しいデータを現在のプロジェクトのデータベース内の指定された場所にあるリストにプッシュします。ファイル、STDIN、またはコマンドライン引数からの入力を受け取ります。
database:remove 現在のプロジェクトのデータベース内の指定された場所にあるすべてのデータを削除します。
database:profile プロジェクトのデータベースに操作のプロファイルを作成します。操作について詳しくは、Realtime Database プロファイルをご覧ください。

ホスティング コマンド

コマンド 説明
hosting:disable 進行中のプロジェクトの Firebase Hosting トラフィックの処理を停止します。このコマンドを実行した後は、プロジェクトのホスティング URL で [サイトが見つかりませんでした] というメッセージが表示されます。

Cloud Firestore コマンド

コマンド 説明
firestore:delete Cloud Firestore からドキュメントを削除します。Firebase CLI では、再帰的削除を使用してコレクションに含まれるすべてのドキュメントを削除できます。

Cloud Functions コマンド

コマンド 説明
functions:log デプロイされた Cloud Functions からログを読み取ります。
functions:config:set 現在のプロジェクトの Cloud Functions のランタイム設定値を保存します。
functions:config:get 現在のプロジェクトの Cloud Functions の既存の設定値を取得します。
functions:config:unset 現在のプロジェクトのランタイム設定から値を削除します。
functions:config:clone プロジェクト環境間でランタイム設定をコピーします。

詳細については、環境の設定をご覧ください。

ユーザー管理コマンド

コマンド 説明
auth:import ファイルからアクティブなプロジェクトにユーザー アカウントをコピーします。詳細については、auth:import と auth:export のページをご覧ください。
auth:export アクティブなプロジェクトのユーザー アカウントを JSON または CSV ファイルにエクスポートします。詳細については、auth:import と auth:export のページをご覧ください。