Incremental SSG: Next.jsでのパフォーマンス最適化

Next.jsはReactベースのフレームワークであり、パフォーマンスの最適化が簡単に実現できるよう設計されています。 今回は、Incremental SSG(Static Site Generation)を使ってNext.jsアプリケーションのパフォーマンスを最適化する方法を説明します。

目次

  1. はじめに:SSGとは何か
  2. Next.jsにおけるIncremental SSGの使用方法
  3. データフェッチングの最適化
  4. 画像の最適化
  5. 結論

1. はじめに:SSGとは何か

SSG(Static Site Generation)は事前に静的なHTMLファイルを生成するビルドプロセスのことです。これにより、サーバーサイドレンダリングやクライアントサイドレンダリングに比べ、ページの読み込み速度が向上します。

2. Next.jsにおけるIncremental SSGの使用方法

Incremental SSGはNext.js 9.5以降で利用できる機能であり、静的サイトを部分的に再生成することができます。次の例ではgetStaticPropsを使用して、ビルド時にデータをフェッチします。

// pages/posts/[id].js
import {getPost} from '../api/posts';

export async function getStaticPaths() {
  const posts = await getPosts();
  const paths = posts.map((post) => ({
    params: {id: String(post.id)},
  }));

  return {paths, fallback: false};
}

export async function getStaticProps({params}) {
  const post = await getPost(params.id);
  return {props: {post}};
}

function Post({post}) {
  return (
    <>
      <h1>{post.title}</h1>
      <p>{post.content}</p>
    </>
  );
}

export default Post;

getStaticProps関数の返り値にrevalidateオプションを追加することで、Incremental SSGが有効になります。

export async function getStaticProps({params}) {
  const post = await getPost(params.id);
  return {props: {post}, revalidate: 1}; // 1秒ごとに再生成されます
}

3. データフェッチングの最適化

データフェッチングの最適化は、パフォーマンス向上の鍵です。Next.jsでは以下の方法でデータがフェッチできます。

  • getStaticProps: 静的データをビルド時に取得します。
  • getStaticPaths: 静的パスを動的ページに使用する際に取得します。
  • getServerSideProps: サーバサイドで実行されるデータ取得です。クライアントからリクエストが発生するたびに実行されます。
  • SWR(Stale While Revalidate): クライアントサイドでデータの再確認を行います。

4. 画像の最適化

Next.jsには組み込みのImageコンポーネントがあります。これにより、自動的に画像の圧縮や最適化が行われます。

import Image from 'next/image';

function MyApp() {
  return (
    <div>
      <Image src="/path/to/image.jpg" alt="画像の説明" width={200} height={100} />
    </div>
  );
}

export default MyApp;

5. 結論

Incremental SSGを使ってNext.jsアプリのパフォーマンスを最適化する方法を紹介しました。上手く活用すれば、ユーザーエクスペリエンスが向上し、ウェブサイトの効果が増します。