第7章

Web版をビルドして公開する

Flutter Webのreleaseビルドを確認し、Firebase Hostingのプレビューを経て本番へデプロイします。

この章で学ぶこと

  • Flutter Webのrelease成果物を作る
  • Firebase Hostingの接続先と公開先を確認する
  • プレビューURLから本番へ段階的に公開する

1. releaseビルドを作る

プロジェクトのルートで実行します。

flutter clean
flutter pub get
flutter build web --release --dart-define=APP_ENV=prod

成果物はbuild/webに作られます。ソースコードのlibフォルダをアップロードするのではありません。Flutter公式のWeb公開ガイド

ビルド時の設定は成果物へ組み込まれます。公開後にサーバーの環境変数だけを変えても、既に生成されたFlutter Webの接続先は変わりません。

ローカルのHTTPサーバーで成果物を確認します。file://でindex.htmlを直接開く方法では、Webアプリの動作を正しく確認できないことがあります。

firebase emulators:start --only hosting --project idea-pocket-prod

表示されたURLで、ログイン、保存、再読込、直接URL、スマートフォン幅を確認します。

2. Hostingを初期設定する

初回だけ、対象Project IDを指定して設定します。

firebase login:list
firebase projects:list
firebase init hosting --project idea-pocket-prod

主な回答は次のとおりです。CLIの版で表示は変わることがあります。

質問 回答例
public directory build/web
single-page app Yes
GitHubの自動デプロイ 最初はNo
既存index.htmlの上書き No

firebase.jsonでpublicとSPAのrewriteを確認します。

{
  "hosting": {
    "public": "build/web",
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "rewrites": [{ "source": "**", "destination": "/index.html" }]
  }
}

FirestoreやFunctionsなど既存設定がある場合、ファイル全体をこの例で上書きせず、hosting部分を統合します。

3. プレビューへ公開する

本番URLを置き換える前に、期限付きの確認URLを作ります。

firebase hosting:channel:deploy release-check \
  --expires 1d \
  --project idea-pocket-prod

PowerShellでは1行にしてもかまいません。プレビューURLでも、ビルドに含まれたFirebase本番環境へ接続します。確認用URLだからデータも自動で分離されるわけではありません。

4. 本番へデプロイする

確認者がビルド番号とプレビューURLを承認したら公開します。

firebase deploy --only hosting --project idea-pocket-prod

完了後、表示されたHosting URLで再度スモークテストを行います。

  • トップページと直接URLを開く。
  • 新規ログインと既存ログインを試す。
  • データを1件作成し、再読込後も残ることを確認する。
  • ブラウザーのConsoleとNetworkに失敗がないか見る。
  • プライバシーポリシーと問い合わせ先を開く。

5. 更新と切り戻しを記録する

コードを直しただけでは公開物は変わりません。毎回、テスト、ビルド、プレビュー、本番デプロイを行います。

flutter test
flutter build web --release --dart-define=APP_ENV=prod
firebase hosting:channel:deploy release-check --expires 1d --project idea-pocket-prod
firebase deploy --only hosting --project idea-pocket-prod

Firebase Consoleのリリース履歴から以前のHostingリリースへ戻せます。ただし、FirestoreのデータやSecurity Rules、FunctionsはHostingの切り戻し対象ではありません。データ形式を変えるリリースは、旧版との互換性も設計します。

うまくいかないとき

症状 確認すること
Firebaseの初期ページ hosting.publicと再ビルド
白い画面 Console、base URL、Firebase初期化
ローカルだけ動く 承認済みドメイン、CORS、App Check、Rules
別環境のデータが見える APP_ENVと生成したoptions、Project ID
変更が反映されない build/webの時刻、公開URL、キャッシュ
権限エラー CLIのGoogleアカウントとIAMロール

やってみよう

プレビューURLで別の人に公開判定表を確認してもらい、承認したコミットIDと本番デプロイ日時をリリース記録へ残してください。