ReactでのImageとFontの最適化
適切なdimensions、formats(AVIF/WebP)、font-displayを指定してnext/imageまたはlazy-loaded を使います。
「ReactでのImageとFontの最適化」はCoddyKit上の無料React Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
画像が重要な理由
画像は通常、ページ上で最も大きなリソースです。最適化されていない画像は、LCP の悪化、ページ読み込みの遅延、高い帯域幅コストにつながります。特にモバイルでは影響が大きくなります。
Next.js Image コンポーネント
next/imageは、画像を自動的に最適化します。デフォルトでの遅延読み込み、レスポンシブな srcSet、最新の形式(WebP/AVIF)、CLS を防ぐ適切なサイズ指定に対応しています。
import Image from 'next/image';
<Image
src="/hero.jpg"
alt="Hero image"
width={1200}
height={600}
priority // preload above-the-fold images
sizes="(max-width: 768px) 100vw, 50vw" // responsive sizing
/>通常の React での遅延読み込み
ネイティブの<img>要素にloading='lazy'を追加します。ブラウザは画面外の画像がビューポートの近くまでスクロールされるまで、読み込みを遅延させます。
// Below-the-fold images:
<img src="/product.jpg" alt="Product" loading="lazy" />
// Above-the-fold (hero) — eager to avoid LCP delay:
<img src="/hero.jpg" alt="Hero" loading="eager" fetchPriority="high" />最新の画像形式
JPEG/PNG の代わりに WebP または AVIF を配信します。AVIF は同じ品質の JPEG より 50% 小さくできます。フォールバックを用意した形式のネゴシエーションには、<picture>要素を使います。
<picture>
<source srcSet="/hero.avif" type="image/avif" />
<source srcSet="/hero.webp" type="image/webp" />
<img src="/hero.jpg" alt="Hero" width="1200" height="600" />
</picture>srcSet によるレスポンシブ画像
複数のサイズを用意し、画面に適した解像度をブラウザに選ばせます。これにより、幅 400px のモバイル画面に 2000px の画像をダウンロードするような無駄を避けられます。
<img
src="/photo-800.jpg"
srcSet="/photo-400.jpg 400w, /photo-800.jpg 800w, /photo-1600.jpg 1600w"
sizes="(max-width: 600px) 400px, (max-width: 1200px) 800px, 1600px"
alt="Photo"
/>Blurhash/スケルトンプレースホルダー
画像の読み込み中にぼかしたプレースホルダーを表示し、レイアウトシフトを防いで体感パフォーマンスを向上させます。
// With next/image blur placeholder:
<Image
src="/photo.jpg"
alt="Photo"
width={800}
height={600}
placeholder="blur"
blurDataURL="data:image/jpeg;base64,/9j/4AAQ..." // tiny base64 blur
/>フォント読み込み戦略
フォントはレンダリングをブロックします。font-display: swapを使うと、カスタムフォントの読み込み中にフォールバックフォントを表示でき、FOIT(Flash of Invisible Text)を減らせます。
/* In global CSS: */
@font-face {
font-family: 'MyFont';
src: url('/fonts/MyFont.woff2') format('woff2');
font-display: swap; /* show fallback, swap to MyFont when ready */
}Next.js のフォント最適化
next/fontは Google Fonts をビルド時に読み込み、自分のサーバーから配信し、font-display: optionalを適用してフォント切り替えによる CLS をなくします。
import { Inter } from 'next/font/google';
const inter = Inter({
subsets: ['latin'],
display: 'swap',
variable: '--font-inter',
});
export default function RootLayout({ children }) {
return <html className={inter.variable}><body>{children}</body></html>;
}フォントのサブセット化
必要な文字セットだけを読み込みます。Unicode 全体を含むフォントは 1MB 以上になることがありますが、Latin サブセットは通常 30〜80KB です。
// Google Fonts URL with subset:
https://fonts.googleapis.com/css2?family=Roboto&subset=latin
// next/font:
const roboto = Roboto({ weight: '400', subsets: ['latin'] });重要なフォントのプリロード
ファーストビューに表示されるフォントをプリロードし、HTML の解析と並行して読み込むことで、レンダリングをブロックする時間を短縮します。
<link
rel="preload"
href="/fonts/MyFont.woff2"
as="font"
type="font/woff2"
crossOrigin="anonymous"
/>CDN とキャッシュ
画像とフォントを、長いキャッシュ TTL(Cache-Control: max-age=31536000, immutable)を設定した CDN から配信します。コンテンツハッシュ付きのファイル名を使うと、常に新しいファイルをキャッシュから取得できます。
確認問題
ウェブフォントに対して font-display: swap は何をしますか?
まとめ
自動最適化にはnext/imageを使い、通常の React ではネイティブのloading='lazy'と srcSet を使います。<picture>のフォールバックとともに AVIF/WebP を配信します。ウェブフォントにはfont-display: swapを適用し、Google Fonts のセルフホスティングにはnext/fontを使います。また、ファーストビューに必要なリソースをプリロードします。
よくある質問
「ReactでのImageとFontの最適化」レッスンは無料ですか?
はい。「ReactでのImageとFontの最適化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「ReactでのImageとFontの最適化」で何を学びますか?
適切なdimensions、formats(AVIF/WebP)、font-displayを指定してnext/imageまたはlazy-loaded を使います。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ReactでのImageとFontの最適化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ReactアプリでCore Web Vitalsを測定
- Bundle分析とCode Splitting戦略
- ReactでのImageとFontの最適化
- INPの改善:Event Handlerの最適化