画像最適化の基本 2025 — 勘に頼らない土台づくり

公開: 2025年9月18日 · 読了目安: 2 · 著者: Unified Image Tools 編集部

はじめに

画像最適化は「やれば速くなる」のではなく、「設計が正しければ安定して速くなる」領域です。この記事では、既存の記事(例: 画像圧縮 完全戦略 2025 ─ 画質を守りつつ体感速度を最適化する実践ガイド)で扱っている実務レベルの深さを踏襲しつつ、最初に押さえるべき土台を体系化します。

TL;DR(迷ったらここから)

  • まずリサイズ、次に圧縮。転送コストはピクセル数 × 符号化効率で決まる。
  • コンテンツ別にフォーマットを選ぶ(写真は WebP/AVIF、UI/ロゴは PNG/ロスレス WebP)。
  • レスポンシブ配信は srcset/sizes が主役。LCP 候補だけを優先読み込み。
  • 高品質マスターを保ち、変換はワンパス。再圧縮の連鎖は厳禁。
  • ビルド/CDNで自動化し、長期キャッシュ + 指紋付けで配信を安定化。

なぜ今も画像最適化が効くのか

Core Web Vitals の改善はテキストやJS削減だけでなく、画像の「面積削減と選択の正しさ」に強く依存します。特に LCP 画像はユーザーの初期体験を左右するため、最初の 1〜2 秒でのダウンロード量を抑えつつ、視覚品質を落とさない設計が必要です。

原則(設計の三本柱)

  1. 面積(ピクセル)を減らす: レイアウトから最大表示幅を逆算し、過剰解像度をやめる。
  2. フォーマット/品質を揃える: コンテンツ種別に合わせ、過度な損失を避ける。
  3. 配信を最適化する: srcset/sizes、遅延読み込み、優先度制御、長期キャッシュ。

この順番を崩さない限り、後からの拡張(例: P3 対応やアニメーション最適化)も破綻しません。リサイズの指針は 2025年のリサイズ設計 — レイアウトから逆算して 30–70% の無駄を削る に詳しく書きました。

リサイズの実務(レイアウトから逆算)

記事レイアウトのカラム幅と想定 DPR(1.5〜2 程度)から上限ピクセルを見積もり、3〜5 本の代表幅を用意します。

上限ピクセル = min(コンテナ幅, ビューポート幅) × 想定DPR

Next.js を使う場合、sizes を合っている値にするだけで過配信を一気に減らせます。

// 単一カラム記事で最大 768px を想定する例
<Image
  src="/hero-1536.avif"
  alt="ヒーロー"
  width={1536}
  height={864}
  sizes="(max-width: 768px) 100vw, 768px"
  priority
  fetchPriority="high"
/>

リサイズの計画段階では、インタラクティブな試行で上限幅の感覚を掴むと効率的です(必要に応じて 画像リサイズ を併用すると議論が早く進みます)。

フォーマット選択の基礎

  • 写真: 既定は WebP、追加検証として AVIF。エッジ/肌/グラデで破綻がなければ AVIF 採用。
  • UI/ロゴ/図: 透過・エッジ優先のため PNG またはロスレス WebP。
  • 透過不要の写真: JPEG から WebP/AVIF へ移行するだけで大幅削減が期待できます。

本文中で図解やベンチを示す際、変換の試行は単発なら 形式変換 が便利です。大量変換やメタデータ保持の方針は後述の「自動化」へ。

圧縮品質(q)の決め方

画質劣化は「目に付く場所」で評価します。文字の縁、髪・肌の階調、空のグラデーション。ここで問題があれば q を段階的に上げ、LCP 画像のみ特別扱い(多少低めでも可)とするのが現実解です。戦略の全体像は 画像圧縮 完全戦略 2025 ─ 画質を守りつつ体感速度を最適化する実践ガイド を参照してください。

自動化の最小構成(Node.js / sharp)

小規模サイトでも回る最小構成の例です。幅の候補を配列で管理し、WebP/AVIF を吐き出します。ファイル名は指紋付け(hash)に置き換えるとキャッシュが安定します。

// scripts/build-images.ts
import sharp from 'sharp'
import fg from 'fast-glob'
import { join, basename, extname } from 'node:path'
import { mkdirSync } from 'node:fs'

const OUT = '.dist/images'
const WIDTHS = [640, 960, 1280, 1536, 1920]
mkdirSync(OUT, { recursive: true })

const files = await fg(['assets/images/**/*.{jpg,jpeg,png}'])
for (const file of files) {
  const name = basename(file, extname(file))
  for (const w of WIDTHS) {
    const p = sharp(file).resize({ width: w, withoutEnlargement: true })
    await p.webp({ quality: 78 }).toFile(join(OUT, `${name}-${w}.webp`))
    await p.avif({ quality: 58 }).toFile(join(OUT, `${name}-${w}.avif`))
  }
}

大量の既存素材がある場合は、メタデータの扱い(EXIF プライバシーや回転)を組み合わせると安全です。方針は 安全なメタデータ方針 2025 — EXIF 削除・自動回転・プライバシー保護の実務 を参照。

レスポンシブ配信の設計

srcset/sizes は「ブラウザがどの幅を選ぶか」の規約です。sizes がレイアウトとずれていると、永遠に重くなります。よくある型と落とし穴は 2025年のレスポンシブ画像設計 — srcset/sizes 実践ガイド にまとめました。LCP 候補だけ priority/preload を検討し、その他は遅延読み込みで十分です。

品質検証(人間 + 指標)

人間の目でエッジや肌の劣化を見たうえで、SSIM/PSNR/ΔE のような指標で裏取りします。簡易 ΔE の概算は以下のように書けます(厳密な CIEDE2000 ではありません)。

import sharp from 'sharp'

function dE(a: number[], b: number[]) {
  const [L1, a1, b1] = a, [L2, a2, b2] = b
  const dL = L1 - L2, da = a1 - a2, db = b1 - b2
  return Math.sqrt(dL * dL + da * da + db * db)
}

async function meanDeltaE(src: string, tgt: string) {
  const A = await sharp(src).toColorspace('lab').raw().ensureAlpha().toBuffer({ resolveWithObject: true })
  const B = await sharp(tgt).toColorspace('lab').raw().ensureAlpha().toBuffer({ resolveWithObject: true })
  if (A.info.width !== B.info.width || A.info.height !== B.info.height) throw new Error('size mismatch')
  let sum = 0, n = 0
  for (let i = 0; i < A.buffer.length; i += 4) {
    sum += dE([A.buffer[i], A.buffer[i + 1], A.buffer[i + 2]], [B.buffer[i], B.buffer[i + 1], B.buffer[i + 2]])
    n++
  }
  return sum / n
}

ビジュアル比較は横並びが王道です。必要に応じて比較用 UI を用意すると、合意形成が速まります(たとえば比較スライダーに寄り道して検証する、という使い方は自然です)。

ありがちな失敗と対策

FAQ(要点だけ)

Q. AVIF は常に最小ですか?

A. 写真では小さくなりがちですが、エッジ/文字でアーティファクトが目立つ場合があります。WebP をベースに、AVIF を検証して採用可否を決めるのが現実的です。

Q. LCP 画像の品質はどこまで下げて良い?

A. まずはレイアウト上の最大幅を正しくし、sizes を合わせること。そのうえで q を段階的に下げ、視覚検証で問題なければ採用します。

まとめ

画像最適化は「ピクセル → フォーマット/品質 → 配信」の順で決めるとブレません。最初に土台を固めておくと、各論(圧縮戦略、色、メタデータ、アニメーション)を拡張しても破綻しません。次はリサイズ設計の詳細へ進んでください: 2025年のリサイズ設計 — レイアウトから逆算して 30–70% の無駄を削る

関連記事

Web

画像SEO 2025 — alt・構造化データ・サイトマップの実務

検索流入を逃さない画像SEOの最新実装。altテキスト/ファイル名/構造化データ/画像サイトマップ/LCP最適化を一つの方針で整えます。

リサイズ

2025年のリサイズ設計 — レイアウトから逆算して 30–70% の無駄を削る

レイアウトに基づく目標幅の導出、複数サイズの生成、srcset/sizes の実装まで。最も効く削減手法を体系化。

リサイズ

2025年のレスポンシブ画像設計 — srcset/sizes 実践ガイド

ブレークポイントとカード密度から逆算して、srcset/sizes を正しく書くための決定版チートシート。LCP、アートディレクション、アイコン/SVG の扱いまで網羅。

圧縮

画像圧縮 完全戦略 2025 ─ 画質を守りつつ体感速度を最適化する実践ガイド

Core Web Vitals と実運用に効く最新の画像圧縮戦略を、用途別の具体的プリセット・コード・ワークフローで徹底解説。JPEG/PNG/WebP/AVIF の使い分け、ビルド/配信最適化、トラブル診断まで網羅。

Web

Favicon & PWA アセット チェックリスト 2025 — マニフェスト/アイコン/SEO シグナル

見落としがちなファビコン/PWA アセットの要点。マニフェストのローカライズや配線、必要サイズの網羅をチェックリスト化。

変換

フォーマット変換の戦略 2025 — WebP/AVIF/JPEG/PNG を使い分ける指針

コンテンツ種別ごとの意思決定と運用フロー。互換性・容量・画質のバランスを取り、最小の労力で安定化。