Env-cmdで環境ファイルを使用する方法
序章
環境変数を使用すると、ローカルの開発、テスト、ステージング、ユーザー受け入れテスト(UAT)、本番環境、およびプロジェクトのワークフローの一部であるその他の環境を切り替えることができます。
env-cmd
を使用すると、変数を個別にスクリプトに渡す代わりに、変数を環境ファイル(.env
)にグループ化して、スクリプトに渡すことができます。
この記事では、サンプルプロジェクトでenv-cmd
をインストールして使用します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- Node.jsはローカルにインストールされます。これは、Node.jsのインストール方法とローカル開発環境の作成に従って実行できます。
.gitignore
へのファイルの追加に関するオプションのセクションがあります。 これをフォローしたい場合は、gitのインストールと構成が必要になる場合があります。- ターミナルウィンドウとコードエディタに精通していることも有益です。
注:このチュートリアルは、バージョン9.0.0以降のenv-cmd
のコマンドを使用するように更新されました。
このチュートリアルは、ノードv15.14.0、npm
v7.10.0、およびenv-cmd
v10.0.1で検証されました。
ステップ1-プロジェクトの設定
このチュートリアルは、新しいプロジェクトがあることを前提としています。 新しいディレクトリを作成します。
mkdir env-cmd-example
次に、ディレクトリに移動します。
cd env-cmd-example
一般に、環境ファイルをバージョン管理システムにコミットすることは悪い習慣と見なされています。 リポジトリがフォークまたは共有されている場合、クレデンシャルはプロジェクト履歴に永久に記録されるため、他のユーザーが利用できるようになります。
.gitignoreにファイルを追加することをお勧めします。
注:これは、このチュートリアルの範囲では必須ではありませんが、教育目的でここに示されています。
新しいgit
プロジェクトを初期化します。
git init
.gitignore
ファイルを作成し、パターンを追加して環境ファイルを除外します。
.gitignore
.env .env.js .env.json .env-cmdrc
このチュートリアルでは、.env
、.env.js
、.env.json
、.env-cmdrc
を除外できます。
次に、プロジェクトの.env
ファイルを作成します。
コードエディタでファイルを開き、次のコード行を追加します。
.env
creature=shark green=#008f68 yellow=#fae042
これは、creature
からshark
、green
から#008f68
、yellow
から#fae042
を定義します。
次に、新しいlog.js
ファイルを作成します。
log.js
console.log('NODE_ENV:', process.env.NODE_ENV); console.log('Creature:', process.env.creature); console.log('Green:', process.env.green); console.log('Yellow:', process.env.yellow);
これにより、以前に定義された変数がコンソールに記録されます。 また、NODE_ENV
の値も出力されます。
これで、env-cmd
で環境ファイルを使用するための例が準備されました。
ステップ2–env-cmd
を使用する
最新のnpm
およびyarn
は、依存関係にすることなくenv-cmd
を実行できます。
npxのいずれかを使用します。
npx env-cmd node log.js
またはyarn run
:
yarn run env-cmd node log.js
それ以外の場合は、パッケージを依存関係またはdevDependencyとしてインストールできます。
npm install [email protected]
env-cmd
パッケージは、env-cmd
という名前の実行可能スクリプトをインストールします。このスクリプトは、スクリプトの前に呼び出すことができ、外部ファイルから環境変数を簡単にロードできます。
設定に応じて、いくつかの異なる方法でenv-cmd
を参照できます。
おそらく、パッケージマネージャー間で最も互換性があるのは、package.json
ファイルにカスタムスクリプトを追加することです。
package.json
{ "scripts": { "print-log": "env-cmd node log.js" } }
たとえば、npm
を使用すると、次のコマンドでこのカスタムスクリプトを実行できます。
npm run print-log
コマンドラインから直接env-cmd
を使用する場合は、node_modules
から直接呼び出すことができます。
./node_modules/.bin/env-cmd node log.js
今後、このチュートリアルではnpx
アプローチを使用しますが、すべてのアプローチは同様に機能するように設計されています。
次に、ターミナルでいずれかのアプローチを使用します。
スクリプトの実行方法に関係なく、env-cmd
は.env
ファイルをロードし、ロギングスクリプトは変数を報告します。
OutputNODE_ENV: undefined Creature: shark Green: #008f68 Yellow: #fae042
NODE_ENV
の値がundefined
であることに気付いたかもしれません。 これは、NODE_ENV
が.env
ファイルで定義されていないためです。
env-cmd
を呼び出す前に、NODE_ENV
を渡すことができます。
たとえば、npx
のコマンドは次のとおりです。
NODE_ENV=development npx env-cmd node log.js
NODE_ENV
を定義して、コマンドを再実行してください。
OutputNODE_ENV: development Creature: shark Green: #008f68 Yellow: #fae042
この時点で、env-cmd
を.env
ファイルで使用する方法を学習しました。
ステップ3–さまざまなファイル形式を使用する
env-cmd
は、デフォルトでプロジェクトルートディレクトリに.env
ファイルを想定しています。 ただし、--file
(-f
)オプションを使用して、ファイルの種類とパスを変更できます。
参照方法に関係なく、環境変数を格納するために使用できるさまざまなファイル形式があります。
JSONファイル
.env.json
ファイルの例を次に示します。
.env.json
{ "creature": "shark", "green": "#008f68", "yellow": "#fae042" }
そして、これがenv-cmd
でこのファイルを使用する例です。
NODE_ENV=development npx env-cmd --file .env.json node log.js
これで、JSON環境ファイルの使用方法を学習しました。
JavaScript
.env.js
ファイルの例を次に示します。
.env.js
module.exports = { creature: 'shark', green: '#008f68', yellow: '#fae042' };
そして、これがenv-cmd
でこのファイルを使用する例です。
NODE_ENV=development npx env-cmd --file .env.js node log.js
これで、JavaScript環境ファイルの使用方法を学習しました。
RCファイル
rc
ファイル形式は、単一のJSONファイルで複数の環境を定義し、ファイルではなく名前で環境を参照できるため、特別です。
「runcom」ファイルは、.env-cmdrc
という名前で、プロジェクトのルートに存在する必要があるという点でも特別です。
次に、development
、staging
、およびproduction
用に定義された環境を持つ.env-cmdrc
ファイルの例を示します。
.env-cmdrc
{ "development": { "NODE_ENV": "development", "creature": "shark", "green": "#008f68", "yellow": "#fae042", "otherVar1": 1 }, "staging": { "NODE_ENV": "staging", "creature": "whale", "green": "#6db65b", "yellow": "#efbb35", "otherVar2": 2 }, "production": { "NODE_ENV": "production", "creature": "octopus", "green": "#4aae9b", "yellow": "#dfa612", "otherVar3": 3 } }
.env-cmdrc
値を使用するには、--environments
(-e
)オプションが必要です。
次に、単一の環境を参照できます。
npx env-cmd --environments development node log.js
複数の環境を参照することもできます。これにより、環境の各変数がマージされ、重複する変数がある場合は最後の環境が優先されます。
npx env-cmd --environments development,staging,production node log.js
3つの環境すべてを指定することにより、otherVar
の各値が設定され、残りの変数はリストされた最終環境production
から供給されます。
ステップ4–--fallback
でグレースフルフォールバックを使用する
カスタム環境ファイルが存在しない場合:
npx env-cmd -f .env.missing node log.js
env-cmd
はエラーをスローします:
OutputError: Failed to find .env file at path: .env.missing
カスタムenvファイルパスに予期しない問題が発生した場合、env-cmd
はプロジェクトのルートから.env
ファイルのロードを試みることができます。 これを行うには、--fallback
フラグを渡します。
npx env-cmd --file .env.missing --fallback node log.js
これで、フォールバックする有効な.env
ファイルがある場合、このコマンドはエラーを表示しません。
ステップ5–--no-override
で既存の環境値を使用する
環境にすでに設定されている変数のすべてまたは一部を保持したい場合があります。
.env
ファイルの値を使用する代わりに既存の環境変数を尊重するには、env-cmd
--no-override
フラグを渡します。
NODE_ENV=development creature=squid npx env-cmd --no-override node log.js
これにより、次の出力が得られます。
OutputNODE_ENV: development Creature: squid Green: #008f68 Yellow: #fae042
.env
ファイルで定義されたshark
ではなく、creature
値がsquid
に設定されていることに注意してください。
結論
この記事では、サンプルプロジェクトでenv-cmd
をインストールして使用しました。
環境ファイルを使用すると、「開発」環境と「本番」環境を切り替えるのに役立ちます。