Node.js 再入門メモ(その 3)

まえがき

前回の続き。 今回は、ソースコードから環境依存の設定を分離するメモ。 dotenv を使用するとラクらしい。

例題となるソースは以下の通り。 ポート番号の 3000 がベタ書きされているので、なんとかしたい。

app.js
const http = require('http')

let server = http.createServer( 
  (request, response) => {
    response.end('Hello, World!')
  }
)
server.listen(3000)

Qiita で調べればすぐにヒットするような話だが、それだと僕がいつまで経っても覚えないので、がんばって手を動かす。

dotenv とは

公式によると『dotenv とは、設定ファイル .env に宣言した環境変数を process.env にロードするためのゼロ依存モジュールである。 ソースコードとプログラムの構成環境の設定を分離することは、The Twelve-Factor App に基づいている』らしい。

Dotenv is a zero-dependency module that loads environment variables from a .env file into process.env. Storing configuration in the environment separate from code is based on The Twelve-Factor App methodology.

インストールと初期設定

まずはターミナルを開き、プロジェクトディレクトリに cd して、以下のコマンドを叩く。 このコマンド一発で dotenv のインストールが完了する。

$ npm install dotenv --save

次に、プロジェクトディレクトリの直下に .env ファイルを作成する。

.env は 変数名=値 という書式で、1 行につき 1 変数を宣言できる。 以下は、HTTP_PORTという環境変数を宣言し、初期値3000を与えている。

.env
HTTP_PORT=3000

なお、.env は間違っても git にコミットされないよう、無視リストに追加しておく。

.gitignore
/.env

試運転

.env で定義した環境変数は、JavaScript から process.env.変数名 で参照可能である(dotenv モジュールをロードする必要がある)。

app.js
require('dotenv').config()

console.log(process.env.HTTP_PORT)

ターミナル上で実行すると、先ほど設定した 3000 が表示される。

$ node app.js

マジックナンバの追放

以上を踏まえ、当初のコードからマジックナンバを追放すると以下の通りとなる。

app.js
const http = require('http')
require('dotenv').config() // NEW!!

let server = http.createServer( 
  (request, response) => {
    response.end('Hello, World!')
  }
)
server.listen(process.env.HTTP_PORT) // NEW!!

おまけ

そろそろ細々こまごました内容のページが増えてきたので、 Node 関連のエントリには、Node タグを付けることにした。

tercel-s.hatenablog.jp