環境変数
例
Next.jsには環境変数のサポートが組み込まれており、以下のことが可能です:
環境変数の読み込み
Next.jsには、.env*
ファイルから環境変数をprocess.env
に読み込むサポートが組み込まれています。
これにより、process.env.DB_HOST
、process.env.DB_USER
、process.env.DB_PASS
がNode.js環境に自動的に読み込まれ、Next.jsデータ取得メソッドとAPIルートで使用できます。
例えば、getStaticProps
を使用する場合:
@next/env
で環境変数を読み込む
Next.js実行時以外(ORMやテストランナーのルート設定ファイルなど)で環境変数を読み込む必要がある場合、@next/env
パッケージを使用できます。
このパッケージは、Next.js内部で.env*
ファイルから環境変数を読み込むために使用されます。
使用するには、パッケージをインストールし、loadEnvConfig
関数を使用して環境変数を読み込みます:
その後、必要に応じて設定をインポートできます。例:
他の変数の参照
Next.jsは、.env*
ファイル内で$
を使用して他の変数を参照する変数を自動的に展開します。例:$VARIABLE
。これにより、他のシークレットを参照できます。例:
上記の例では、process.env.TWITTER_URL
はhttps://x.com/nextjs
に設定されます。
補足: 実際の値に
$
を使用する必要がある場合、エスケープする必要があります(例:\$
)。
ブラウザ用の環境変数のバンドル
非NEXT_PUBLIC_
の環境変数は、Node.js環境でのみ利用可能です。つまり、ブラウザ(クライアントは異なる環境で実行されます)からはアクセスできません。
環境変数の値をブラウザからアクセス可能にするために、Next.jsはビルド時にクライアントに配信されるjsバンドルに値を「インライン展開」し、process.env.[variable]
へのすべての参照を固定値に置き換えることができます。これを行うには、変数にNEXT_PUBLIC_
プレフィックスを付けるだけです。例:
これにより、Next.jsはnext build
を実行する環境の値で、Node.js環境内のprocess.env.NEXT_PUBLIC_ANALYTICS_ID
へのすべての参照を置き換え、コード内のどこでも使用できるようになります。クライアントに送信されるJavaScriptにインライン展開されます。
注意: ビルド後、アプリはこれらの環境変数の変更に応答しなくなります。例えば、Herokuパイプラインを使用して、あるステージングから別のステージングに向けて構築されたイメージを昇格させる、または単一のDockerイメージを複数の環境にビルドしてデプロイする場合、すべての
NEXT_PUBLIC_
変数はビルド時に評価された値で固定されるため、これらの値はプロジェクトがビルドされるときに適切に設定される必要があります。実行時の環境変数にアクセスする必要がある場合、クライアントに提供するための独自のAPIをセットアップする必要があります(オンデマンドまたは初期化中)。
動的なルックアップはインライン展開されないことに注意してください:
ランタイム環境変数
Next.jsは、ビルド時とランタイムの両方の環境変数をサポートします。
デフォルトでは、環境変数はサーバー上でのみ利用可能です。環境変数をブラウザに公開するには、NEXT_PUBLIC_
プレフィックスを付ける必要があります。ただし、これらの公開環境変数はnext build
中にJavaScriptバンドルにインライン展開されます。
ランタイム環境変数を読み取るには、getServerSideProps
またはApp Routerへの段階的な移行をお勧めします。
これにより、異なる値で複数の環境を通じて昇格できる単一のDockerイメージを使用できます。
補足:
register
関数を使用して、サーバー起動時にコードを実行できます。- runtimeConfigオプションの使用は推奨しません。これはスタンドアロン出力モードで機能しないためです。代わりに、incrementally adopting App Routerをお勧めします。
デフォルトの環境変数
通常、.env*
ファイルのみが必要です。ただし、development
(next dev
)またはproduction
(next start
)環境用にいくつかのデフォルト値を追加したい場合があります。
Next.jsでは、.env
(すべての環境)、.env.development
(開発環境)、.env.production
(本番環境)でデフォルト値を設定できます。
補足:
.env
、.env.development
、.env.production
ファイルはデフォルト値を定義するためリポジトリに含める必要があります。すべての.env
ファイルはデフォルトで.gitignore
に含まれており、これらの値をリポジトリにコミットするかどうかを選択できます。
Vercel上の環境変数
Next.jsアプリケーションをVercelにデプロイする場合、環境変数はプロジェクト設定で設定できます。
すべてのタイプの環境変数をそこで設定する必要があります。開発で使用される環境変数も同様に、後でローカルデバイスにダウンロードできます。
開発環境変数を設定している場合、以下のコマンドでローカルマシン用の.env.local
にそれらをプルできます:
補足: Next.jsアプリケーションをVercelにデプロイする場合、
.env*
ファイル内の環境変数は、その名前がNEXT_PUBLIC_
接頭辞を持つ場合を除き、Edge Runtimeで利用できません。環境変数は、すべての環境変数が利用可能なプロジェクト設定で管理することを強くお勧めします。
テスト環境変数
development
とproduction
環境に加えて、3番目のオプションとしてtest
があります。開発または本番環境用のデフォルト値を設定するのと同じ方法で、testing
環境用の.env.test
ファイルでもデフォルト値を設定できます(ただし、これは前の2つほど一般的ではありません)。Next.jsはtesting
環境で.env.development
または.env.production
から環境変数を読み込みません。
これは、jest
やcypress
のようなツールでテストを実行する際に、テスト専用の特定の環境変数を設定する必要がある場合に便利です。NODE_ENV
がtest
に設定されている場合、テストのデフォルト値が読み込まれますが、通常、テストツールがこれを自動的に処理するため、手動で設定する必要はありません。
test
環境とdevelopment
およびproduction
環境との間には、注意すべき小さな違いがあります:.env.local
は読み込まれません。これは、テストが誰にとっても同じ結果を生成することを期待するためです。これにより、各テスト実行で.env.local
(デフォルト値を上書きすることを意図している)を無視して、同じ環境デフォルト値を使用します。
補足: デフォルトの環境変数と同様に、
.env.test
ファイルはリポジトリに含める必要がありますが、.env.test.local
は含めるべきではありません。.env*.local
は.gitignore
を通じて無視されることを意図しています。
ユニットテストを実行する際、@next/env
パッケージのloadEnvConfig
関数を活用することで、Next.jsと同じ方法で環境変数を確実に読み込むことができます。
環境変数の読み込み順序
環境変数は、変数が見つかるまで、以下の順序で探索されます。
process.env
.env.$(NODE_ENV).local
.env.local
(NODE_ENV
がtest
の場合はチェックされません).env.$(NODE_ENV)
.env
例えば、NODE_ENV
がdevelopment
で、.env.development.local
と.env
の両方に変数を定義した場合、.env.development.local
の値が使用されます。
補足:
NODE_ENV
の許可される値はproduction
、development
、test
です。
補足
/src
ディレクトリを使用している場合、.env.*
ファイルはプロジェクトのルートに置く必要があります。- 環境変数
NODE_ENV
が未割り当ての場合、Next.jsはnext dev
コマンド実行時に自動的にdevelopment
を、他のすべてのコマンドでproduction
を割り当てます。
バージョン履歴
バージョン | 変更点 |
---|---|
v9.4.0 | .env とNEXT_PUBLIC_ のサポートが導入されました。 |