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-cmdv10.0.1で検証されました。
ステップ1-プロジェクトの設定
このチュートリアルは、新しいプロジェクトがあることを前提としています。 新しいディレクトリを作成します。
- mkdir env-cmd-example
次に、ディレクトリに移動します。
- cd env-cmd-example
一般に、環境ファイルをバージョン管理システムにコミットすることは悪い習慣と見なされます。 リポジトリがフォークまたは共有されている場合、クレデンシャルはプロジェクト履歴に永久に記録されるため、他のユーザーが利用できるようになります。
.gitignoreにファイルを追加することをお勧めします。
注:これは、このチュートリアルの範囲では必須ではありませんが、教育目的でここに示されています。
新しいgitプロジェクトを初期化します。
- git init
.gitignoreファイルを作成し、環境ファイルを除外するパターンを追加します。
.env
.env.js
.env.json
.env-cmdrc
このチュートリアルでは、.env、.env.js、.env.json、.env-cmdrcを除外できます。
次に、プロジェクトの.envファイルを作成します。
コードエディタでファイルを開き、次のコード行を追加します。
creature=shark
green=#008f68
yellow=#fae042
これは、creatureからshark、greenから#008f68、yellowから#fae042を定義します。
次に、新しい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 env-cmd@10.0.1
env-cmdパッケージは、env-cmdという名前の実行可能スクリプトをインストールします。このスクリプトは、スクリプトの前に呼び出すことができ、外部ファイルから環境変数を簡単にロードできます。
設定に応じて、いくつかの異なる方法でenv-cmdを参照できます。
おそらく、パッケージマネージャー間で最も互換性があるのは、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ファイルの例を次に示します。
{
"creature": "shark",
"green": "#008f68",
"yellow": "#fae042"
}
そして、これがenv-cmdでこのファイルを使用する例です。
- NODE_ENV=development npx env-cmd --file .env.json node log.js
これで、JSON環境ファイルの使用方法を学習しました。
JavaScript
.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ファイルの例を示します。
{
"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をインストールして使用しました。
環境ファイルを使用すると、「開発」環境と「本番」環境を切り替えるのに役立ちます。