デプロイ ターゲットは、Firebase プロジェクト内の Firebase リソースの短縮名の識別子です(自分で定義します)。リソースには、独自の静的アセットを持つ Hosting サイトや、同じセキュリティ ルールを共有する Realtime Database インスタンスのグループなどがあります。
デプロイ ターゲットは、複数の Hosting サイト、複数の Cloud Storage バケット、複数の Realtime Database インスタンスがある場合に便利です。デプロイ ターゲットを使用すると、Firebase CLI で、特定の Firebase リソースやプロジェクト内のリソースのグループに次のような設定をデプロイできます。
- 各 Hosting サイトのホスティング構成
 - 各 Hosting サイト用のプロジェクト ディレクトリの静的アセット
 - 複数の Realtime Database インスタンスまたは複数の Cloud Storage バケットで共有されるセキュリティ ルール
 
デプロイ ターゲットを設定するには:
- ターゲットとする Firebase リソース、または Firebase リソースのグループに 
TARGET_NAMEを適用します。 firebase.jsonファイルで、各リソースまたはリソースのグループの設定を構成する際に、関連するTARGET_NAMEを参照します。
Firebase CLI コマンド(firebase deploy など)を実行すると、Firebase CLI によって、それぞれの 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を使用します。 
- Firebase Hosting サイトの場合は 
 TARGET_NAME - デプロイ先である Hosting サイトの一意の名前
RESOURCE_IDENTIFIER - Firebase プロジェクトにリストされている Hosting サイトの
SITE_ID
たとえば、Firebase プロジェクト内に 2 つのサイト(myapp-blog、myapp-app)を作成した場合は、次のコマンドを実行して、各サイトに一意の TARGET_NAME(それぞれ blog と app)を適用できます。
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を使用します。 
- Cloud Storage バケットの場合は 
 TARGET_NAME - リソース、またはセキュリティ ルールを共有するリソースのグループの一意の名前
RESOURCE_IDENTIFIER - すべて同じセキュリティ ルールを共有するリソースの識別子。これは、Firebase プロジェクトにリストされる識別子です(ストレージ バケット名やデータベース インスタンス ID など)。
たとえば、3 つのリージョンの Cloud Storage バケット(すべて同じセキュリティ ルールを使用)のグループに main の TARGET_NAME を適用するには、次のコマンドを実行します。
firebase target:apply storage main myproject.firebasestorage.app myproject-eu myproject-ja
myproject.firebasestorage.app はデフォルト バケットの識別子であり、myproject-eu と myproject-ja は Firebase プロジェクト内に追加で作成された 2 つのバケットです。
デプロイ ターゲットを使用するように firebase.json ファイルを構成する
Firebase リソースのデプロイ ターゲットを設定したら、適用されたそれぞれの TARGET_NAME が firebase.json 構成ファイル内で参照されるようにします。
- Firebase リソースの 
TYPE(hosting、storage、database)ごとに、構成オブジェクトの配列を作成します。 - 配列で、
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 \
       | 
      割り当てられているターゲットからリソースを削除します。 | 
firebase target:clear \
       | 
      指定されたターゲットからすべてのリソースまたは Hosting サイトを削除します。 | 
target:remove コマンドと target:clear コマンドは、プロジェクト ディレクトリ内の .firebaserc ファイルのデプロイ ターゲットの設定を自動的に更新します。
デプロイの前にローカルでテストする
プロジェクト ディレクトリのルートから、次のいずれかのコマンドを実行します。
| コマンド | 説明 | 
|---|---|
firebase emulators:start
       | 
      プロジェクト ディレクトリの構成済みリソースをすべてエミュレートします | 
firebase emulators:start \ | 
      指定した Hosting サイトの Hosting コンテンツと構成のみをエミュレートします | 
firebase emulators:start \
       | 
      指定した Cloud Storage ターゲットのルールファイルのみをエミュレートします | 
firebase emulators:start \
       | 
      指定した Realtime Database ターゲットのルールファイルのみをエミュレートします | 
Firebase Local Emulator Suite の構成と使用の詳細をご覧ください。
特定の Firebase リソースをデプロイする
プロジェクト ディレクトリのルートから、次のいずれかのコマンドを実行します。
| コマンド | 説明 | 
|---|---|
firebase deploy
       | 
      プロジェクト ディレクトリにデプロイできるすべてのリソースのリリースを作成します | 
firebase deploy \
       | 
      指定した Hosting サイトの Hosting コンテンツと構成のみをサイトのライブチャネルにデプロイします | 
firebase hosting:channel:deploy CHANNEL_ID \ | 
      指定した Hosting サイトの Hosting コンテンツと構成のみを、サイトのプレビュー チャネルにデプロイします | 
firebase deploy \
       | 
      指定した Cloud Storage ターゲットのルールファイルのみをデプロイします | 
firebase deploy \
       | 
      指定した Realtime Database ターゲットのルールファイルのみをデプロイします |