© TOOLS BOX — Next.js / React / TypeScript コードサンプル集

サンプルガイド
←サンプル一覧
nextjsui-component

Next.js の Image コンポーネントで画像を最適化する

next/image の Image コンポーネントを使った画像最適化の基本。サイズ指定・lazy loading・外部ドメイン許可の設定を解説する。

難易度: 初級·更新: 2026-04-15

対応バージョン

nextjs 15typescript 5

前提環境

Next.js App Router の基本的な使い方を理解していること

概要

next/image の Image コンポーネントは以下を自動的に行う。

  • WebP / AVIF への変換
  • 遅延読み込み(lazy loading)
  • srcset による適切なサイズ配信
  • Cumulative Layout Shift(CLS)防止

基本的な使い方

import Image from "next/image";

export function Avatar() {
  return (
    <Image
      src="/avatar.png"
      alt="ユーザーアバター"
      width={64}
      height={64}
      className="rounded-full"
    />
  );
}

fill で親要素いっぱいに表示する

import Image from "next/image";

export function HeroImage() {
  return (
    <div className="relative h-64 w-full">
      <Image
        src="/hero.jpg"
        alt="ヒーロー画像"
        fill
        sizes="100vw"
        className="object-cover"
        priority  // Above the fold の画像は priority を付ける
      />
    </div>
  );
}

外部ドメインの画像を許可する

// next.config.ts
import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  images: {
    remotePatterns: [
      {
        protocol: "https",
        hostname: "example.com",
        pathname: "/images/**",
      },
    ],
  },
};

export default nextConfig;
// 外部ドメインの画像
import Image from "next/image";

export function ExternalImage() {
  return (
    <Image
      src="https://example.com/images/photo.jpg"
      alt="外部画像"
      width={400}
      height={300}
    />
  );
}

ポイント

  • width / height は必須(fill を使う場合は不要)
  • ファーストビューに表示される画像には priority を付けて LCP を改善する
  • sizes 属性を指定すると適切な解像度の画像が配信される
  • object-fit は className で object-cover / object-contain を指定する

注意点

外部ドメインの画像を使う場合は next.config.ts の remotePatterns 設定が必須

関連サンプル

同じテーマや技術スタックを使った実装例

  • Next.js の Image コンポーネントで画像を最適化する

    next/image を使い、自動リサイズ・WebP 変換・遅延読み込みを設定する実装例。外部ドメイン画像の許可設定も含む。

  • React 19 の useOptimistic で楽観的 UI 更新を実装する

    React 19 の useOptimistic を使い、Server Actions の完了を待たずに UI を即時更新し、失敗時に自動ロールバックする楽観的更新を実装する例。

  • IntersectionObserver カスタムフックで要素の可視性を検出する

    useIntersectionObserver カスタムフックを自作し、要素が viewport に入ったことを検知して遅延ロードやスクロールアニメーションをトリガーする例。

  • Zustand の selector で不要な再レンダリングを防ぐ

    useStore にセレクタ関数を渡し、参照する state を絞ることで不要な再レンダリングを防ぐ実装例。

  • CSS Modules でスコープ付きスタイルのコンポーネントを作る

    CSS Modules を使い、クラス名の衝突を避けたスコープ付きスタイルでコンポーネントを実装する例。Tailwind との使い分けと composes による再利用パターンも示す。

関連仕様

このサンプルを理解するのに役立つ仕様や概念

  • FrameworkNext.jsReact ベースのフルスタックフレームワーク。SSR・SSG・App Router・API Routes を提供する。
←サンプル一覧に戻る