Node.jsで環境変数を次のように扱いたいです。
- プロジェクトルートに.envファイル作成
- そこから環境変数を動的に読み込み
- デバッグ・本番ごとに環境値を変えたい
手順を知らなかったので少し苦戦しました。
そこでNode.jsでの.envから環境変数取得…
その方法を忘れないうちに記録しておきます。
このページの目次
1.初めに.envファイルを作成しておく
Node.jsのプロジェクトルートに移動します。
そして .env という名前でファイル作成。
今回の例では以下の環境変数を定義しました。
▼ 超シンプルな .env の設定例
1 2 3 |
APP_NAME="Sample app" APP_VERSION_NAME="1.0.0" APP_VERSION_CODE=1 |
このように 環境変数名="変数値" のようなシンプルな構文です。1行につき1つの変数を定義するというルールになってます。
好きなように環境変数を用意すればOK
2.dotenvモジュールをインストールする
ただenvファイルを作っても意味がないです。
それをnode側で認識してもらう必要があります。
▼ そこでdotenvをインストールする
1 |
> npm install dotenv |
これが.envファイル読み込みに必須です。
ちなみに最新verは16.0.3でした。
3.dotenvから.envファイルを認識させる
そしたらdotenvから.envファイルを読み込みます。
例えばExpressを使ってアプリ開発しており、
ディレクトリ構成が次のようだとしましょう。
1 2 3 4 5 6 |
プロジェクトルート - node_modules - .env - app - app.js - ... |
そしてapp.jsから.envの環境変数を参照します。
その場合、app.jsで以下のようなコードを追加します。
▼ app.jsに追加すべきコード例
1 2 3 4 5 6 |
const path = require('path'); /// .envから環境変数取り込み require('dotenv').config({ path: path.resolve(__dirname, '../.env') }); |
このようにdotenvモジュールのconfigメソッドに.envファイルのパスを渡します。ただし相対パスはダメなので path.resolve(__dirname, '../.env') のように絶対パスに変換してます。
これでNode側でオリジナル環境変数が認識されました。
4.process.envから独自環境変数にアクセス
環境変数へのアクセス方法は簡単です。
単純にprocess.envから参照するだけなので
▼ 独自環境変数にアクセスするコード例
1 2 3 4 5 6 7 8 9 |
/// 必要な環境変数にアクセス const APP_NAME = process.env.APP_NAME; const APP_VERSION_NAME = process.env.APP_VERSION_NAME; const APP_VERSION_CODE = process.env.APP_VERSION_CODE; /// 念のために環境変数を表示 console.log('App name : ', APP_NAME); console.log('App ver name : ', APP_VERSION_NAME); console.log('App ver code : ', APP_VERSION_CODE); |
ちなみに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:
▼ 上記リフjァレンスの意訳
proccess.envプロパティはユーザー環境変数を含んだオブジェクトを返します。それらは書き換え可能ですが、書き換えはNode.jsプロセスあるいはワーカースレッドの外側では反映されません。
環境変数をオブジェクトとして参照できます。
ちなみに実行時に変数の書き換えも可能。
ただしnode.jsプロセスの範囲内でという話です。
5.ついでに.gitignoreから.envを除外する
ここはプロジェクトをgit管理してる場合です。
作成した.envをgit管理下から除外します。
▼ .gitignoreの設定例
1 2 |
/node_modules .env |
こうしておけば環境毎に.envを作成できます。
デバッグ・本番環境ごとに切替可能です。
環境変数を.envから読込のまとめ
ということで簡単に手順まとめます。
- 初めに.envファイルを作成しておく
- dotenvモジュールをインストールする
- dotenvから.envファイルを認識させる
- process.envから独自環境変数にアクセス
- ついでに.gitignoreから.envを除外する
以上、Node.jsでの環境変数設定の方法でした。
1つ1つ手順を踏めば難しくありません。ではまた