1
/
5

【Next.js】App Router で使用できるキャッシュまとめ


弊社エンジニアの記事になります。

はじめに

今回は Next.js の App Router で使えるキャッシュの理解をざーっと深めていきたいと思います!

というのも App Router で Pages Router より細かなキャッシュ戦略を使用することができそうだとは思っていたのですが、細かくどんなことができるのかまでは確認していませんでした。

最近リリースされた Next.js v14.1 では、今まで各 Next.js サーバーのファイルシステム(ディスク)にしか保存することができなかったキャッシュの保存先を、Redis や AWS S3 などに設定することができるようになりました。そのため、クラウドサービスを使用したサーバーインスタンス数をスケールアウトさせるケースなどにも各インスタンス間でキャッシュを共有することが可能になりました。

このようにNext.jsでのキャッシュ周りの利便性が高くなってきていますので、今一度 Next.js の App Router で使用できるキャッシュをまとめてみようと思います!

App Router で使用できるキャッシュの種類は4種類

App Router で使用できるキャッシュの種類は下記4つになります。( Next.js 公式サイトから抜粋 )

MechanismWhatWherepurposeDurationRequest MemoizationReturn values of functionsServerRe-use data in a React Component treePer-request lifecycleData CacheDataServerStore data across user requests and deploymentsPersist (can be revalidated)Full Route CacheHTML and RSC payloadServerReduce rendering cost and improve performancePersist (can be revalidated)Router CacheRSC PayloadClientReduce server requests on navigationUser session or time-based

それぞれ、クライアントでのキャッシュかサーバー側でのキャッシュかで分かれています。

では一つずつ確認していきましょう。

Request Memoization

これは 1 サーバーリクエストごとのキャッシュになります。

1 サーバーリクエスト間で複数回、React Component Tree の様々な場所で同じ URL に同じオプションで fetch リクエストを行っていても、React が fetch の結果をキャッシュしてくれるためキャッシュ生成後のリクエストは全て実際にリクエストを飛ばさずキャッシュの値を自動的に使用してくれます。そのため、パフォーマンスのことを考えて Top のコンポーネントからリクエストを飛ばし、そのデータを実際に使用する子コンポーネントに橋渡ししていくなどといった必要がなくなります。

そして 1 サーバーリクエスト間でのキャッシュであるため、レンダリングが完了すると全ての Request Memoization はクリアされます。

*注意
Request Memoization は fetch を使用した GET リクエストにしか適用されません。
(Graphql クライアントなどを使用していて fetch を利用していない場合、react の cache function を使用することでデータのキャッシュが行えます。)

Request Memoization の流れ

( Next.js 公式サイトから抜粋 )

キャッシュの無効化

AbortControllersignal を使用することで、キャッシュを無効化できます。

const { signal } = new AbortController()
fetch(url, { signal })

Data Cache

Data Cache は fetch を利用して取得したデータを、Next.js サーバーへのリクエスト、デプロイメント間に渡ってキャッシュ化し永続化します。デプロイメント間に渡って永続化されるというのは、ビルドを行なって新しいバージョンを作成したとしても、キャッシュのデータは引き継がれるということです。

記事の続きは下のリンクをクリック!

https://rightcode.co.jp/blogs/45465


エンジニア積極採用中です!

現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!

採用ページはこちら:https://rightcode.co.jp/recruit

社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life

社長と一杯飲みながらお話しませんか?(転職者向け)

特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk

もっとワクワクしたいあなたへ

現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!

ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。

有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。

  • もっと大きなことに挑戦したい!
  • エンジニアとしてもっと成長したい!
  • モダンな技術に触れたい!

現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?

ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。

  • ライトコードの魅力を知っていただきたい!
  • 社風や文化なども知っていただきたい!
  • 技術に対して熱意のある方に入社していただきたい!

一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。

【コーポレートサイト】https://rightcode.co.jp/

【採用募集】https://rightcode.co.jp/recruit(こちらからの応募がスムーズ)

【wantedlyぺージ】https://www.wantedly.com/companies/rightcode


Invitation from 株式会社ライトコード
If this story triggered your interest, have a chat with the team?
株式会社ライトコード's job postings

Weekly ranking

Show other rankings
Like Hiroyuki Choshi's Story
Let Hiroyuki Choshi's company know you're interested in their content