29
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

nodejsで開発/本番の設定を切り替える

Last updated at Posted at 2018-10-11

##イントロダクション
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つになります。

29
31
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?