Next.js 14 App Router で Django DRF などのバックエンドからのシグナルを受け取り、キャッシュをリバリデートする方法を解説します。リアルタイムデータ更新の仕組みについても紹介します。
Next.js 14 の App Router では、キャッシュを利用して高速なページレンダリングが可能ですが、バックエンド(例えば Django DRF)でデータが更新された場合、キャッシュを手動でリバリデート(再検証) する必要があります。
本記事では、Next.js 14 の app/api/revalidate/route.js
を利用して、Django DRF からのシグナル(例: post_save
など)を受け取り、キャッシュをリバリデートする方法について詳しく解説します。
Next.js の App Router では、自動キャッシュ管理 が導入されており、デフォルトでページや API のレスポンスをキャッシュします。データが更新された際に、最新情報を反映するためには、手動でキャッシュをリバリデートする必要があります。
リバリデーションには、以下の方法があります。
revalidateTag(tag)
→ 指定したタグに関連するキャッシュをリバリデートrevalidatePath(path)
→ 指定したパスのキャッシュをリバリデートNext.js の App Router では、API ルートを app/api/revalidate/route.js
に定義し、バックエンドからのリクエストを受け取ってキャッシュをリバリデートできます。
JAVASCRIPT// app/api/revalidate/route.js import { revalidateTag, revalidatePath } from "next/cache"; import { NextResponse } from "next/server"; export async function POST(req) { try { const { tag, path, secret } = await req.json(); if (secret !== process.env.REVALIDATE_SECRET) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } if (tag) { revalidateTag(tag); } if (path) { revalidatePath(path); } return NextResponse.json({ success: true }); } catch (error) { return NextResponse.json( { error: "Internal Server Error" }, { status: 500 } ); } }
✅ ポイント
POST
メソッドで Django などのバックエンドからのリクエストを受け取る。revalidateTag(tag)
を使用すると、特定のタグに関連するキャッシュをリバリデート可能。revalidatePath(path)
を使用すると、特定のページのキャッシュをリバリデート可能。REVALIDATE_SECRET
で認証を行う。Django 側でデータが更新された際に、Next.js の API にリクエストを送信します。Django の signals.py
で post_save
シグナルを利用して、Next.js の API を呼び出します。
PYTHONimport requests from django.db.models.signals import post_save from django.dispatch import receiver from myapp.models import Article NEXTJS_REVALIDATE_URL = "https://your-next-app.com/api/revalidate" NEXTJS_REVALIDATE_SECRET = "your_secret_key" @receiver(post_save, sender=Article) def clear_nextjs_cache(sender, instance, **kwargs): data = { "path": f"/articles/{instance.slug}", "tag": "articles", "secret": NEXTJS_REVALIDATE_SECRET } requests.post(NEXTJS_REVALIDATE_URL, json=data)
✅ ポイント
post_save
シグナルを利用し、記事の更新時に Next.js にリクエストを送信。path
に更新された記事の URL を指定し、そのページのキャッシュをリバリデート。tag
に articles
を指定し、関連するデータのキャッシュもリバリデート。NEXTJS_REVALIDATE_SECRET
を使用して、Next.js の API の認証を確保。リバリデーションが正常に動作するか確認するには、以下の手順を実行します。
/api/revalidate
にリクエストが送信される。/articles/{slug}
にアクセスし、最新のデータが反映されているか確認。Next.js 14 App Router では、next/cache
の revalidateTag
や revalidatePath
を活用することで、
Django DRF などのバックエンドからのデータ更新を反映することが可能です。
✅ 学んだこと
app/api/revalidate/route.js
を作成し、バックエンドからのリクエストを受け取る。revalidateTag(tag)
で特定のタグに関連するキャッシュをリバリデート。revalidatePath(path)
で特定のページのキャッシュをリバリデート。signals.py
を利用し、post_save
で Next.js の API にリクエストを送信。Next.js のキャッシュ管理を適切に活用し、パフォーマンスとリアルタイムデータの両方を最大化しましょう。
当サイトの情報は、一般的な参考情報として提供しております。
正確な情報の掲載に努めておりますが、その内容の正確性・完全性・最新性を保証するものではありません。
記事の内容をご利用の際は、ご自身の責任において判断し、必要に応じて専門家にご相談ください。
当サイトの情報の利用により生じたいかなる損害についても、一切の責任を負いかねますのでご了承ください。
※ 本ページでは、著作権法に基づき、適正な引用の範囲内でコンテンツを紹介しています。
オリジナルの情報は発信元をご確認ください。
もし問題がありましたら、こちら からお問い合わせください。