brand logo

ドキュメント

<NuxtPicture>

Nuxtは自動画像最適化を処理するための<NuxtPicture>コンポーネントを提供します。

<NuxtPicture>はネイティブの<picture>タグの代替としてそのまま使用できます。

<NuxtPicture>の使用法は<NuxtImg>とほぼ同じですが、可能であればwebpのような最新のフォーマットを提供することもできます。

<picture>タグについてMDNで詳しく学ぶ

セットアップ

<NuxtPicture>を使用するには、Nuxt Imageモジュールをインストールして有効にする必要があります:

Terminal
npx nuxt module add image
こちらも参照 image.nuxt.com > usage > nuxt-picture

tips

このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。

NuxtPicture コンポーネントとは?〜画像最適化の課題を解決する

Webサイトのパフォーマンス向上において、画像の最適化は非常に重要です。特にレスポンシブ対応や最新フォーマットの利用は、ユーザー体験を大きく左右します。NuxtPictureは、ネイティブの<picture>タグの利便性を保ちつつ、Nuxt Imageモジュールの力を借りて自動的に画像の最適化やフォーマット切り替えを行うコンポーネントです。

これにより、開発者は複雑な画像処理を意識せずに、パフォーマンスに優れた画像配信を実現できます。特にWebPやAVIFなどの最新フォーマットを自動で提供できるため、ユーザーのブラウザ環境に応じた最適な画像を配信可能です。


まず結論:NuxtPictureのポイント

  • ネイティブの<picture>タグの代替として使えるため、既存のpictureタグの知識が活かせる
  • Nuxt Imageモジュールと連携し、自動で画像の最適化やフォーマット切り替えを行う
  • WebPやAVIFなどの最新フォーマットをブラウザ対応に応じて自動提供
  • レスポンシブ画像の指定が簡単で、画面サイズに応じた画像切り替えが可能
  • 画像の遅延読み込み(lazy loading)やサイズ指定もサポートし、パフォーマンス向上に寄与

いつ使うべきか?使わない方がよいケースは?

使うべきケース

  • 複数の画面サイズや解像度に対応したレスポンシブ画像を簡単に実装したいとき
  • WebPやAVIFなどの最新画像フォーマットを自動で配信し、パフォーマンスを最適化したいとき
  • Nuxt Imageモジュールを導入済みで、画像管理を一元化したいとき
  • SEOやアクセシビリティを考慮しつつ、画像の最適化を自動化したいとき

使わない方がよいケース

  • 画像の細かい加工や特殊なエフェクトをクライアント側で動的に行いたい場合(NuxtPictureは主に静的な画像最適化向け)
  • Nuxt Imageモジュールを使わず、独自の画像最適化パイプラインを既に構築している場合
  • 画像の配信元が外部CDNで、Nuxt Imageモジュールの最適化機能が利用できない場合

実務でよくあるユースケースとサンプルコード

1. レスポンシブ画像の簡単実装

画面幅に応じて異なる画像を配信したい場合、<NuxtPicture>srcsetsizes属性を活用します。

<template>
  <NuxtPicture
    src="/images/sample.jpg"
    alt="サンプル画像"
    sizes="(max-width: 600px) 100vw, 50vw"
    srcset="
      /images/sample-400.jpg 400w,
      /images/sample-800.jpg 800w,
      /images/sample-1200.jpg 1200w
    "
    lazy
  />
</template>

この例では、画面幅600px以下では100%幅の画像を、それ以上では50%幅の画像を表示し、ブラウザが適切な解像度の画像を選択します。

2. 最新フォーマットの自動配信

WebPやAVIFに対応した画像を自動で配信し、対応していないブラウザにはフォールバック画像を提供します。

<template>
  <NuxtPicture
    src="/images/photo.jpg"
    alt="最新フォーマット対応画像"
    format="webp,avif"
    lazy
  />
</template>

format属性に複数指定することで、ブラウザの対応状況に応じて最適なフォーマットが選ばれます。

3. 遅延読み込みでパフォーマンス向上

ページの初期表示速度を上げるために、画面外の画像を遅延読み込みします。

<template>
  <NuxtPicture
    src="/images/large-image.jpg"
    alt="遅延読み込み画像"
    lazy
  />
</template>

lazy属性を付けるだけで簡単に遅延読み込みが有効になります。


よくある落とし穴・注意点

SSRとHydrationのズレに注意

NuxtPictureはサーバーサイドレンダリング(SSR)時に最適化された画像タグを生成しますが、クライアント側でHydrationが行われる際に属性の差異があると警告が出ることがあります。特に動的にsrcsetformatを切り替える場合は、サーバーとクライアントで同じ結果になるように注意してください。

パフォーマンス面の注意

  • 過剰な画像サイズや解像度の指定は逆効果になることがあります。必要なサイズに絞って指定しましょう。
  • 遅延読み込みは便利ですが、ファーストビューに必要な画像には適用しない方が良いです。
  • 画像の最適化はサーバー負荷にも影響するため、ビルド時に画像をプリプロセスする設定も検討してください。

ブラウザ対応の確認

WebPやAVIFは多くのモダンブラウザで対応していますが、古いブラウザでは表示されません。NuxtPictureは自動でフォールバックを提供しますが、特定の環境で問題が起きる場合は手動でフォールバック画像を用意することも検討してください。


まとめ

NuxtPictureはNuxt Imageモジュールの強力なコンポーネントで、画像のレスポンシブ対応や最新フォーマットの自動配信を簡単に実現します。これにより、開発者は画像最適化の複雑な処理から解放され、パフォーマンスの高いWebサイトを効率的に構築可能です。

ただし、SSRとクライアントの差異やパフォーマンス面の注意点を理解し、適切に使い分けることが重要です。実務でのユースケースを踏まえ、NuxtPictureを活用して快適なユーザー体験を提供しましょう。

Nuxt Imageモジュールの導入がまだの場合は、まずnpx nuxt module add imageでセットアップし、公式ドキュメントを参照しながらNuxtPictureを試してみることをおすすめします。