Next.jsはReactベースのフレームワークであり、パフォーマンスの最適化が簡単に実現できるよう設計されています。 今回は、Incremental SSG(Static Site Generation)を使ってNext.jsアプリケーションのパフォーマンスを最適化する方法を説明します。
目次
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アプリのパフォーマンスを最適化する方法を紹介しました。上手く活用すれば、ユーザーエクスペリエンスが向上し、ウェブサイトの効果が増します。