【実務・中級編】環境変数でNode.js設定を管理!dotenvとconfigの使い分けとベストプラクティス – 実行環境・ランタイム・コンパイラ生産性向上バイブル

Node.js設定管理の「聖域」:dotenvとconfigで構築する、堅牢かつ高速な環境切り替えアーキテクチャ

開発の現場で最も忌むべきは、「環境変数が見つからない」という初歩的なエラーでデプロイが止まること、そして「どの環境でどの設定が有効か」をコードを追って確認しなければならない状況です。

多くのエンジニアが `dotenv` を導入して満足しますが、真のアーキテクトはそこで止まりません。本稿では、開発スピードを極限まで高め、かつセキュリティを担保する「階層型設定管理」の神髄を伝授します。

—

1. dotenv vs config:なぜ使い分けが必要なのか

まず、設計思想の根本を理解してください。

  • `dotenv` の本質: ローカル開発環境における「機密情報の注入」専用。`.env` ファイルはGit管理外(`.gitignore`)に置くのが鉄則です。
  • `config` (node-config) の本質: アプリケーション全体の「設定値の階層管理」。環境(development, production, test)ごとにデフォルト値を持ち、JSONやYAMLで構造化された設定を型安全に近い形で扱います。

結論: これらを「二者択一」で考えるのは間違いです。「`dotenv` で環境変数を読み込み、`config` でアプリの設定を構造化する」。このハイブリッド構成こそが、大規模開発における唯一の解です。

—

2. 実践:階層構造を持つ設定管理のベストプラクティス

`config` ライブラリは、`config/` ディレクトリ配下のファイルを、Node.jsの起動引数 `NODE_ENV` に応じて自動的にマージします。

推奨ディレクトリ構成

project-root/
├── config/
│ ├── default.json # 全環境共通のデフォルト設定
│ ├── development.json # 開発環境用(上書き)
│ └── production.json # 本番環境用(上書き)
├── .env # ローカル秘密鍵(Git管理外)
├── index.js # エントリーポイント

default.json(構造化の例)

{
“server”: {
“port”: 3000,
“timeout”: 5000
},
“db”: {
“host”: “localhost”,
“poolSize”: 10
}
}

—

3. チーム開発を劇的に加速させる「設定共有」の鉄則

チームで設定ファイルを共有する際、絶対にやってはいけないのが「本番用シークレットをリポジトリに入れること」です。

神テクニック:カスタム環境変数マッピング

`node-config` は `CUSTOM_ENV_VARIABLE` のような命名規則で環境変数を読み込む機能を持ちます。`config/custom-environment-variables.json` を配置してください。

{
“db”: {
“password”: “DB_PASSWORD”
}
}

これにより、`process.env.DB_PASSWORD` が定義されていれば、`config.db.password` に自動注入されます。開発者は `.env.example` をコピーして自分の環境を作るだけ。 チーム全体で設定の「形式」は共有しつつ、「値」は分離する。これがプロの流儀です。

—

4. 開発環境を極限まで効率化する「隠れた」テクニック

VS Code神プラグイン

  • [DotENV](https://marketplace.visualstudio.com/items?itemName=mikestead.dotenv): `.env` ファイルに色付けを行い、構文エラーを防ぎます。
  • [JSON to TS](https://marketplace.visualstudio.com/items?itemName=MariusAlch.json-to-ts): `config` ファイルからTypeScriptの型定義を自動生成する際に必須。

開発スピードを上げる「起動ショートカット」

`package.json` のスクリプトに工夫を凝らしてください。環境変数の注入を自動化します。

“scripts”: {
“dev”: “dotenv -e .env — nodemon src/index.js”,
“start”: “NODE_ENV=production node src/index.js”
}

`dotenv-cli` を使うことで、アプリコードに `require(‘dotenv’).config()` を書く必要がなくなります。エントリーポイントがクリーンに保たれるため、ランタイムの初期化速度がわずかに向上し、コードの汚染を防げます。

—

5. アーキテクトからの提言:セキュリティと運用

最後に、現場で震えるほど役立つ「運用の極意」を共有します。

1. バリデーションを厳格化せよ: `config` を読み込んだ直後に、JoiやZodでスキーマチェックを行ってください。設定値が空のままアプリが起動し、数時間後にクラッシュする事故を100%防げます。
2. 実行環境への注入はCI/CDに任せる: 本番環境(AWS ECS, Kubernetesなど)では、`.env` ファイルを配置してはいけません。Secret Managerから値を引き出し、プロセス環境変数として注入するのが現代の標準です。`node-config` は環境変数を最優先で読み込むため、構成を一切変更せずに本番移行可能です。

「設定はコードである」。
この意識を持つだけで、あなたのチームのデプロイ事故は激減します。今日から `config` を導入し、設定を「迷宮」から「管理された資産」へと昇華させてください。

タイトルとURLをコピーしました