NEXT_PUBLIC_ を付けた変数は、いつクライアントに入りますか。
ビルド時にバンドルへ書き込まれ、後から環境変数を変えても反映されません。サーバー側の変数も、静的に作られるページではビルド時に固定されます。イメージの使い回しで踏みます。
面接官が見ているのはビルド時に埋め込まれることの理解。
これは「APIキーのような秘密情報は、どう扱いますか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- ビルド時に埋め込まれる。実行時に変えても反映されない
イメージを使い回すコンテナ運用で必ず踏む論点です。 - 実行時にサーバーから配信される
されません。ビルド時に値そのものがコードへ埋め込まれます。だからビルドし直さない限り変わりません。 - 初回アクセス時にクライアントへ渡される
渡すのではなく、最初から入っています。 - ビルド時に埋め込まれるが、サーバー側で読む変数は実行時に読まれる
区別しようとしている点は良いのですが、後半には条件が要ります。サーバー側の変数が実行時に読まれるのは、動的にレンダリングされるページだけです。静的にプリレンダーされるページでは、サーバー側の変数もビルド時に固定されます。
面接官は何を見ているか
- ビルド時に埋め込まれると答えた
- 実行時に変えても反映されないと理解している
- だからコンテナ運用で詰まる、と繋げられた
模範解答
ビルド時にバンドルへ埋め込まれます。
実務で効いてくるのは、ビルド後に環境変数を変えても反映されないことです。Docker イメージを1つ作って開発・ステージング・本番で使い回す運用をしていると、NEXT_PUBLIC_ の値だけがビルド時の環境のまま固定されます。
サーバー側でだけ読む変数は、動的にレンダリングされるページなら実行時に読まれます。ただし静的にプリレンダーされるページでは、サーバー側の変数もビルド時に読まれてHTML に固定されます。実行時の値を使いたい箇所は動的にする必要があります。同じ .env に書いてあっても、どこでいつ読まれるかで挙動が変わる、という点が混乱のもとです。
対象: Next.js 16(App Router) 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。