【Node.js】環境別に設定を切り替えるconfig設計術|dotenv・config・環境変数の使い分け

【Node.js】環境別に設定を切り替えるconfig設計術|dotenv・config・環境変数の使い分け Node.js

Node.jsアプリケーションでは、開発環境・本番環境・テスト環境など、実行環境によって設定値を柔軟に切り替える必要があります。たとえば、使用するデータベースやAPIキー、ログ出力の詳細度などは環境によって異なるはずです。

本記事では、Node.jsにおける環境ごとの設定管理のベストプラクティスとして、dotenvconfigモジュール、環境変数の使い分けを解説します。

環境設定の基本方針

Node.jsの設定切り替えでは、以下の3点を意識することが重要です。

  • 環境ごとに切り替えられる(開発・本番・テスト)
  • コードに機密情報を含めない(APIキー・認証情報)
  • 設定が再利用可能で分かりやすい(明示的な管理)

この方針に沿って、環境変数・dotenv・configを使い分けていきます。

方法①:環境変数(process.env)による切り替え

Node.jsでは process.env を使って、環境変数にアクセスできます。例えば:

const dbHost = process.env.DB_HOST || 'localhost';

これは、外部から DB_HOST が設定されていればそれを使用し、なければ localhost を使う、という意味です。

起動時に以下のように環境変数を渡します:

DB_HOST=prod-db.example.com node app.js

Windowsの場合は set DB_HOST=xxx を先に実行します。

方法②:dotenvモジュールで.envファイルを活用

環境変数の管理をファイルベースで行いたい場合は dotenv が便利です。インストールは以下の通りです:

npm install dotenv

次に、プロジェクトルートに .env ファイルを作成します:

DB_HOST=localhost
DB_USER=root
DB_PASS=password

そして、アプリの冒頭で読み込みます:

require('dotenv').config();

console.log(process.env.DB_HOST); // localhost

Gitなどで共有する場合は .env.gitignore に含めて、機密情報の漏洩を防ぎます。

方法③:configモジュールで環境ごとにファイル分離

環境ごとに設定ファイルを明示的に分けたい場合は、configモジュールが非常に有効です。

npm install config

以下のように config フォルダと各設定ファイルを用意します:

config/
├── default.json
├── production.json
└── development.json

default.json は共通設定、他は環境固有の上書き設定です。例:

// config/default.json
{
  "db": {
    "host": "localhost",
    "user": "root"
  }
}
// config/production.json
{
  "db": {
    "host": "prod-db.example.com"
  }
}

Node.js内では以下のように読み込みます:

const config = require('config');

const dbHost = config.get('db.host');

環境を切り替えるには、NODE_ENV を設定します:

NODE_ENV=production node app.js

使い分けのベストプラクティス

以下のように、用途や規模に応じて使い分けると良いでしょう:

  • 小規模な個人開発:dotenvで完結
  • チーム開発・複数環境:configでファイル分離しつつdotenvで機密情報を注入
  • Docker/Kubernetes:環境変数による完全制御

まとめ

Node.jsのアプリケーションでは、環境ごとに設定を切り替えられるようにしておくことが非常に重要です。

dotenvでのシンプルな変数読み込みから、configによる構造的な設定管理まで、目的や規模に応じた設計を取り入れることで、柔軟で安全なアプリケーション運用が可能になります。

本番環境でも開発環境でも安心してデプロイできるよう、設定の管理をしっかり整えておきましょう。