IT-Q

APIキーを .env に置くとき、変数名に NEXT_PUBLIC_ を付けるとどうなりますか。

クライアントバンドルに含まれ、ブラウザから読めるようになります。付けてよいのは公開して問題ない値だけです。APIキーに付けると配信されたJSの中から誰でも読めます。

面接官が見ているのは🔴 秘密情報の事故に直結する。基礎として外せない。

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

  • クライアントバンドルに含まれ、ブラウザから読めるようになる
    公開してよい値にだけ付けます。APIキーに付けると丸見えです。
  • サーバー側からも読めるようになる
    接頭辞が無くてもサーバーからは読めます。付けると増えるのはクライアントへの露出です。
  • ビルド時に埋め込まれるだけなので、実行時には見えない
    埋め込まれるからこそ見えます。配信されたJSの中身は誰でも読めます。
  • クライアントに含まれる。逆に接頭辞が無い変数はクライアントでは空文字列になる
    正確です。undefined ではなく空文字列に置き換えられます。

模範解答

クライアントバンドルに含まれ、ブラウザから読めるようになります。Next.js では NEXT_PUBLIC_ で始まる環境変数だけがクライアントに渡されます。APIキーに付けると丸見えになるので、付けるのは公開してよい値だけです。

逆に、接頭辞の無い変数はクライアント側では読めません。公式によれば、接頭辞が無い変数はクライアント向けのコードでは空文字列に置き換えられます。undefined ではなく空文字列です。

もう1点、NEXT_PUBLIC_ の値はビルド時に埋め込まれます。ビルド後に環境変数を変えても反映されないので、1つのイメージを複数環境で使い回す運用では注意が要ります。サーバー側でだけ読む変数は、動的にレンダリングされるページなら実行時に読まれます。ただし静的にプリレンダーされるページでは、サーバー側の変数もビルド時に読まれてHTML に固定されます。実行時の値を使いたい箇所は、動的にする必要があります。

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