パフォーマンス無関心で作ったサイトのパフォーマンスチューニング③ FirebaseでNextjsをhosting(ImageタグとSSG併用難しい)
はじめに
こんにちわ!こんばんわ!ご観覧ありがとうございます。
定期的に雑色な記事を投稿します。(タイトルは記事のメインの内容にしてますが)
基本的には抱えている問題を改善し、改善方法を記事にしてアップしようと考えています。
お題と経緯
作成した静的サイトのパフォーマンスをチューニングします。
経緯ですが、話すと長いので箇条書きでまとめます。
- 案件をいただき静的サイトを作成した
- 一時的にデプロイし公開することが急務だった
- 静的サイトに紐づくプロジェクトがそろそろアクティブになる
やばい!チューニングしないと!
ということで徐々にパフォーマンスが良くなるよう修正していきます。
使用した技術
Category | Technology Stack |
---|---|
Frontend | Nextjs,React,Typescript |
Backend | Typescript,Node,CloudFunction |
Database | Firestore |
Design | XD |
前回の内容
前回記事
パフォーマンス無関心で作ったサイトのパフォーマンスチューニング② NextjsのImageタグが便利 - zare926のブログ
要点をまとめると、HTMLのimgタグでsrcsetなどをセッティングするより、Nextjsを使っているならImageコンポーネントに任せちゃおうって話でした。
今回の内容
色々と経緯はあるんですが、お題としてはFirebaseのHostingを使用してNextjsをSSGでデプロイする方法です。
今回の話はあくまで経験した限りの情報なので、ご留意を!
そんなに多くは無いですが、DBからデータをfetchを取得して表示する項目も存在するので、SSGにしてパフォーマンスを良くしようとしました。
最初に注意点
Nextjsのバージョンは"next": "12.2.5"
でSSG(getStaticProps)とImageコンポーネントを使用しFirebase Hostingを行なっていました。
Nextjs13でImageコンポーネントの仕様が少し変わったので、12→13にバージョンをアップデートしました。
そして調整を終え、いつも通りデプロイしてみると...
画像が表示されなくなりました!!!
調べてみると、元々SSGとnextjsのImageコンポーネントは併用ができないそうです。
ですが、Firebaseのドキュメントにはサポートされていると書いてあるし、そして今までできていた。
ドキュメント
Next.js を統合する | Firebase Hosting
何通りか試しては見たものの、なかなかうまくいかず、調べてみた記事やライブラリについての情報だけ載せておきます。
next/imageとSSG | エビスコム - EBISUCOM
NextのImageコンポーネントはオンデマンドで画像を最適化するので、それ用のサーバーを立てる必要があるようですね。
現状少なくとも"next": "12.2.5"
はこれから説明するデプロイ方法でSSGとImageコンポーネントを併用できそうです。
デプロイ手順
まずはFirebaseCLIをインストールしてください
$ npm install -g firebase-tools
すでにインストールされていますが、Nextのホスティングに対応しているバージョンが、ドキュメントだと11.14.2 以降なので、updateしてください。
$ npm i -g firebase-tools to update
続いてFirebaseCLIのフレームワークプレビューを有効にします。
$ firebase experiments:enable webframeworks
次にホスティングの設定をします。
$ firebase init hosting
この後は対話形式です。
ドキュメントに一連が載ってますのでご参考にしてください。
Next.js を統合する | Firebase Hosting
基本的にこの設定が有効になっていれば、NextjsのソースコードからgetStaticPropsやgetStaticPathsを読み取ってくれて、必要なCloudFuntionsを自動でデプロイしてくれます。
最後に
やっぱりデプロイとか開発環境と本番環境の差異って出ますよね。
いつもびびってます。
この件でNextのImageコンポーネントについて少しは知れたので良かったとします。
ここまで見てくださった方、ありがとうございました!