##イントロダクション
Node.jsでローカルの開発環境と本番環境で設定を切り替えたいとき場面は多々ありますが、
その切り替え手法として自分としてのベストプラクティスを載せておきます。
変更前
<開発環境用>
/scripts/config.dev.js
export const config = {
mail : {
host: 'mailhog',
port: 1025,
}
}
<ステージング用>
/scripts/config.stg.js
export const config = {
mail : {
host: 'postfix',
port: 25,
auth: {
user: 'user',
pass: '12345678'
}
}
}
<本番環境用>
/scripts/config.prd.js
export const config = {
mail : {
host: 'postfix',
port: 25,
auth: {
user: 'user',
pass: '12345678'
}
}
}
読み込み元のファイル
(※ビルドツールを使用する前提で記載していますので、直に書く場合はimportではなくrequireの書き方になります。)
/scripts/app.js
import { config } from './config.dev.js' // ここを切り替えたい
console.log(config.mail);
// ...
切替機能の組み込み
dotenvモジュールの利用
dotenvモジュールを使うとルートディレクトリに置いた.envファイルの値を読み取ってprocess.envに割り当ててくれますので、これを利用します。
npmでdotenvをインストール。
# npm i dotenv
.envをプロジェクトルートに設置して、切替用の変数だけ設定。
/.env
# 開発環境は↓を記載
TARGET_ENV = development
# ステージング環境は↓を記載
TARGET_ENV = staging
# 公開環境は↓を記載
TARGET_ENV = production
config.js
/scripts/config.js
import dotenv from 'dotenv'
dotenv.config(); // .envをprocess.envに割当て
const setConfig = {
// 公開用
production : {
mail : {
host: 'postfix',
port: 25,
auth: {
user: 'user',
pass: '12345678'
}
}
},
// ステージング用
staging: {
mail : {
host: 'postfix',
port: 25,
auth: {
user: 'user',
pass: '12345678'
}
}
},
// 開発用
development : {
mail : {
host: 'mailhog',
port: 1025,
}
}
}
export const config = setConfig[process.env.TARGET_ENV];
config.jsにてdotenvでの割当てを行い、process.env.TARGET_ENVの値で切り替わる形にします。
app.js
/scripts/app.js
// import { config } from './config.dev.js'
// ↓
import { config } from './config.js'
console.log(config.mail);
// ...
config.js側で環境に応じて自動的に切り替えるので、configのファイルは1つになります。