明示的に
images.unoptimized
を false に設定するか、カスタムImage
Loader.を使用しない限り、App Hostingでは組み込みのNext.js image
optimization
はデフォルトで無効になっています。
Image Processing Firebase Extension を使用して Next.js グローバル イメージローダーを構成すると、 App Hosting 上の Next.js アプリでオンデマンドの画像最適化と配信が可能になります。App Hosting
前提条件
- Firebase プロジェクトと App Hosting バックエンドがある。
- Cloud Storage がプロジェクトで有効になっている。
- Cloud Functions for Firebase がプロジェクトで有効になっている。
拡張機能をインストールする
Firebase Extensions Hub で Image Processing Extension に移動し、[Install in Firebase Console] を選択します。画面上の手順に沿って操作します。
ローカル イメージの最適化を構成する(省略可)
この拡張機能を使用して最適化するローカル イメージをアプリケーションで使用する場合は、拡張機能のインストール プロセスで [Hostname] パラメータを構成する必要があります。
拡張機能の構成中: [拡張機能を構成する] ステップに到達したら、[Hostname] パラメータを見つけます。
ホスト名を設定する: Firebase App Hosting バックエンドのデフォルト ドメインを入力します。通常、このドメインは
.hosted.appで終わります。
インストールが完了すると、Image Processing API が 関数として Cloud Functions にデプロイされます。Functions dashboard に移動し、 Firebase コンソールの Image Processing API のトリガー URL をコピーします。
カスタム イメージローダーを設定する
最適化されたすべての image component にデプロイされた Image Processing API を使用する image loader を作成します。最適化として、Next.js アプリケーションと同じ Firebase App Hosting ドメインで提供され、同じグローバル CDN の背後でキャッシュされるように書き換えます。
まず、次のフィールドを
next.config.js
ファイルに追加します。
// @ts-check
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
loader: "custom",
loaderFile: "./loader.js",
},
async rewrites() {
return [
{
source: "/_fah/image/:path*",
destination:
"<CLOUD_FUNCTIONS_URL>/:path*",
},
];
},
}
module.exports = nextConfig;
次に、ルート ディレクトリに次の内容の loader.js ファイルを作成します。
"use client"
export default function myImageLoader({ src, width, quality }) {
if (process.env.NODE_ENV === "development") {
return src;
}
const operations = [
{
operation: "input",
type: "url",
url: src,
},
{ operation: "resize", width: width },
{ operation: "output", format: "webp", quality: quality || 75 },
];
const encodedOperations = encodeURIComponent(JSON.stringify(operations));
return `/_fah/image/process?operations=${encodedOperations}`;
}
これらの変更を含む commit を作成し、ライブブランチに push します。 次に、App Hosting のロールアウトが完了するまで待ちます。