Node.js YAML設定からdotenvを使用した.envへの変換

Node.jsのYAML設定ファイルをdotenvパッケージ互換の.env形式に変換します。JavaScriptランタイムにおけるキー命名パターンと型処理を学びます。

Real-World Configs

詳細な説明

Node.jsアプリケーションは一般的に、YAML設定ファイル(js-yamlconfigパッケージを使用)または.envファイル(dotenvを使用)のいずれかを使用します。これらの間の変換には、各アプローチが型、命名、構造をどのように扱うかの理解が必要です。

Node.js config.yml(node-configで使用):

app:
  name: MyAPI
  port: 3000
  host: 0.0.0.0
  cors:
    enabled: true
    origins:
      - http://localhost:3000
      - https://myapp.com
database:
  client: pg
  connection:
    host: localhost
    port: 5432
    database: myapp_dev
    user: postgres
    password: localpass
  pool:
    min: 2
    max: 10
auth:
  jwt_secret: dev-secret-change-me
  token_expiry: 3600
  refresh_expiry: 86400
logging:
  level: debug
  format: json
  file: /var/log/app/combined.log

対応する.envファイル(dotenv用):

# Application
APP_NAME=MyAPI
APP_PORT=3000
APP_HOST=0.0.0.0
APP_CORS_ENABLED=true
APP_CORS_ORIGINS=http://localhost:3000,https://myapp.com

# Database
DATABASE_CLIENT=pg
DATABASE_CONNECTION_HOST=localhost
DATABASE_CONNECTION_PORT=5432
DATABASE_CONNECTION_DATABASE=myapp_dev
DATABASE_CONNECTION_USER=postgres
DATABASE_CONNECTION_PASSWORD=localpass
DATABASE_POOL_MIN=2
DATABASE_POOL_MAX=10

# Auth
AUTH_JWT_SECRET=dev-secret-change-me
AUTH_TOKEN_EXPIRY=3600
AUTH_REFRESH_EXPIRY=86400

# Logging
LOGGING_LEVEL=debug
LOGGING_FORMAT=json
LOGGING_FILE=/var/log/app/combined.log

Node.jsでの.env読み込み:

require('dotenv').config();

const config = {
  app: {
    name: process.env.APP_NAME,
    port: parseInt(process.env.APP_PORT, 10),
    host: process.env.APP_HOST,
    cors: {
      enabled: process.env.APP_CORS_ENABLED === 'true',
      origins: process.env.APP_CORS_ORIGINS?.split(',') || [],
    },
  },
  database: {
    client: process.env.DATABASE_CLIENT,
    connection: {
      host: process.env.DATABASE_CONNECTION_HOST,
      port: parseInt(process.env.DATABASE_CONNECTION_PORT, 10),
      // ...
    },
  },
};

Node.jsエコシステムにおける主な違い:

  1. 型パースは手動。 YAMLは自動的に値を型付けします(数値、ブール値)。dotenvではprocess.envの値は常に文字列です -- parseInt()を明示的に呼び出したり、=== 'true'と比較する必要があります。

  2. 配列はカンマ区切り文字列になる。 YAMLの配列origins: [a, b]ORIGINS=a,bとして格納し、コード内で.split(',')で分割する必要があります。

  3. ネスト構造なし。 YAMLのツリー構造はフラットなENVキーにフラット化する必要があります。消費するコードがオブジェクトの形を再構築する必要があります。

  4. dotenvはデフォルトで変数展開をサポートしない。 ${VAR}構文にはdotenv-expandを使用してください。

推奨アプローチ: ローカル開発設定にはYAMLを、デプロイメントシークレットには.envを使用します。configのようなツールは両方をサポートし、環境変数が優先される形でマージできます。

ユースケース

Node.jsアプリケーションをyaml-configベースの設定から、YAML設定ファイルをバンドルできないサーバーレスプラットフォーム(Vercel、Netlify、AWS Lambda)へのデプロイのために環境変数に変換する場合。

試してみる — YAML ↔ ENV Converter

フルツールを開く