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 の時点でも不安定な機能なので、名前や使い方が変わるかもしれない。

関連

出典