画像最適化

Web ページの画像サイズを削減し、表示速度と Core Web Vitals を向上させる技術群

パフォーマンスWeb

画像最適化とは

画像最適化は、Web ページの画像ファイルサイズを削減し、表示速度を向上させる技術群である。画像は Web ページの転送データ量の 50% 以上を占めることが多く、LCP (Largest Contentful Paint) に直接影響する。

最適化の 4 つの柱

1. フォーマットの選択

フォーマット特徴用途
WebPJPEG より 25〜35% 小さい、透過対応写真、イラスト (推奨)
AVIFWebP よりさらに小さい、対応ブラウザが増加中写真 (最高圧縮)
JPEG広くサポート、写真向けフォールバック
PNG可逆圧縮、透過対応アイコン、スクリーンショット
SVGベクター、拡大しても劣化しないロゴ、アイコン

2. レスポンシブ画像

<!-- デバイスの画面幅に応じて適切なサイズの画像を配信 -->
<img
  srcset="hero-400.webp 400w, hero-800.webp 800w, hero-1200.webp 1200w"
  sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1200px"
  src="hero-800.webp"
  alt="Hero image"
  width="1200"
  height="630"
/>

モバイルに 1200px の画像を配信するのは無駄だ。srcset でデバイスに適したサイズを配信する。

3. 遅延読み込み

<!-- ファーストビュー外の画像は遅延読み込み -->
<img src="photo.webp" loading="lazy" alt="Photo" width="800" height="600" />

<!-- LCP 画像は遅延読み込みしない! -->
<img src="hero.webp" fetchpriority="high" alt="Hero" width="1200" height="630" />

4. サイズの明示

<!-- width/height を指定して CLS を防止 -->
<img src="photo.webp" width="800" height="600" alt="Photo" />

<!-- CSS の aspect-ratio でも可 -->
<style>.photo { aspect-ratio: 4 / 3; width: 100%; }</style>

Next.js の Image コンポーネント

Next.js の Image コンポーネントのコード例を示す。

import Image from 'next/image';

<Image
  src="/hero.jpg"
  alt="Hero"
  width={1200}
  height={630}
  priority          // LCP 画像: 遅延読み込みしない
  placeholder="blur" // ぼかしプレースホルダー
/>

next/image は自動的に WebP 変換、リサイズ、遅延読み込み、CLS 防止を行う。

CloudFront + Lambda@Edge での画像変換

オリジンの画像を Lambda@Edge でリアルタイムに変換 (リサイズ、WebP 変換) し、CloudFrontキャッシュする。

[ブラウザ][CloudFront] → キャッシュヒット → 変換済み画像を返す
                          → キャッシュミス → [Lambda@Edge] → S3 から取得 → 変換 → キャッシュ

画像フォーマットの比較

画像フォーマットの比較を以下に示す。

フォーマット圧縮透過アニメーション用途
WebP高い写真、イラスト
AVIF最高次世代フォーマット
PNG低いロゴ、アイコン
JPEG写真
SVG-ベクター画像

体系的に学ぶなら関連書籍を参照してほしい。

この記事は役に立ちましたか?

関連用語

関連する記事