# Next.js の Image コンポーネント
Next.js プロジェクトでは、標準の HTML <img>
要素から <Image>
コンポーネントに切り替えることが推奨されています。
Using
<img>
could result in slower LCP and higher bandwidth. Consider using<Image>
from next/image to automatically optimize images. This may incur additional usage or cost from your provider. See: https://nextjs.org/docs/messages/no-img-element
画像の読み込み時に発生してしまう Cumulative Layout Shift (CLS) を防ぐために、あらかじめ Width と Height を指定し画像が表示される領域を確保しておく必要があります。
# なぜ next/image の Image コンポーネントを使う
画像の読み込みを最適化し、パフォーマンスを向上させることができるメリット
- 自動画像最適化
画像が自動的に最適化され、ユーザーに対して高速に読み込む - レスポンシブ画像
異なる画面サイズに適応するように画像が自動的に調整 - Lazy Loading 対応
遅延読み込みで初期読み込み時間が短縮され、ページのパフォーマンスが向上 - レイアウトシフトの防止
画像の幅と高さを指定することで、レイアウトシフトを防ぎ、ページの安定性を向上 - 最新の画像フォーマット
WebP などの最新の画像フォーマットをサポートし、画像サイズを小さく保つ - 外部画像のドメインチェックと最適化
next.config.js
に外部ドメインを指定することで、外部画像も最適化 - 優先度の設定、レスポンシブ対応
priority や layout プロパティを使用して、読み込み優先度とレスポンシブ対応設定ができる ï
# Next.js の Image コンポーネント使用例
import Image from "next/image";
<Image
src="/path/to/image.jpg"
alt="画像の説明"
width={800} // 幅をピクセル単位で指定
height={600} // 高さをピクセル単位で指定
layout="responsive" // レスポンシブレイアウトを指定
placeholder="blur" // ぼかし効果をプレースホルダーとして使用
quality={75} // 画像の品質を指定(0-100)
/>;
# Error: Invalid src prop
Error: Invalid src prop (https://tailwindui.com/img/logos/mark.svg?color=indigo&shade=600) on next/image, hostname "tailwindui.com" is not configured under images in your next.config.js
See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host
以下のコードは、Tailwind のロゴを読み込む際にエラーが発生します。
<Image
className="h-8 w-auto"
src="https://tailwindui.com/img/logos/mark.svg?color=indigo&shade=600"
alt=""
width={32}
height={32}
/>
</a>
原因
Next.js の<Image>
コンポーネントで外部ドメインから画像を読み込む際に、そのドメインが next.config.js
に設定されていないためです。
解決方法
next.config.js
ファイルに外部ドメインを設定
// next.config.js
module.exports = {
images: {
domains: ["tailwindui.com"],
},
};
詳細な remotePatterns 設定
必要に応じて、remotePatterns を使用して細かく設定できます。
// next.config.js
module.exports = {
images: {
remotePatterns: [
{
protocol: "https",
hostname: "**.hapicode.com",
port: "",
},
],
},
};