Node.jsアプリケーションでは、開発環境・本番環境・テスト環境など、実行環境によって設定値を柔軟に切り替える必要があります。たとえば、使用するデータベースやAPIキー、ログ出力の詳細度などは環境によって異なるはずです。
本記事では、Node.jsにおける環境ごとの設定管理のベストプラクティスとして、dotenv
やconfig
モジュール、環境変数の使い分けを解説します。
環境設定の基本方針
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による構造的な設定管理まで、目的や規模に応じた設計を取り入れることで、柔軟で安全なアプリケーション運用が可能になります。
本番環境でも開発環境でも安心してデプロイできるよう、設定の管理をしっかり整えておきましょう。