コンテンツにスキップ

unstable_cache

警告: このAPIは、安定版になった際に use cache に置き換えられます。

unstable_cache は、データベースクエリなどの重い処理の結果をキャッシュし、複数のリクエスト間で再利用することを可能にします。

import { getUser } from './data';
import { unstable_cache } from 'next/cache';
 
const getCachedUser = unstable_cache(
  async (id) => getUser(id),
  ['my-app-user']
);
 
export default async function Component({ userID }) {
  const user = await getCachedUser(userID);
  ...
}

知っておくと良いこと:

  • キャッシュスコープ内で headerscookies のような動的なデータソースにアクセスすることはサポートされていません。キャッシュされた関数内でこのデータが必要な場合は、キャッシュされていない関数外で headers を使用し、必要な動的データを引数として渡してください。
  • このAPIは、Next.js の組み込み データキャッシュ を使用して、リクエストやデプロイメント間で結果を永続化します。

Parameters

const data = unstable_cache(fetchData, keyParts, options)()
  • fetchData: キャッシュしたいデータを取得する非同期関数です。Promise を返す関数である必要があります。
  • keyParts: キャッシュの識別をさらに追加するためのキーの追加配列です。デフォルトでは、unstable_cache はすでに引数と関数の文字列化されたバージョンをキャッシュキーとして使用しています。ほとんどの場合、これはオプションです。使用する必要があるのは、外部変数をパラメータとして渡さずに使用する場合のみです。ただし、関数内で使用されるクロージャをパラメータとして渡さない場合は、それらを追加することが重要です。
  • options: キャッシュの動作を制御するオブジェクトです。以下のプロパティを含むことができます。
    • tags: キャッシュの無効化を制御するために使用できるタグの配列です。Next.js は、関数を固有に識別するためにこれを使用しません。
    • revalidate: キャッシュを再検証するまでの秒数です。無期限にキャッシュするか、一致する revalidateTag() または revalidatePath() メソッドが呼び出されるまでキャッシュするには、省略するか false を渡してください。

戻り値

unstable_cache は、呼び出されると Promise を返し、キャッシュされたデータに解決する関数を返します。データがキャッシュにない場合、指定された関数が呼び出され、その結果がキャッシュされて返されます。

app/page.tsx
import { unstable_cache } from 'next/cache'
 
export default async function Page({
  params,
}: {
  params: Promise<{ userId: string }>
}) {
  const { userId } = await params
  const getCachedUser = unstable_cache(
    async () => {
      return { id: userId }
    },
    [userId], // add the user ID to the cache key
    {
      tags: ['users'],
      revalidate: 60,
    }
  )
 
  //...
}

バージョン履歴

バージョン変更履歴
v14.0.0unstable_cache が導入されました。