はじめに
ビルドする環境によって、設定する環境変数を変えたいというのはよくあることです。
本番環境がproduction
、開発環境がdevelopment
と大まかには分かれていますが、他にもstaging
であったり、他にもいろいろな環境があるかと思います。
Viteを使ってそれらすべての環境に別々の環境変数を設定する方法を紹介します。
設定方法
2ステップで簡単に対応できます。
.envファイルを用意する
設定したい環境に合わせた.env
ファイルを用意します。
ファイル名は以下のように設定します。
.env.環境名
例えば、production
用であれば
.env.production
となります。
コマンド実行時にmodeを指定する
vite
またはvite build
のいずれにおいても、以下のオプションを設定します。
--mode 環境名
例えば、production
用であれば
vite build --mode production
となります。
挙動を確認する
実際に環境別に設定した変数を使用するとどうなるのかを確認します。
3つの環境変数を用意しました。
「.env」、「.env.test」、「.env.development」です。
VITE_URL=env_url
VITE_ENV=env
VITE_URL=test_url
VITE_TEST=test
VITE_DEV=development
また、環境変数は以下の通り利用します。
const App = () => {
return (
<>
<h3>VITE_URL : {import.meta.env.VITE_URL}</h3>
<h3>VITE_ENV : {import.meta.env.VITE_ENV}</h3>
<h3>VITE_TEST : {import.meta.env.VITE_TEST}</h3>
<h3>VITE_DEV : {import.meta.env.VITE_DEV}</h3>
</>
);
};
export default App;
以下のコマンドを実行します
npx vite --mode test
実行結果は次のようになります。
この実行結果から、以下のことがわかります。
-
.env
ファイルは常に読み込まれる
→VITE_ENV
が読み込まれている -
.env
と.env.環境名
のファイルで変数が競合する場合、.env.環境名
が優先される
→VITE_URL
が競合している - 存在しない環境変数を指定してもエラーにならない
→.env.development
は読み込まれないため、VITE_DEV
は存在しないが、エラーになっていない
このように、全環境で共通して読み込みたい環境変数は.env
に、個別に設定したい変数は環境ごとに設定することで、個別に柔軟な設定をすることができます。
まとめ
今回は環境ごとにViteで設定を用意する方法を確認しました。
Viteの環境変数にはもっと他にもルールが有るのですが、それはまた別の機会に紹介します。