4
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.js は「できるだけ Static にしよう」とする

Next.js の思想はこれ👇

「静的にできるものは、全部静的にして最速で配信しよう」

Static Rendering(静的) と Dynamic Rendering(動的) とは?

一言で言うと

→ 「ページを“いつ”作るか」の違い

Static Rendering(静的レンダリング)

いつ作る?

ビルド時(npm run build のとき)

どういう仕組み?

ビルド時に HTML を先に作っておき、アクセス時は 完成済みHTMLを配信するだけ

特徴

  • 爆速
  • サーバー負荷が低い
  • ロジックはほぼ動かない

  • ブログ記事
  • LP
  • ドキュメント
  • 変わらないページ

Next.jsでの例

export default function Page() {
  return <h1>Hello</h1>;
}

(デフォルトは Static になろうとする)

Dynamic Rendering(動的レンダリング)

いつ作る?

リクエストごと(アクセスされるたび)

どういう仕組み?

アクセスが来るたびに、DBを読む 認証を見る APIを叩く

→ その結果でHTMLを生成

アクセス ─▶ サーバー実行 ─▶ HTML生成 ─▶ 返す

特徴

  • 毎回ロジックが動く
  • ユーザーごとに内容を変えられる
  • 静的より遅い

  • マイページ
  • 管理画面
  • チャット
  • 認証必須ページ

Next.jsでの例

import { cookies } from "next/headers";

export default function Page() {
  const user = cookies().get("user");
  return <div>{user?.value}</div>;
}

Dynamic に確定

Next.js(App Router)での違い

Next.js は「できるだけ Static にしよう」とする

デフォルトでは Static Rendering ですが、、、、
次のどれかがあると Dynamic に昇格します

Dynamic になる条件

  • cookies()
  • headers()
  • 認証情報
  • fetch({ cache: "no-store" })
  • Firestore / DB アクセス
  • export const dynamic = "force-dynamic"

Static でやってはいけない例

ビルド時に

  • Firestoreを読む
  • APIキーを使う
  • 外部APIを叩く

「ビルドが失敗」「本番で壊れる」

これを防ぐための force-dynamic

一文でまとめると

Static = 先に作る / Dynamic = その場で作る

4
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
4
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?