App Hosting とその仕組みを理解する

App Hosting は、複雑な一連のバックグラウンド タスクを処理して、アプリのデプロイを簡素化します。このページでは、そのタスクフローの重要な部分について説明し、アプリのニーズに応じてフローをカスタマイズするポイントについて説明します。

フレームワーク サポート

App Hosting は、次のフレームワークで開発されたウェブアプリ向けに、構成不要のビルドとデプロイをサポートします。

  • Next.js 13 以降
  • Angular 17.2 以降

App Hosting は、リポジトリ内の package-lock.json ファイルまたはその他のロックファイルを調べて、使用しているフレームワークを特定します。ロックファイルのない Node.js アプリをデプロイしようとすると、App Hosting によるアプリのビルドと実行が失敗します。ルート ディレクトリで npm install を実行すると、package-lock.json を作成できます。

App Hosting フレームワーク アダプタには、次の 2 つの主要なロールがあります。

  1. ソースコードとフレームワーク固有の構成ファイル(next.config.js など)を解析し、アプリに構成されている動作を把握します。
  2. アプリのビルドコマンドを実行して静的アセットを生成し、本番環境用に最適化されたバージョンのアプリを作成します。

フレームワーク アダプタは、各フレームワークのデフォルトのビルド スクリプト(Next.js では next build、Angular では ng build)で最適に動作する npm run build を使用して Node.js アプリをビルドします。App Hosting はカスタム ビルドコマンドでビルドを試みますが、成功は確実に保証できません。

App Hosting リポジトリのインテグレーションの仕組み

GitHub リポジトリと App Hosting バックエンド間の重要な接続は、外部 DevOps ツール用の Google Cloud の接続プラットフォームである Developer Connect によって処理されます。App Hosting バックエンドを作成する際は、Developer Connect の UI ワークフローに沿って Firebase GitHub アプリをインストールします。このプロセスの主な手順は次のとおりです。

  1. Developer Connect に Secret Manager 管理者のロールを付与します。これにより、システムは認証情報を「シークレット」として Cloud Secret Manager に安全に保存できます。
  2. Firebase GitHub アプリに GitHub リポジトリへのアクセスを許可します。
  3. Developer Connect は、プロジェクトの Secret Manager リポジトリに専用の GitHub 認証トークンを保存します。このトークンを変更したり削除したりしないでください。

さらに、App Hosting は GitHub Check API と統合され、ロールアウトのチェックを提供します。このチェックを使用すると、GitHub でロールアウトのステータスを表示し、エラーが発生した場合にデプロイ プロセスをデバッグできます。

Firebase やその他の Google サービスとの統合

App Hosting はビルド環境とランタイム環境の両方を設定するため、Google アプリケーションのデフォルト認証情報を使用して Firebase Admin SDK を初期化できます。これにより、ビルド時とデプロイ時にバックエンドが他の Firebase プロダクトと通信できます。

App Hosting バックエンド サービス アカウント

ビルド中と実行時に、App Hosting バックエンドはサービス アカウントを使用して他の Google サービスで認証します。これらの目的のデフォルトのサービス アカウントは、Firebase プロジェクトで App Hosting を初めて有効にするときに作成されます。

firebase-app-hosting-compute@PROJECT ID.iam.gserviceaccount.com

このサービス アカウントには、デフォルトですべてのバックエンドに適用され、アプリの構築、実行、モニタリングに必要な最小限の権限セットが付与されます。また、Cloud Firestore からのデータの読み込みなどのオペレーションのために、アプリケーションのデフォルト認証情報を使用して Admin SDK を認証する権限もあります。Firebase App Hosting のロールをご覧ください。

アプリがビルド時または実行中のバックエンドから他の Google サービスとやり取りする必要がある場合、ロールを追加してデフォルトのサービス アカウントをカスタマイズできます。たとえば、アプリに Vertex AI の権限が必要な場合は、roles/aiplatform.user または関連するロールの追加が必要になることがあります。

主な用語と定義

  • バックエンド: ウェブアプリをビルドして実行するために App Hosting が作成するマネージド リソースのコレクション。
  • ロールアウト: git commit にリンクされたライブアプリの特定のバージョン。
  • ライブブランチ: 公開 URL にデプロイされる GitHub リポジトリのブランチ。多くの場合、機能ブランチや開発ブランチがマージされるブランチです。

既知の問題と制限事項

App Hosting のプレビュー版には既知の制限事項がいくつかあります。

  • 画像の最適化はまだ利用できません。
  • 場合によっては、App Hosting バックエンドがアプリの URL で Intermittent connection error メッセージを返すことがあります。今後のリリースで修正される予定です。
  • CDN キャッシュが 60 秒に制限されるようにキャッシュ ヘッダーが変更されています。将来的に、App Hosting がデプロイ時にキャッシュを迅速にパージできるようになると、この制限は解除されます。
  • キャッシュに保存されていない静的ファイルは Cloud Run から提供されます。今後のリリースでは、パフォーマンス向上のため、App Hosting オリジンに保存され、提供されます。
  • 今後のリリースで、ワイルドカード サブドメインをカスタム ドメインとして使用できるようになる予定です。
  • App Hosting SKU が Firebase コンソールのバックエンドの使用状況ページに表示されない場合があります。今後のリリースで利用できるようになる予定です。
  • バックエンドの作成時に Firebase コンソールで「ビルドが見つからないため無効です」というエラーが断続的に表示されることがあります。
  • root\_directory が Firebase コンソールと CLI のどちらで構成されているかにかかわらず、ネストされた package.json ファイルを含むプロジェクトは現在サポートされていません。今後のリリースで修正が提供される予定です。
  • 現在、同じプロジェクト内のすべてのバックエンドが GitHub 組織/アカウントを共有しています。その組織/アカウントの異なるリポジトリに接続できます。異なる GitHub アカウントに接続するバックエンドを作成するには、別々のプロジェクトに配置します。
  • 現時点では、us-central1 リージョンのみがサポートされています。