Firebase App Hosting は Cloud Build を利用して、アプリケーションのソースコードを Cloud Run へのデプロイに適したコンテナ化された形式に変換します。
ビルドプロセスは、次の主要なステージで動作します。
ubuntu: ワークスペースの初期化。
preparer: アプリケーションのソースコードと構成を収集します。
pre-buildpack: Buildpack 環境を準備します。
build: 依存関係をインストールして、アプリケーションをビルドします。
publisher: 本番環境の Cloud Run コンテナを確定します。
これらの 5 つの手順は、Google Cloud コンソールの Cloud Build に表示されるビルドステップに直接対応しています。

ワークスペースの初期化
このステージは ubuntu ビルドステップに対応しています。ビルド ワークスペースを初期化し、後続のビルドステップで使用されるディレクトリに正しいファイル権限が設定されていることを確認します。
作成ツール
このステージは、ビルド前のロジックの処理を担当します。ユーザー定義の環境変数を読み取り、サニタイズして書き込みます。また、apphosting.yaml ファイルで指定されたシークレットの参照を解除して固定します。
pre-buildpack
この手順では、Cloud Native Buildpacks ライフサイクルの環境を準備します。これには、前のステージで準備した構成と環境変数を CNB ツールが想定する形式に変換するシムの実行が含まれます。
ビルド
これはビルドプロセスのコアであり、実行可能なコンテナ イメージと、ビルド構成を定義する bundle.yaml ファイルを生成します。Cloud Native Buildpacks とライフサイクル クリエイター バイナリを使用して、アプリケーションを効率的にパッケージ化します。bundle.yaml ファイルの詳細については、GitHub をご覧ください。
Buildpack は、アプリケーションのソースコードを本番環境に対応したコンテナ イメージに変換する役割を担います。Firebase App Hosting は、複数の Buildpack を連結してビルドプロセスを完了します。
- ランタイム Buildpack: 基本的な Node.js アプリケーションの実行に必要なすべてのコンポーネントが含まれ、依存関係がインストールされていることを確認します。
- Monorepo Buildpack: さまざまな monorepo シナリオを処理するように後続の Buildpack を構成します。
フレームワーク Buildpack: 正しいフレームワーク アダプタ(Angular や Next.js など)をインストールし、後続の Buildpack を準備します。
フレームワーク アダプターは、本番環境用のビルドコマンドを実行し、関連するフレームワーク固有の構成値を App Hosting が読み取れる標準形式にマッピングします。
パッケージ マネージャー Buildpack: npm、yarn、pnpm を使用して、依存関係のインストールを実行し、アプリをビルドします。
出力バンドル Buildpack: 実行コマンドを定義し、実行用の出力バンドルを準備します。
パブリッシャー
この最終段階では、アプリケーションのソースコードから抽出されたすべての情報とビルド コンテナ イメージがパッケージ化され、App Hosting バックエンドに送信されます。App Hosting バックエンドは、この情報を使用して適切な構成で Cloud Run を設定します。
ビルド クリーンアップ ポリシー
Firebase App Hosting は、自動ビルドの保持とクリーンアップのポリシーを適用します。このポリシーでは、App Hosting は過去 14 日間の成功したビルドとそれに関連付けられた Cloud Run リビジョンを保持します。また、常にロールバックできるビルドを確保するため、App Hosting は、ビルドの経過時間に関係なく、最近成功した 5 つのビルドとロールアウトを保持します。
App Hosting は、現在アクティブなトラフィック分割に含まれているビルドや、進行中のロールアウトに関連付けられているビルドを削除することはありません。
古いビルドがこれらの保持上限を超えると、内部ステータスが EXPIRED に更新されます。EXPIRED ビルドでインスタント ロールバックを実行することはできません。また、これらのビルドにロールバックするオプションは Firebase コンソールから削除されます。代わりに、同じソースをターゲットとする新しいビルドを作成(git コミット、Artifact Registry 内のコンテナ、Google Cloud Storage バケットのいずれか)して、ロールアウトする必要があります。
ビルド リソースを節約する方法の 1 つは、自動ロールアウトをトリガーする頻度を制御することです。自動ロールアウトを管理するをご覧ください。
詳細
App Hosting のビルドプロセス全体がオープンソースです。
- Buildpack コードは Google Cloud Buildpack リポジトリにあります。
- フレームワーク アダプタのコードは firebase-framework-tools リポジトリにあります。
- Cloud Native Buildpack と Cloud Build の詳細を確認する