Next.jsには画像最適化のための専用コンポーネントであるImage
が用意されていますが、next export
による静的サイト生成(SSG)を行う場合には、このImage
が使用できません。そのため、代わりに標準のimg
タグを使う必要があります。
Image
が使えないのか?Next.jsのImage
コンポーネントは、画像を動的に最適化するために内部でNext.jsサーバーを利用しています。しかし、next export
ではすべてのページが完全な静的HTMLとして書き出されるため、サーバー側の最適化処理が動作せず、画像の読み込みが失敗することがあります。
このため、静的エクスポートするサイトでは、Image
ではなくimg
タグを使用して、直接画像を表示する方法が推奨されます。
img
タグの使用1export default function SampleImage() {
2 return (
3 <img src="/images/sample.jpg" alt="サンプル画像" width="600" height="400" />
4 );
5}
6
画像ファイルはpublic
ディレクトリ内に配置し、パスは/images/sample.jpg
のように指定します。
img
タグの使用自体に問題はありませんが、eslint-plugin-jsx-a11y
などを導入している場合、alt属性の指定が無いと警告が出ることがあります。アクセシビリティの観点からもalt
属性は必ず指定しましょう。
Next.jsが提供するImage
に依存しない場合、設定を明確にしておくことで、チーム開発でも混乱を防げます。たとえば、ESLintでImage
使用を強制しないようにルールを無効化することができます。
1{
2 "rules": {
3 "@next/next/no-img-element": "off"
4 }
5}
6
これは.eslintrc.json
などのESLint設定ファイルに記述します。
next export
を使用するSSGサイトではImage
が使えませんimg
タグを使って画像を表示しましょうpublic
フォルダに配置し、絶対パスで指定しますimg
使用への警告を無効化することも可能です