デプロイ ターゲット

デプロイ ターゲットは、Firebase プロジェクト内の Firebase リソースの短縮名の識別子です(自分で定義します)。リソースには、独自の静的アセットを持つ Hosting サイトや、同じセキュリティ ルールを共有する Realtime Database インスタンスのグループなどがあります。

デプロイ ターゲットは、複数の Hosting サイト、複数の Cloud Storage バケット、複数の Realtime Database インスタンスがある場合に便利です。デプロイ ターゲットを使用すると、Firebase CLI で、特定の Firebase リソースやプロジェクト内のリソースのグループに次のような設定をデプロイできます。

  • 各 Hosting サイトのホスティング構成
  • 各 Hosting サイト用のプロジェクト ディレクトリの静的アセット
  • 複数の Realtime Database インスタンスまたは複数の Cloud Storage バケットで共有されるセキュリティ ルール

デプロイ ターゲットを設定するには:

  1. ターゲットとする Firebase リソース、または Firebase リソースのグループに TARGET_NAME を適用します。
  2. firebase.json ファイルで、各リソースまたはリソースのグループの設定を構成する際に、関連する TARGET_NAME を参照します。

Firebase CLI コマンドfirebase deploy など)を実行すると、それぞれの TARGET_NAME と、それに関連付けられる Firebase リソースのペアが設定されます。次に、CLI によって各リソースの設定が Firebase プロジェクトに通知されます。

Firebase リソースに対してデプロイ ターゲットを設定する

Firebase CLI を使用して、Firebase リソースまたは Firebase リソースのグループに TARGET_NAME(自分で定義した短縮名の識別子)を適用します。Firebase では、以下に対してデプロイ ターゲットがサポートされています。

デプロイ ターゲットの設定はプロジェクト ディレクトリの .firebaserc ファイルに保存されるため、デプロイ ターゲットを設定する必要があるのはプロジェクトごとに 1 回だけです。

Hosting のデプロイ ターゲットを設定する

デプロイ ターゲットを作成し、TARGET_NAME を Hosting サイトに適用するには、次の CLI コマンドを実行します。

firebase target:apply TYPE TARGET_NAME RESOURCE_IDENTIFIER

パラメータは次のとおりです。

  • TYPE - 該当する Firebase リソースタイプ

    • Firebase Hosting サイトの場合は、hosting を使用します。
  • TARGET_NAME - デプロイ先である Hosting サイトの一意の名前

  • RESOURCE_IDENTIFIER - Firebase プロジェクトにリストされている Hosting サイトの SITE_ID

たとえば、Firebase プロジェクト内に 2 つのサイトmyapp-blogmyapp-app)を作成した場合は、次のコマンドを実行して、各サイトに一意の TARGET_NAME(それぞれ blogapp)を適用できます。

firebase target:apply hosting blog myapp-blog
firebase target:apply hosting app myapp-app

Cloud Storage または Realtime Database のデプロイ ターゲットを設定する

デプロイ ターゲットを作成し、TARGET_NAME を一連の Cloud Storage または Realtime Database リソースに適用するには、次の CLI コマンドを実行します。

firebase target:apply TYPE TARGET_NAME RESOURCE-1_IDENTIFIER RESOURCE-2_IDENTIFIER ...

パラメータは次のとおりです。

  • TYPE - 該当する Firebase リソースタイプ

    • Cloud Storage バケットの場合は、storage を使用します。
    • Realtime Database インスタンスの場合は、database を使用します。
  • TARGET_NAME - リソース、またはセキュリティ ルールを共有するリソースのグループの一意の名前

  • RESOURCE_IDENTIFIER - すべて同じセキュリティ ルールを共有するリソースの識別子。これは、Firebase プロジェクトにリストされる識別子です(ストレージ バケット名やデータベース インスタンス ID など)。

たとえば、3 つのリージョンの Cloud Storage バケット(すべて同じセキュリティ ルールを使用)のグループに main という TARGET_NAME を適用するには、次のコマンドを実行します。

firebase target:apply storage main myproject.appspot.com myproject-eu myproject-ja

myproject.appspot.com はデフォルト バケットの識別子であり、myproject-eumyproject-ja は Firebase プロジェクト内に追加で作成された 2 つのバケットです。

デプロイ ターゲットを使用するように firebase.json ファイルを構成する

Firebase リソースのデプロイ ターゲットを設定したら、適用されたそれぞれの TARGET_NAMEfirebase.json 構成ファイル内で参照されるようにします。

  1. Firebase リソースの TYPEhostingstoragedatabase)ごとに、構成オブジェクトの配列を作成します。
  2. 配列で、target を指定し(TARGET_NAME を使用)、関連付けられた Firebase リソースまたはリソースのグループの設定を定義します。

上述の例から続けると、Firebase プロジェクトに 2 つの Hosting サイトと 3 つの Cloud Storage バケット(同じセキュリティ ルールを共有)がある場合、firebase.json ファイルは次のようになります。

{
  "hosting": [ {
      "target": "blog",  // "blog" is the applied TARGET_NAME for the Hosting site "myapp-blog"
      "public": "blog/dist",  // contents of this folder are deployed to the site "myapp-blog"

      // ...
    },
    {
      "target": "app",  // "app" is the applied TARGET_NAME for the Hosting site "myapp-app"
      "public": "app/dist",  // contents of this folder are deployed to the site "myapp-app"

      // ...

      "rewrites": [...]  // You can define specific Hosting configurations for each site
    }
  ]
}

{
  "storage": [ {
      "target": "main",  // "main" is the applied TARGET_NAME for the group of Cloud Storage buckets
      "rules": "storage.main.rules"  // the file that contains the shared security rules
    }
  ]
}

リソースの構成が複数ある場合は、複数のデプロイ ターゲットを作成し、それぞれを firebase.json ファイル内に指定します。firebase deploy を実行すると、関連するすべてのリソースが一緒にデプロイされます。

デプロイ ターゲットの管理

デプロイ ターゲットの設定は、プロジェクト ディレクトリの .firebaserc ファイルに保存されます。プロジェクト ディレクトリのルートから次のコマンドを実行すると、プロジェクトのデプロイ ターゲットを管理できます。

コマンド 説明
firebase target 現在のプロジェクト ディレクトリのデプロイ ターゲットを一覧表示します。
firebase target:remove \
TYPE RESOURCE_IDENTIFIER
割り当てられているターゲットからリソースを削除します。
firebase target:clear \
TYPE TARGET_NAME
指定されたターゲットからすべてのリソースまたは Hosting サイトを削除します。

target:remove コマンドと target:clear コマンドは、プロジェクト ディレクトリ内の .firebaserc ファイルのデプロイ ターゲットの設定を自動的に更新します。

デプロイの前にローカルでテストする

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

コマンド 説明
firebase emulators:start プロジェクト ディレクトリの構成済みリソースをすべてエミュレートします
firebase emulators:start \
--only hosting:TARGET_NAME
指定した Hosting サイトの Hosting のコンテンツと構成のみをエミュレートします
firebase emulators:start \
--only storage:TARGET_NAME
指定した Cloud Storage のターゲットのルールファイルのみをエミュレートします
firebase emulators:start \
--only database:TARGET_NAME
指定した Realtime Database ターゲットのルールファイルのみをエミュレートします

Firebase Local Emulator Suite の構成方法と使用方法の詳細をご覧ください。

特定の Firebase リソースをデプロイする

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

コマンド 説明
firebase deploy プロジェクト ディレクトリにデプロイできるすべてのリソースのリリースを作成します
firebase deploy \
--only hosting:TARGET_NAME
指定した Hosting サイトの Hosting のコンテンツと構成のみをサイトのライブチャネルにデプロイします
firebase hosting:channel:deploy CHANNEL_ID \
--only TARGET_NAME
指定した Hosting サイトの Hosting のコンテンツと構成のみをサイトのプレビュー チャネルにデプロイします
firebase deploy \
--only storage:TARGET_NAME
指定した Cloud Storage ターゲットのルールファイルのみをデプロイします
firebase deploy \
--only database:TARGET_NAME
指定した Realtime Database ターゲットのルールファイルのみをデプロイします