Environment Variables
Examples
Next.js は、組み込みの environment variables サポートを備えており、以下のことが可能です:
.env.local
を使用して environment variables をロードしますNEXT_PUBLIC_
のプレフィックスを付けて、ブラウザ用の environment variables をバンドルします
Loading Environment Variables
Next.js は、.env.local
からprocess.env
に loading environment variables ための組み込みサポートを持っています。
DB_HOST=localhost
DB_USER=myuser
DB_PASS=mypassword
これにより、process.env.DB_HOST
、process.env.DB_USER
、process.env.DB_PASS
は自動的に Node.js の環境に読み込まれます。これにより、Next.js のデータ取得方法やAPI routesでそれらを使用することができます。
例えば、getStaticProps
を使用すると:
export async function getStaticProps() {
const db = await myDB.connect({
host: process.env.DB_HOST,
username: process.env.DB_USER,
password: process.env.DB_PASS,
})
// ...
}
他の変数を参照する
Next.js は、$
を使って他の変数を参照する変数を自動的に展開します。たとえば、.env*
ファイル内の $VARIABLE
。これにより、他のシークレットを参照することができます。例えば:
TWITTER_USER=nextjs
TWITTER_URL=https://twitter.com/$TWITTER_USER
上記の例では、process.env.TWITTER_URL
はhttps://twitter.com/nextjs
に設定されます。
Good to know: 実際の value に
$
が必要な variable を使用する場合、例えば\$
のようにエスケープする必要があります。
Bundling Environment Variables for the Browser
非 NEXT_PUBLIC_
environment variables は、 Node.js 環境でのみ利用可能であり、それらはブラウザ ( client は別の環境で動作します) にはアクセスできません。
環境の variable の value をブラウザで利用可能にするために、Next.js は build 時に value を js バンドルに"インライン"することができます。この js バンドルは client に配信され、process.env.[variable]
へのすべての参照をハードコーディングした value で置き換えます。これを行うように指示するためには、単にNEXT_PUBLIC_
で variable をプレフィックスするだけです。例えば:
NEXT_PUBLIC_ANALYTICS_ID=abcdefghijk
これは、process.env.NEXT_PUBLIC_ANALYTICS_ID
へのすべての参照をnext build
を実行する環境からの value に置換するように Next.js に指示します。これにより、コードの任意の場所でそれを使用することができます。それは、ブラウザに送信される任意の JavaScript にインライン化されます。
注意: build 後、あなたの app はこれらの environment variables への変更には反応しなくなります。例えば、Heroku パイプラインを使用して一つの環境で build されたスラッグを別の環境にプロモートした場合、または build と deploy の一つの Docker の image を複数の環境に配置した場合、全ての
NEXT_PUBLIC_
variables は、build 時に評価された value でフリーズされるので、プロジェクトが build される際にこれらの value は適切に設定する必要があります。もし、runtime の環境 value にアクセスする必要があるなら、それらを client に提供するための独自の API をセットアップする必要があります(オンデマンドまたは初期化時に)。
import setupAnalyticsService from '../lib/my-analytics-service'
// 'NEXT_PUBLIC_ANALYTICS_ID' can be used here as it's prefixed by 'NEXT_PUBLIC_'.
// It will be transformed at build time to `setupAnalyticsService('abcdefghijk')`.
setupAnalyticsService(process.env.NEXT_PUBLIC_ANALYTICS_ID)
function HomePage() {
return <h1>Hello World</h1>
}
export default HomePage
dynamic 検索はインライン化されません。例えば:
// This will NOT be inlined, because it uses a variable
const varName = "NEXT_PUBLIC_ANALYTICS_ID";
setupAnalyticsService(process.env[varName]);
// This will NOT be inlined, because it uses a variable
const env = process.env;
setupAnalyticsService(env.NEXT_PUBLIC_ANALYTICS_ID);
Runtime Environment Variables
Next.js は、build 時間と runtime environment variables の両方をサポートすることができます。
default で、environment variables は server 上でのみ使用可能です。 environment variables をブラウザで利用するためには、それをNEXT_PUBLIC_
にプレフィックスする必要があります。ただし、これらの公開 environment variables は、next build
中に JavaScript バンドルにインライン化されます。
runtime environment variables を読むためには、getServerSideProps
を使うか、App Router の段階的な採用を推奨します。 App Router を使用すると、dynamic レンダリングの間に server で安全に environment variables を読むことができます。これにより、異なる値を持つ複数の環境でプロモーション可能な一つの Docker の image を使用することができます。
import { unstable_noStore as noStore } from "next/cache";
export default function Component() {
noStore();
// cookies(), headers(), and other dynamic functions
// will also opt into dynamic rendering, making
// this env variable is evaluated at runtime
const value = process.env.MY_VALUE;
// ...
}
Good to know:
- ご利用いただけます code を server の起動時に、
register
functionを使用して実行します。- 私たちはruntimeConfigオプションの使用をお勧めしません。それはスタンドアロン出力モードとは互換性がありません。代わりに、App Router をincrementally adoptingすることをお勧めします。
Default Environment Variables
一般的には、一つの .env.local
ファイルだけが必要です。しかし、時として development
(next dev
) や production
(next start
) 環境に対していくつかの default を追加したい場合もあります。
Next.js は、.env
(すべての環境)、.env.development
(development 環境)、および.env.production
(production 環境)で default を設定することを可能にします。
.env.local
は常に default の設定を上書きします。
Good to know:
.env
、.env.development
、そして.env.production
ファイルは default を定義するため、リポジトリに含めるべきです。.env*.local
は.gitignore
に追加すべきです、なぜならそれらのファイルは無視することを意図しているからです。.env.local
は秘密情報を保存することができます。
Environment Variables on Vercel
あなたの Next.js アプリケーションを Vercel にデプロイする際、 Environment Variables は プロジェクトの Settings で設定 することができます。
すべての type の Environment Variables はそこに設定する必要があります。 Development で使用される Environment Variables でさえも - これは後であなたのローカルデバイスにダウンロード することができます。
あなたがDevelopment Environment Variables を設定した場合、以下のコマンドを使用して、それらを.env.local
に取り込み、ローカルマシンで使用できます。
vercel env pull .env.local
Good to know: Vercel に対して Next.js アプリケーションをデプロイする際には、
.env*
ファイル内の environment variables がNEXT_PUBLIC_
で始まっていない限り、 Edge Runtime で利用できるようにはなりません。我々は、全ての environment variables が利用可能な Project Settings で 貴方の environment variables を管理することを強く推奨いたします。
Test Environment Variables
development
とproduction
の環境以外に、3 つ目の選択肢が利用可能です:それはtest
です。 development や production の環境で default を設定するのと同じように、testing
環境用の .env.test
ファイルで同じことを行うことができます(ただし、このオプションは前述の 2 つほど一般的ではありません)。 Next.js はtesting
環境で.env.development
や.env.production
から environment variables を読み込みません。
この機能は、jest
やcypress
のようなツールでテストを実行する際に、テスト目的のためだけに特定の environment variables を設定する必要がある場合に便利です。 Test default の値は、NODE_ENV
がtest
に設定されている場合にロードされますが、通常はこれを手動で行う必要はありません。なぜなら、テストツールが代わりに処理してくれるからです。
test
環境と、development
およびproduction
には少し違いがあり、心に留めておく必要があります:テストは全員が同じ結果を出すことを期待するため、.env.local
は読み込まれません。このように、すべての test 実行は、あなたの.env.local
(これは default 設定を上書きすることを目的としています)を無視して、異なる実行間で同じ envdefault を使用します。
Good to know: Default Environment Variables と似ていますが、
.env.test
ファイルはリポジトリに含まれるべきですが、.env.test.local
は含まれるべきではありません。.env*.local
は.gitignore
を通じて無視されることを意図しています。
ユニットテストを実行する際に、@next/env
パッケージのloadEnvConfig
関数を利用することで、Next.js が行うのと同じ方法で environment variables をロードすることを確認できます。
// The below can be used in a Jest global setup file or similar for your testing set-up
import { loadEnvConfig } from "@next/env";
export default async () => {
const projectDir = process.cwd();
loadEnvConfig(projectDir);
};
Environment Variable Load Order
Environment variables は、以下の場所で順番に探され、 variable が見つかった時点で探索が停止します。
process.env
.env.$(NODE_ENV).local
.env.local
(NODE_ENV
がtest
のときはチェックされません。).env.$(NODE_ENV)
.env
たとえば、NODE_ENV
がdevelopment
で、.env.development.local
と.env
の両方で variable を定義した場合、.env.development.local
の value が使用されます。
Good to know:
NODE_ENV
に許可される値は、production
、development
、test
です。
Good to know
- あなたが
/src
ディレクトリを使用している場合、.env.*
ファイルはプロジェクトの root に残すべきです。 - もし環境の variable である
NODE_ENV
が未割り当てである場合、Next.js はnext dev
コマンドを実行するときに自動的にdevelopment
を割り当て、または他のすべてのコマンドに対してproduction
を割り当てます。
Version History
Version | Changes |
---|---|
v9.4.0 | .env と NEXT_PUBLIC_ のサポートが導入されました。 |