IT-Q

NEXT_PUBLIC_ を付けた変数は、いつクライアントに入りますか。

ビルド時にバンドルへ書き込まれ、後から環境変数を変えても反映されません。サーバー側の変数も、静的に作られるページではビルド時に固定されます。イメージの使い回しで踏みます。

面接官が見ているのはビルド時に埋め込まれることの理解。

これは「APIキーのような秘密情報は、どう扱いますか。」への追撃質問です。

よくある答えと、面談でどう見られるか

  • ビルド時に埋め込まれる。実行時に変えても反映されない
    イメージを使い回すコンテナ運用で必ず踏む論点です。
  • 実行時にサーバーから配信される
    されません。ビルド時に値そのものがコードへ埋め込まれます。だからビルドし直さない限り変わりません。
  • 初回アクセス時にクライアントへ渡される
    渡すのではなく、最初から入っています。
  • ビルド時に埋め込まれるが、サーバー側で読む変数は実行時に読まれる
    区別しようとしている点は良いのですが、後半には条件が要ります。サーバー側の変数が実行時に読まれるのは、動的にレンダリングされるページだけです。静的にプリレンダーされるページでは、サーバー側の変数もビルド時に固定されます。

面接官は何を見ているか

  • ビルド時に埋め込まれると答えた
  • 実行時に変えても反映されないと理解している
  • だからコンテナ運用で詰まる、と繋げられた

模範解答

ビルド時にバンドルへ埋め込まれます。

実務で効いてくるのは、ビルド後に環境変数を変えても反映されないことです。Docker イメージを1つ作って開発・ステージング・本番で使い回す運用をしていると、NEXT_PUBLIC_ の値だけがビルド時の環境のまま固定されます。

サーバー側でだけ読む変数は、動的にレンダリングされるページなら実行時に読まれます。ただし静的にプリレンダーされるページでは、サーバー側の変数もビルド時に読まれてHTML に固定されます。実行時の値を使いたい箇所は動的にする必要があります。同じ .env に書いてあっても、どこでいつ読まれるかで挙動が変わる、という点が混乱のもとです。

対象: Next.js 16(App Router) 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。