0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Next.js14 AppRouter】ページの組み立て方をAppleの商品ページを使ってイメージしてみた。

Last updated at Posted at 2025-01-22

こんにちは。Naotoです。

Next.jsにおけるページの組み立て方について、AppleのMacBookの商品ページを使って、イメージを整理してみました。

また、文中にキャッシュについての記載がありますが、キャッシュに関する説明は省略しています。
以前にまとめた記事がありますので、こちらをご覧ください。

Server Componentsと Client Componentsの分け方

00ADB162-A9A5-4869-AB73-F6D5A92877D7_1_201_a.jpeg.png

Server Component(インタラクションが少ない)→ ピンクの部分

  • ルート(ページ)単位でStatic Rendering(SSG or ISR) or Dynamic Rendering(SSR)かが決まる。
    • 可能な限り、Static Renderingになるようにする。
    • 上記画像の場合は、製品ページのため、Static Renderingがベスト。(更新が少ないため)

Dynamic Rendering(SSR)

  • 以下のいずれかの条件を満たすページは、Dynamic Renderingになる。
    1. データフェッチ時にData Cacheを使っていない。(no-store もしくは、revalidateが0。)
    2. PrismaなどでDBアクセスしているかつ、unstable_cacheを使用していない。
    3. cookies()headers()などのDynamic APIを使用している。
    4. pages.tsxlayout.tsxの中に、dynamic = "force-dynamic"; もしくは、revalidate = 0;を書いている。

  • 1と2に当てはまる場合、Streamingを使用すると、データフェッチ完了前に、静的部分+loading.jsSuspenceのfallbackUIを先に表示しておき、データフェッチ部分は後から表示できる。(Router Cacheに静的部分+loading.jsSuspenceのfallbackUIのキャッシュがある場合はより高速に表示できる。)
    • Streaming未使用時
      image.png

    • Streaming使用時
      image.png

Static Rendering(SSG or ISR)

  • データフェッチがないページはStatic Renderingとなり、Full Route Cacheが使用される。(Data Cacheは使われない。)
  • データフェッチ時にData Cacheを使用している場合は、Static Renderingとなり、Data CacheとFull Route Cacheが使用される。
  • キャッシュがない(切れている)場合は、初回アクセス時にオリジンサーバにアクセスが行われ、その結果を元にキャッシュが生成され、Data CacheおよびFull Route CacheにSETされる。

PPRの場合(Next.js v15)

  • Static RenderingとDynamic Renderingの併用ができる。
  • 静的部分+loading.jsSuspenseのfallbackUIをStatic RenderingとしてFull Route Cacheを使用して瞬時に表示し、動的(データフェッチ部分)のみDynamic Rendering(SSR)で後から表示できる。

Client Component(インタラクションが多い部分)→ 青の部分

  • Client Componentによって形成されている。
  • ピンク部分の画面を表示するためのHTML + RSC Payloadと一緒に送られてくるJavaScriptバンドルによってクライアント側で画面が作成される。
  • CSRではあるが、初期アクセス時においては、静的部分はあらかじめサーバー側でレンダリングされ、クライアント側ではハイドレーションのみ行われる。
  • 初回アクセス時以降の操作時は、クライアント上で再レンダリングされる。(SPAのイメージ)

まとめ

AppleのMacBook商品ページの場合、上記のようなイメージになるのかなと思います。
また、PPRについては、Next.js v15以降の新機能になります。
今までページごとにStatic/Dynamic Renderingを決める必要がありましたが、PPRが登場すれば、コンポーネント単位で、上記を決めることになると思います。

今回の記事は以上です。

最後までお読みいただきありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?