Node.jsで環境変数をenvファイルから読み込みする正しい手順

Node.jsで環境変数を次のように扱いたいです。

  1. プロジェクトルートに.envファイル作成
  2. そこから環境変数を動的に読み込み
  3. デバッグ・本番ごとに環境値を変えたい

手順を知らなかったので少し苦戦しました。

そこでNode.jsでの.envから環境変数取得…
その方法を忘れないうちに記録しておきます。

1.初めに.envファイルを作成しておく

Node.jsのプロジェクトルートに移動します。

そして .env という名前でファイル作成。

今回の例では以下の環境変数を定義しました。

▼ 超シンプルな .env の設定例

このように 環境変数名="変数値"  のようなシンプルな構文です。1行につき1つの変数を定義するというルールになってます。

好きなように環境変数を用意すればOK

2.dotenvモジュールをインストールする

ただenvファイルを作っても意味がないです。

それをnode側で認識してもらう必要があります。

▼ そこでdotenvをインストールする

これが.envファイル読み込みに必須です。

ちなみに最新verは16.0.3でした。

3.dotenvから.envファイルを認識させる

そしたらdotenvから.envファイルを読み込みます。

例えばExpressを使ってアプリ開発しており、
ディレクトリ構成が次のようだとしましょう。

そしてapp.jsから.envの環境変数を参照します。

その場合、app.jsで以下のようなコードを追加します。

▼ app.jsに追加すべきコード例

このようにdotenvモジュールのconfigメソッドに.envファイルのパスを渡します。ただし相対パスはダメなので path.resolve(__dirname, '../.env')  のように絶対パスに変換してます。

これでNode側でオリジナル環境変数が認識されました。

4.process.envから独自環境変数にアクセス

環境変数へのアクセス方法は簡単です。

単純にprocess.envから参照するだけなので

▼ 独自環境変数にアクセスするコード例

ちなみにprocessはrequireする必要はありません。

▼ processおよびprocess.envの詳細

The process.env property returns an object containing the user environment. See environ(7). It is possible to modify this object, but such modifications will not be reflected outside the Node.js process, or (unless explicitly requested) to other Worker threads. In other words, the following example would not work:

引用元 : https://nodejs.org/api/process.html#processenv

▼ 上記リフjァレンスの意訳

proccess.envプロパティはユーザー環境変数を含んだオブジェクトを返します。それらは書き換え可能ですが、書き換えはNode.jsプロセスあるいはワーカースレッドの外側では反映されません。

環境変数をオブジェクトとして参照できます。

ちなみに実行時に変数の書き換えも可能。
ただしnode.jsプロセスの範囲内でという話です。

5.ついでに.gitignoreから.envを除外する

ここはプロジェクトをgit管理してる場合です。

作成した.envをgit管理下から除外します。

▼ .gitignoreの設定例

こうしておけば環境毎に.envを作成できます。

デバッグ・本番環境ごとに切替可能です。

環境変数を.envから読込のまとめ

ということで簡単に手順まとめます。

以上、Node.jsでの環境変数設定の方法でした。

1つ1つ手順を踏めば難しくありません。ではまた