🔥

Next.js × Firebase Hosting でサイトを公開する【動的サイト編】

2024/11/23に公開

Reactを使ってWebアプリを公開してみたい! というモチベーションでFirebase Hoistingを使ってデプロイまで行いました。

Firebase Hostingで公開する基本的な手順はこちら↓の記事をご参考ください。
https://zenn.dev/tonokokko/articles/393e71b57662f2

今回の記事ではApp routerを使った動的パスをFirebase Hostingで公開していきます。

ちなみに作成したWebアプリはこちらです↓
https://bubblepopper.click/

はじめに

App routerでは次のようにフォルダ名を"[]"で囲んだ名前をつけることで、動的なURLでページを作成できます。

src/
├── app/
│   │  
│   ├── sample/
│   │   └── [id]/
│   │       └── page.tsx
│   ├── globals.css
│   ├── layout.tsx
│   └── page.tsx

フォルダ構成がそのままURLに対応しているイメージです。
例えば、

  • https://****.com/sample/SomeID/

というようなURLでアクセスすると、「id = "SomeID"」というパラメータに応じたページを動的に作成して表示することができます。

しかし、URLを解析して表示するデータを変更するには、「サーバー側がページを作成してクライアントに提供する必要がある」→ 静的サイトのホスティングでは不十分です。

ということで、今回はFirebase Hoistingでのサーバーサイドレンダリング(SSR)対応を実施しました。
https://firebase.google.com/docs/hosting/frameworks/nextjs?hl=ja

前提

  • Windows環境での解説です。
  • firebase-tools:13.24.1
  • Node.js:v20.17.0
  • Node.js の導入などは完了しており、Next.js開発に必要な環境は整っている所からのスタートです。
  • Firebaseのプロジェクト作成やHostingの基本設定は完了している前提です。

手順

  1. Firebaseのプランのアップグレード

firebaseのプランが無料プラン(Spark)の場合は有料プラン(Blaze)にアップグレードします。
既に有料プランの場合は不要です。

有料プランでも無料枠に収まる場合は請求は発生しません。
が、私の場合は毎日3円ほど請求が来ています……。

料金周りは仕様変更の可能性もあるので、詳細は公式サイトをチェック!
https://firebase.google.com/docs/projects/billing/firebase-pricing-plans?hl=ja
2. Firebase CLI で、ウェブ フレームワークのプレビューを有効化

プレビュー機能なので、デフォルト無効になっていました。

firebase experiments:enable webframeworks

  1. Firebase Hostingの初期化
firebase init hosting

いくつか設定を聞かれるので答えていきます。


? Detected an existing Next.js codebase in the current directory, should we use this? (Y/n) 

→ Next.jsのコードがあるけどこれを使う? と聞かれています。
作成しているNext.jsのプロジェクトを使うので「Yes」でいきます。


? In which region would you like to host server-side content, if applicable?
> us-central1 (Iowa)
  us-east1 (South Carolina)
  us-west1 (Oregon)
  asia-east1 (Taiwan)
  europe-west1 (Belgium)

→ サーバーの場所を選べるようになっていました。前やった時はこんな親切じゃなかったような……。
どこでもいいですが、とりあえず日本に近い台湾(asia-east1)を選びます。


  1. firebaseのダウングレード

必要な人だけ。

自分の場合はエラーが発生したので、ダウングレードを実施しました。
おそらくサーバー側のNext.jsの依存関係の影響かと思います。

npm install firebase@10.14.1

  1. デプロイ

デプロイします。

サーバー側のFunctionもデプロイしているからか、静的サイトのデプロイに比べて少し時間がかかります。

firebase deploy

終わりに

簡単にサーバーサイドレンダリングの設定でホスティングすることができました!

ただ、動的サイトの場合はFirebaseが推奨する「App Hosting」へ移行したほうが良いかもです。
今は大丈夫でも、いつ梯子を外されるかわからないですしね……。

とにもかくにも、お手軽にホスティングができることは間違いないので、Firebase Hostingは便利でした。

Discussion