next.js で実装したアプリケーションを、Firebase にのせたいという場合、Cloud Functions, Hosting を使って実現できます。
next.js 公式リポジトリの examples にもあるので、そのとおりにすれば良いでしょう。
今回は、後から Firebase を使用するように切り替える場合の作業ログを残します。
npx create-next-app --example with-firebase-hosting with-firebase-hosting-app
するなりして、この example の雛形から始めるのが早い。
https://github.com/vercel/next.js/blob/canary/examples/with-firebase/
この場合は、npm run deploy
するだけ。
この example を使うと、npm run deploy
でデプロイする様になっている。firebase deploy
ではないので注意
with-firebase-hosting の内容から差分を適用するのが良い。
https://github.com/vercel/next.js/blob/canary/examples/with-firebase-hosting/package.json
を参考に、deploy に関する部分を移植
functions の設定項目として engines
, main
を追加。
...
"engines": {
"node": "10"
},
"main": "firebaseFunctions.js",
...
scripts
に serve, shell, deploy, logs を追加。
"scripts": {
...
"serve": "npm run build && firebase emulators:start --only functions,hosting",
"shell": "npm run build && firebase functions:shell",
"deploy": "firebase deploy --only functions,hosting",
"logs": "firebase functions:log"
}
dependencies
, devDependencies
に firebase 関連のものがなければ追加
"dependencies": {
"firebase-admin": "^8.9.0",
"firebase-functions": "^3.3.0",
...
},
"devDependencies": {
"firebase-functions-test": "^0.1.6",
"firebase-tools": "^8.0.1"
...
}
}
npm ライブラリを追加したので、一度 npm install
しておく。
ディレクトリ構成としては、nextjs のアプリケーションを /src
に配置し、さらに /public
を用意しておくこと。
firebase.json
firebaseFunctions.js
src/next.config.js
public/.gitignore
npm run serve
でローカルサーバ立ち上げ
npm run deploy
でデプロイ
ローカルサーバは遅いのであまりおすすめできない。
割と手軽にできて良いですね。
しかし、Google Cloud Functions は、しばらくアクセスがないと初回起動で時間がかかってしまうので、あまりアクセスがないサイトは向いていないかもしれませんね。
そういうサイトだから Firebase 使いたいというケースもあるでしょうけども。
まあ、カジュアルにサクッと立てたいというケースなら、よほどのことがない限り now
(vercel
) の方が良いと思います。