Node.js YAML設定からdotenvを使用した.envへの変換
Node.jsのYAML設定ファイルをdotenvパッケージ互換の.env形式に変換します。JavaScriptランタイムにおけるキー命名パターンと型処理を学びます。
詳細な説明
Node.jsアプリケーションは一般的に、YAML設定ファイル(js-yamlやconfigパッケージを使用)または.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エコシステムにおける主な違い:
型パースは手動。 YAMLは自動的に値を型付けします(数値、ブール値)。dotenvでは
process.envの値は常に文字列です --parseInt()を明示的に呼び出したり、=== 'true'と比較する必要があります。配列はカンマ区切り文字列になる。 YAMLの配列
origins: [a, b]はORIGINS=a,bとして格納し、コード内で.split(',')で分割する必要があります。ネスト構造なし。 YAMLのツリー構造はフラットなENVキーにフラット化する必要があります。消費するコードがオブジェクトの形を再構築する必要があります。
dotenvはデフォルトで変数展開をサポートしない。
${VAR}構文にはdotenv-expandを使用してください。
推奨アプローチ: ローカル開発設定にはYAMLを、デプロイメントシークレットには.envを使用します。configのようなツールは両方をサポートし、環境変数が優先される形でマージできます。
ユースケース
Node.jsアプリケーションをyaml-configベースの設定から、YAML設定ファイルをバンドルできないサーバーレスプラットフォーム(Vercel、Netlify、AWS Lambda)へのデプロイのために環境変数に変換する場合。