こんにちは。
Next.jsの最新アップデート、バージョン13がリリースされましたね。
今回はその中でも特に注目されている「レンダリングモード」に焦点を当て、その特徴と利用方法を3つの具体例を交えて解説していきます。
新しいレンダリングモードの概要
Next.js 13では、レンダリングモードがさらに進化しました。
それでは、新しいレンダリングモードの特徴を見ていきましょう。
具体例1: 静的サイト生成(SSG)の最適化
Next.jsはSSGをサポートしており、ビルド時にHTMLを生成することができます。
新しいアップデートでは、このSSGのパフォーマンスがさらに向上しています。
以下のコードは、新しいレンダリングモードを利用したSSGの基本的な実装例です。
// pages/index.js export async function getStaticProps() { // 外部APIからデータを取得 const res = await fetch('<https://api.example.com/data>'); const data = await res.json(); return { props: { data, }, }; } function HomePage({ data }) { return ( <div> {data.map((item, index) => ( <p key={index}>{item.name}</p> ))} </div> ); } export default HomePage;
このコードでは、getStaticProps
関数を使用して外部APIからデータを取得し、それをプロップスとしてコンポーネントに渡しています。
これにより、ビルド時にデータがフェッチされ、静的なHTMLが生成されます。
SEO対策としてのメタタグの最適化
Next.js 13では、SEO対策としてメタタグの最適化が容易になりました。
以下のコードは、メタタグを最適化する基本的な実装例です。
// pages/_app.js import Head from 'next/head'; function MyApp({ Component, pageProps }) { return ( <> <Head> <title>Next.js 13 最新アップデート特集</title> <meta name="description" content="Next.js 13の新しいレンダリングモードを徹底解説します。" /> <meta name="keywords" content="Next.js, レンダリング, SSG, SEO" /> </Head> <Component {...pageProps} /> </> ); } export default MyApp;
このコードでは、_app.js
ファイルにHead
コンポーネントを利用してメタタグを設定しています。これにより、SEOを意識したウェブページの構築が可能になります。
具体例2: サーバーサイドレンダリング(SSR)の最適化
Next.js 13では、サーバーサイドレンダリング(SSR)もさらにパワーアップしました。
以下のコードは、新しいレンダリングモードを利用したSSRの基本的な実装例です。
// pages/index.js export async function getServerSideProps() { // 外部APIからデータを取得 const res = await fetch('<https://api.example.com/data>'); const data = await res.json(); return { props: { data, }, }; } function HomePage({ data }) { return ( <div> {data.map((item, index) => ( <p key={index}>{item.name}</p> ))} </div> ); } export default HomePage;
このコードでは、getServerSideProps
関数を使用して外部APIからデータを取得し、それをプロップスとしてコンポーネントに渡しています。
これにより、リクエストごとにデータがフェッチされ、動的なコンテンツのレンダリングが可能になります。
具体例3: ISR(Incremental Static Regeneration)の活用
Next.js 13では、ISRの機能がさらに強化されました。
以下のコードは、ISRを活用したページの基本的な実装例です。
// pages/index.js export async function getStaticProps() { // 外部APIからデータを取得 const res = await fetch('<https://api.example.com/data>'); const data = await res.json(); return { props: { data, }, revalidate: 60, // 60秒ごとに再生成 }; } function HomePage({ data }) { return ( <div> {data.map((item, index) => ( <p key={index}>{item.name}</p> ))} </div> ); } export default HomePage;
このコードでは、getStaticProps
関数にrevalidate
オプションを設定して、ページの再生成を60秒ごとに行うようにしています。
これにより、静的なページでありながら動的なデータを効果的に表示することが可能になります。
高度なテクニック: レンダリングモードの組み合わせ
Next.js 13の新しいアップデートでは、異なるレンダリングモードを組み合わせて使用することで、さらに高度なウェブアプリケーションを構築することが可能になりました。
以下、その方法を3つの具体例を用いて解説します。
具体例1: SSGとISRを組み合わせる
SSGとISRを組み合わせることで、静的なページを生成しつつ、定期的にデータを更新することが可能になります。
以下のコードはその基本的な実装例です。
// pages/index.js export async function getStaticProps() { // 外部APIからデータを取得 const res = await fetch('<https://api.example.com/data>'); const data = await res.json(); return { props: { data, }, revalidate: 60, // 60秒ごとに再生成 }; } function HomePage({ data }) { return ( <div> {data.map((item, index) => ( <p key={index}>{item.name}</p> ))} </div> ); } export default HomePage;
具体例2: SSRとClient-side Fetchingを組み合わせる
SSRとClient-side Fetchingを組み合わせることで、サーバーサイドでの初期レンダリングと、クライアントサイドでのデータフェッチを行うことができます。
以下のコードはその基本的な実装例です。
// pages/index.js import useSWR from 'swr'; export async function getServerSideProps() { // 外部APIからデータを取得 const res = await fetch('<https://api.example.com/data>'); const initialData = await res.json(); return { props: { initialData, }, }; } function HomePage({ initialData }) { const { data } = useSWR('<https://api.example.com/data>', { initialData }); return ( <div> {data.map((item, index) => ( <p key={index}>{item.name}</p> ))} </div> ); } export default HomePage;
具体例3: ISRとClient-side Fetchingを組み合わせる
ISRとClient-side Fetchingを組み合わせることで、静的なページを生成しつつ、クライアントサイドでのデータ更新を行うことができます。
以下のコードはその基本的な実装例です。
// pages/index.js import useSWR from 'swr'; export async function getStaticProps() { // 外部APIからデータを取得 const res = await fetch('<https://api.example.com/data>'); const initialData = await res.json(); return { props: { initialData, }, revalidate: 60, // 60秒ごとに再生成 }; } function HomePage({ initialData }) { const { data } = useSWR('<https://api.example.com/data>', { initialData }); return ( <div> {data.map((item, index) => ( <p key={index}>{item.name}</p> ))} </div> ); } export default HomePage;
おわり
以上が、Next.js 13の新しいレンダリングモードです。
この記事を参考に、さらに高度なウェブアプリケーションを構築してみてください。