Next.jsでの画像の最適化と表示を徹底解説!Imageコンポーネント実践ガイド

Next.jsのImageコンポーネントは、画像の自動最適化によってWebサイトのパフォーマンスとCore Web Vitalsを改善する上で不可欠な機能です。

この記事では、基本的な使い方からパフォーマンスを最大化する実践的な設定、さらには外部CDNと連携した高度な最適化まで、フロントエンドエンジニアが知るべき知識を網羅的に解説します。

この記事のポイント

  • Next.jsのImageコンポーネントは、画像の自動最適化、遅延読み込み、レスポンシブ対応を標準で提供し、Webサイトのパフォーマンスを向上させます。
  • srcとaltの指定、および適切な寸法設定(width/heightやfill)は、レイアウトシフトを防ぎアクセシビリティを確保する上で不可欠です。 
  • Core Web Vitals、特にLCP(最大コンテンツの描画時間)の改善には、ファーストビューの画像にpriority属性を設定することが重要です。
  • next.config.jsで外部ドメインを登録することで、CMSや外部ストレージ上の画像も安全に最適化できます。
  • 高度な最適化や動的な画像変換には、Imgixなどの外部画像CDNとカスタムローダーを連携させる方法が有効です。

Webサイトの成果を最大化させるミッションをお持ちの方にオススメ資料

Webページの転送量の約65%は実は画像です。ですが、多くが未最適化のまま配信されています。そのため、「画像で損をしている」状態になっています。Webサイトの画像を最適化する手法や事例について、本資料を無料ダウンロードしてぜひご活用ください。
ホワイトペーパー表紙

↓画像最適化の手法や事例を無料で入手↓

目次

Next.js Imageコンポーネントの基本実装とProps解説

Next.jsのImageコンポーネントを使いこなすためには、基本的な使い方と主要なプロパティ(Props)の役割を正確に理解することが第一歩です。このセクションでは、コンポーネントをプロジェクトに導入するための最小構成のコードから、レスポンシブ対応や外部サービス連携までを解説します。

Imageコンポーネントの基本的な使い方と最小構成

next/imageの利用は、コンポーネントをインポートし、必須プロパティを指定するだけで始められます。もっとも基本的な使い方は、ローカルにある画像ファイルを静的にインポートして表示する方法です。これにより、Next.jsはビルド時に画像のメタデータ(幅、高さ)を自動で取得し、レイアウトシフトを防ぎます。

Props名説明必須/任意主な効果使用例/備考
src表示する画像のソースパスまたはURL必須画像の表示方法ローカル画像パス、外部URL
alt画像が表示されない場合の代替テキスト必須アクセシビリティ向上、SEOスクリーンリーダー対応
width画像の幅(ピクセル単位)条件付き必須レイアウトシフト防止外部URL画像の場合必須。ローカル画像は自動取得
height画像の高さ(ピクセル単位)条件付き必須レイアウトシフト防止外部URL画像の場合必須。ローカル画像は自動取得
priority画像を最優先で読み込むか指定任意LCP改善、プリロードファーストビューのヒーロー画像にtrueを指定
fill親要素のサイズに合わせて画像を埋める任意柔軟なレスポンシブ対応親要素にposition: relativeとサイズ指定が必要。sizes の指定が推奨 
sizes メディアクエリごとの画像表示幅を指定 条件付き必須(fill 使用時は強く推奨) 不要な高解像度画像の読み込み防止、LCP改善 (max-width: 768px) 100vw, 50vw など 
style={{ objectFit }}親要素内での画像の表示方法任意画像のトリミング/フィット‘cover’, ‘contain’などCSSと同様
loaderカスタム画像ローダー関数を指定任意外部CDN連携Imgix, Cloudinaryなど

以下は、ローカル画像を表示するための最小構成のコード例です。

import Image from ‘next/image’;
import profilePic from ‘../public/me.png’;

export default function Page() {
return (
<Image
src={profilePic}
alt=”著者の画像”
// widthとheightは自動で設定されます
/>
);
}


このように、import文で画像を直接読み込むだけで、Next.jsが必要な最適化をバックグラウンドで実行します。

必須Propsと主要オプション(src, alt, width, height, priority)

Imageコンポーネントを正しく機能させるには、いくつかのプロパティを理解し、適切に設定する必要があります。特にsrc、alt、width、heightは、画像表示とアクセシビリティ、パフォーマンスの観点から極めて重要です。

プロパティ説明
src表示する画像のソースを指定します。静的にインポートした画像オブジェクトか、publicディレクトリからのパス文字列、または外部URLを指定します。
alt画像が表示されない場合や、スクリーンリーダーが使用された際に読み上げられる代替テキストです。アクセシビリティの観点から必須です。
width / height画像の寸法をピクセル単位で指定します。静的インポートでない場合(例: 外部URLの画像)は必須です。この指定により、画像が読み込まれる前に表示領域が確保され、レイアウトシフト(CLS)を防ぎます。
priorityこのプロパティをtrueに設定すると、その画像がLCP(Largest Contentful Paint)の対象である可能性が高いとNext.jsに伝えます。これにより、画像の遅延読み込みが無効化され、プリロードタグが自動で追加され、最優先で読み込まれます。ファーストビューに表示されるヒーローイメージなどに設定することが推奨です。

レイアウト設定による柔軟な表示制御

親要素に合わせて画像をレスポンシブに表示させる場合、fill プロパティとCSSを組み合わせるのが基本です。 fill を指定すると、画像は親要素いっぱいに広がるため、width と height の指定は不要になります。この際、親要素には position: relative や寸法(幅・高さ)を明示する必要があります。

また、CSSの objectFit や objectPosition を併用してトリミング方法(例: cover, contain)を制御します。 さらに、fill 使用時は適切な画像サイズをダウンロードさせるために sizes 属性の指定が不可欠です。 

<div style={{ position: ‘relative’, width: ‘100%’, height: ‘400px’ }}>

  <Image

    src=”/hero-image.jpg”

    alt=”ヒーローイメージ”

    fill

    sizes=”(max-width: 768px) 100vw, 1200px”

    style={{ objectFit: ‘cover’ }}

  />

</div>

このアプローチにより、さまざまな画面サイズに対して柔軟な画像レイアウトを構築できます。

画像の外部ホスティングサービス連携とloaderプロパティ

CMSや外部のストレージサービスから画像を取得して表示する場合、next.config.jsファイルにドメインを登録する必要があります。これは悪意のある外部ドメインからの画像利用を防ぐためのセキュリティ措置です。

// next.config.js
module.exports = {
images: {
remotePatterns: [
{
protocol: ‘https’,
hostname: ‘assets.example.com’,
port: ”,
pathname: ‘/account123/**’,
},
],
},
};

また、loaderプロパティを使用すると、Next.jsの組み込み画像最適化機能の代わりに、外部の画像CDNを利用できます。これにより、より高度な画像処理やグローバルな高速配信が実現できます。

プロダクション環境で役立つNext.js画像の最適化設定と注意点

Next.jsのImageコンポーネントはデフォルトで多くの最適化を行いますが、プロダクション環境でその性能を最大限に引き出すためには、いくつかの設定や挙動を理解しておくことが重要です。画像サイズ、フォーマット、キャッシュ戦略を適切に管理することで、ユーザー体験を向上させ、インフラコストを抑制できます。このセクションでは、実運用で直面する可能性のある課題と実践的な設定について解説します。

画像サイズの最適化とsrcsetの自動生成

Imageコンポーネントは、next.config.jsのimageSizesやdeviceSizesで定義されたブレークポイントに基づき、ビューポートに応じた複数のサイズの画像を自動生成します。生成された画像へのパスはsrcset属性に設定され、ブラウザは最適なサイズのみをダウンロードします。これにより、不要なデータ転送量を削減し、特にモバイル環境での表示速度を改善します。

WebP/AVIFなどのモダンフォーマットへの変換とブラウザサポート

Next.jsの画像最適化APIは、リクエスト元のブラウザがサポートしている場合、画像を自動的にWebP形式へ変換します。さらに、より圧縮率の高いAVIF形式を有効化したい場合は、next.config.js に formats: [‘image/avif’, ‘image/webp’] を明示的に設定します。ブラウザがこれらをサポートしない場合でも、元の形式(JPEGやPNGなど)がフォールバックとして提供されます。 

キャッシュ戦略とImageコンポーネントの挙動

最適化された画像は、Next.jsサーバーのキャッシュディレクトリに保存されます。一度生成された画像は、次回以降のリクエストではキャッシュから直接配信され、サーバーの負荷が軽減されます。このキャッシュは、HTTPヘッダーのCache-Controlによって制御され、デフォルトでは長期間キャッシュされる設定になっています。元画像が更新された場合でも、URLが変わらない限りキャッシュが使用され続ける可能性があるため、更新される画像にはユニークなURLを付与する戦略が有効です。

複雑な画像構造への適用と代替手段

Next.jsのImageコンポーネントは、コンテンツとしての画像には最適ですが、背景画像や小さなアイコンなどには不向きです。装飾目的の画像には、従来通りのCSSで指定する方法や、SVGを直接インライン展開する方法が適しています。状況に応じて最適な技術を選択することが重要です。

LCP改善に直結!Next.jsにおける画像表示パフォーマンス計測と改善戦略

Webサイトの体感速度を測る上で、LCP(Largest Contentful Paint)は重要な指標です。LCPは、ページの主要コンテンツがユーザーに見えるようになるまでの時間を表し、ヒーローイメージなどの大きな画像が対象となります。Next.jsのImageコンポーネントを正しく活用することは、このLCPスコアを改善する鍵となります。

Core Web VitalsとLCPへの影響

LCPは、Core Web Vitalsの中でもユーザーが「このページは速い」と感じるかどうかに直接影響します。最大の面積を占める画像やテキストブロックがLCPの対象となり、画像の読み込みが遅れると、LCPの値は悪化します。したがって、特にファーストビューに表示される画像の読み込みを高速化することが、LCP改善の核心です。

Next.js ImageコンポーネントがLCPを改善する仕組み

Next.jsのImageコンポーネントは、LCPを改善するための強力な機能を内蔵しています。特にpriorityプロパティをtrueに設定すると、Next.jsはその画像が重要であると判断し、自動的にLazy Loadingを無効化します。また、HTMLの<head>内に<link rel=”preload”>タグを挿入し、ブラウザに優先してこの画像をダウンロードするよう指示します。これにより、迅速なレンダリングを実現できます。

Lighthouse/PageSpeed Insightsを用いたパフォーマンス計測

施策の効果を測定し、さらなる改善点を見つけるためには、客観的なパフォーマンス計測が不可欠です。Google提供のPageSpeed Insightsや、Chrome DevToolsに組み込まれているLighthouseは、LCPを含むCore Web Vitalsを計測できる便利なツールです。現状のパフォーマンススコアを表示するだけでなく、「改善できる項目」として具体的な問題点を指摘します。

【関連記事】PageSpeed Insightsの活用方法:サイト高速化でSEOと顧客体験を向上

パフォーマンスチューニングの実践テクニック

priority属性の設定以外にも、LCPを改善する実践的なテクニックがあります。例えば、placeholder=”blur”やblurDataURLの活用により、高解像度の画像が読み込まれるまで軽量なぼかし画像を表示できます。また、画像のファイルサイズを圧縮し、不要なメタデータを削除することも基本ながら重要です。

imgixカスタムローダーで画像処理をエッジCDNにオフロードする方法も

Next.jsの組み込み画像最適化が強力ですが、高度な要件や大規模なトラフィックを扱うプロジェクトでは、画像処理を専門の外部サービスにオフロードすることが有効です。AI搭載の画像最適化CDNであるImgixを利用することで、サーバーへの負荷を軽減しつつ、リアルタイムでの高度な画像変換を実行できます。

next/imageコンポーネントは、外部CDNとシームレスに連携できます。Next.js 13以降でプロジェクト全体にImgixなどの外部CDNを適用する場合、組み込みローダーではなく loaderFile を使用してカスタムローダーを定義します。 

// next.config.js

module.exports = {

  images: {

    loader: ‘custom’,

    loaderFile: ‘./lib/imgixLoader.js’,

  },

};

// lib/imgixLoader.js

export default function imgixLoader({ src, width, quality }) {

  const url = new URL(https://YOUR_SUBDOMAIN.imgix.net${src});

  const params = url.searchParams;

  params.set(‘auto’, params.getAll(‘auto’).join(‘,’) || ‘format’);

  params.set(‘fit’, params.get(‘fit’) || ‘max’);

  params.set(‘w’, width.toString());

  if (quality) {

    params.set(‘q’, quality.toString());

  }

  return url.href;

}

この設定により、バックエンドではImgixが提供するリサイズ、クロップ、フォーマット変換などの恩恵を受けられます。特にECサイトやメディアサイトにおいて、このアプローチは開発ワークフローを効率化し、ユーザー体験を向上させます。

Next.js Imageコンポーネント利用時の注意点

Wooden blocks spell POINT on a wood surface, with a yellow light bulb illustration to the right.

Next.jsのImageコンポーネントは多くのメリットを提供しますが、導入や運用において特有の注意点が存在します。レイアウトシフト(CLS)の防止や、実行時のサーバー負荷・静的エクスポート時の制限、外部サービス連携時のセキュリティなど、開発者が直面しがちな課題とその対策を把握しておくことで、堅牢なサイト構築が可能になります。 

レイアウトシフト(CLS)を防ぐ

Imageコンポーネント利用時にもっとも注意すべき点の一つが、ページのレイアウトが崩れるCLS(Cumulative Layout Shift)です。この現象は、画像の寸法が適切に指定されていない場合に発生します。CLSを防ぐには、必ずwidthとheightプロパティを指定することが基本です。

また、fill プロパティを使用する際は、親要素にCSSで明確なサイズと position: relative を指定し、画像表示領域を事前に確保することが不可欠となります。 

実行時のサーバーリソース消費と静的エクスポート時の制限

Next.jsの組み込み画像最適化はビルド時ではなくリクエスト時にオンデマンド(実行時)で処理されるため、アクセス集中時にサーバーのCPUやメモリを大幅に消費したり、初回アクセス時にレスポンス遅延が発生する課題があります。また、完全静的エクスポート(output: ‘export’)環境では組み込み画像最適化が利用できません。Imgixなどの外部CDNに処理をオフロードすることで、Next.jsサーバーの実行時リソース負荷を大幅に軽減し、静的ホスティング環境でも高速な画像最適化配信が可能になります。

外部ドメイン・サービス連携時の設定

外部ドメイン上の画像やCDN、ストレージサービスと連携する際には、設定上の注意が必要です。まず、next.config.jsに利用するドメインを明示的に登録しなければ、画像が表示されません。ただし、外部CDN等のカスタムローダーを使用する場合はNext.jsサーバーを経由しないため、この登録は不要です。環境変数を活用してドメインを動的に管理することで、設定ミスを防ぎやすくなります。

カスタムローダーは単に画像URLの文字列を生成する関数であり、HTTPヘッダーの付与や認証処理を安全に行うことはできません。また、ローダー内に認証情報を埋め込むとクライアント側にトークンが露出する危険があります。認証が必要な画像を表示する場合は、以下のいずれかを採用してください。

  1. サーバー側(Server ComponentsやRoute Handler)で一時的な有効期限付きの『署名付きURL(Presigned URL)』を発行して src に渡す。
  2. 最適化を行わず、<Image … unoptimized/> を指定して直接アクセスする。
  3. 認証ヘッダーを付与して画像を取得・中継する自前のAPIプロキシ(Next.js Route Handler)を経由させる。

Next.jsのImageに関してよくある質問(FAQ)

Next.jsのImageコンポーネントで、アクセシビリティやレイアウトシフト防止のために必ず指定しなければならないプロパティは何ですか?

src と alt は常に必須です。外部URLや動的に取得する画像の場合は、レイアウトシフトを防ぐために width と height の指定も必須となります。ファーストビューの重要な画像には priority を true に設定することが推奨されます。

CMSや外部CDNに保存されている画像をNext.jsのImageコンポーネントで使うことはできますか?

はい、可能です。 next.config.js ファイルの images.remotePatterns に外部ドメインを登録する必要があります。さらに高度な画像処理やCDN利用には、コンポーネント単位の loader プロパティや、プロジェクト全体で適用する loaderFile 設定を使ってImgixなどの外部サービスと連携し、カスタムローダーを設定できます。 

Next.jsプロジェクト内の全ての画像を Image コンポーネントで表示すべきですか?

いいえ、全てではありません。Imageコンポーネントはコンテンツとしての画像には最適ですが、背景画像や小さなアイコンなどの装飾目的の画像には不向きです。これらには、従来のCSSでの指定やSVGを直接インライン展開する方法が適しています。

画像管理を成功させるには、Imageコンポーネントの適切な設定と外部サービスとの連携が不可欠

Next.jsプロジェクトにおいて、パフォーマンスとユーザー体験を向上させるためには、Imageコンポーネントの適切な利用と、外部サービスとの連携を考慮した画像管理戦略が重要です。プロパティの正しい設定やnext.config.jsでのドメイン登録といった基本的な使い方に加え、アプリケーション全体の設計に画像最適化を組み込むことで、スケーラブルでメンテナンス性の高いシステムを構築できます。

Next.jsの標準機能だけでも高いレベルの最適化が可能ですが、より高度な画像配信や動的な変換処理を実現するには、Imgixのような画像配信に特化したCDNサービスの利用が有効な選択肢となります。Imgixを導入することで、リクエストに応じて最適な画像フォーマット(AVIFなど)への自動変換や、AIを活用したインテリジェントなトリミングといった高度な機能を利用できます。これにより、開発者の手作業を削減し、常に最適な状態でビジュアルコンテンツを提供することが可能になります。

Webサイトの成果を最大化させるミッションをお持ちの方にオススメ資料

Webページの転送量の約65%は実は画像です。ですが、多くが未最適化のまま配信されています。そのため、「画像で損をしている」状態になっています。Webサイトの画像を最適化する手法や事例について、本資料を無料ダウンロードしてぜひご活用ください。
ホワイトペーパー表紙

↓画像最適化の手法や事例を無料で入手↓

Imgix_kanemotoHead of APAC
監修|金本 太一(Taichi Kanemoto) Imgix APAC責任者。サンフランシスコを拠点に、日本・インド・東南アジア・オーストラリアの画像/動画配信最適化を担当。日本のWebメディア・EC・旅行系サービスの表示速度改善を多数支援。