TL;DR
Next.js で、fetch 以外の処理でも Data Cache を作れるようにする関数。重いデータベースクエリなどの結果をキャッシュし、複数のリクエストで再利用できる。
なぜ必要か
Data Cache は fetch の結果にしか効かない。Prisma Client のように fetch を使わずにデータを取る場合に、この関数で同じようにキャッシュする。
仕組み
import { unstable_cache } from "next/cache"
const data = unstable_cache(fetchData, keyParts, options)()fetchData: キャッシュするデータを取得する非同期関数keyParts: キャッシュを一意に識別するキーとして使う文字列の配列options: キャッシュの動作を制御するオブジェクト。On-demand Revalidation に使うtagsや、Time-based Revalidation に使うrevalidateを指定できる
例
import { unstable_cache } from "next/cache"
export default async function Page({ params }: { params: { userID: string } }) {
const getCachedUser = unstable_cache(
async () => {
return { id: params.userID }
},
[params.userID],
{
tags: ["cached-user-tag"],
revalidate: 60,
},
)
// ...
}React.cache と違い、コンポーネントの中で使える。
注意点
Next.js 15 の時点でも不安定な機能なので、名前や使い方が変わるかもしれない。