Next.js 15でのAPIデータ取得: ベストプラクティス

Ace Lennox
Next.jsは、Reactアプリケーション開発のための人気のフレームワークとして進化を続けており、最新バージョン15では「App Router」や「React Server Components(RSC)」などの新機能が強化されています。このバージョンでは、APIデータ取得における新しいアプローチが導入され、より柔軟で効率的な方法が可能になりました。
本記事では、Next.js 15におけるAPIデータ取得のベストプラクティスを解説し、具体例を交えてクライアントサイド・サーバーサイドの両方でのデータ取得方法をご紹介します。
なぜAPIデータ取得が重要なのか?
現代のウェブアプリケーションは、ブログやECサイト、ダッシュボードに至るまで、多くの場合外部サービスからのデータに依存しています。
Next.js 15を使用することで、以下のシナリオに応じた最適なデータ取得方法を簡単に実現できます:
サーバーサイドでの動的データ取得: 必要に応じて最新データを取得。
静的サイトの事前レンダリング: パフォーマンスとSEOに優れた静的ページの生成。
クライアントサイドの動的データ取得: ユーザー依存のデータを動的にロード。
Next.js 15でのAPIデータ取得方法
1. React Server Components(RSC)でのサーバーサイドデータ取得
React Server Componentsを使用すると、APIデータをサーバーサイドで取得しつつ、コンポーネントをサーバー上で直接レンダリングすることができます。これにより、クライアント側でのJavaScript処理を減らし、パフォーマンスを向上させます。
例:
// app/page.jsx
export default async function HomePage() {
const res = await fetch('https://api.example.com/data', { cache: 'no-store' }); // 動的データ取得
const data = await res.json();
return (
<div>
<h1>React Server Componentsを使ったデータ取得</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
解説:
fetch
を使ってAPIからデータを取得します。cache: 'no-store'
オプションを指定することで、最新データを常に取得します。
2. 静的データ取得と事前レンダリング
静的ページが必要な場合、fetch
を使用してビルド時にデータを取得し、HTMLに埋め込むことが可能です。これにより、SEOに優れたパフォーマンスを実現します。
例:
// app/posts/page.jsx
export default async function PostsPage() {
const res = await fetch('https://api.example.com/posts', { cache: 'force-cache' }); // 静的データ取得
const posts = await res.json();
return (
<div>
<h1>ビルド時に取得した投稿</h1>
{posts.map((post) => (
<div key={post.id}>
<h3>{post.title}</h3>
<p>{post.body}</p>
</div>
))}
</div>
);
}
解説:
cache: 'force-cache'
オプションを指定して、ビルド時に取得したデータをキャッシュします。APIの変更頻度が低いデータ(例: ブログ記事など)に適しています。
3. クライアントサイドでのデータ取得
クライアントサイドでデータを取得する場合、useEffect
フックを利用して、コンポーネントのマウント後にAPIリクエストを送信します。
例:
// app/client-fetch/page.jsx
'use client';
import { useEffect, useState } from 'react';
export default function ClientFetchPage() {
const [data, setData] = useState(null);
useEffect(() => {
const fetchData = async () => {
const res = await fetch('https://api.example.com/data');
const result = await res.json();
setData(result);
};
fetchData();
}, []);
if (!data) return <div>Loading...</div>;
return (
<div>
<h1>クライアントサイドでのデータ取得</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
解説:
クライアント側で動的にデータを取得します。
ユーザー依存データやリアルタイム更新が必要なケースに適しています。
ベストプラクティス
React Server Componentsを利用した最新データの取得: 動的データが必要な場合は、RSCでサーバーサイドレンダリングを活用しましょう。
静的データ取得でパフォーマンス向上: 頻繁に変更されないデータは、静的事前レンダリングを使用します。
適切なキャッシュ設定:
cache: 'no-store'
やcache: 'force-cache'
を活用して、ユースケースに合ったデータ取得戦略を選びます。エラーハンドリングを忘れない: APIエラー時にフォールバックコンテンツを用意し、ユーザー体験を損なわないようにしましょう。
Next.js 15ではデータ取得の柔軟性が向上し、パフォーマンスと開発体験がさらに洗練されています。プロジェクトのニーズに応じた最適なデータ取得方法を選び、次世代のウェブアプリケーションを構築しましょう!