TypeORMで開発環境ごとにDB、設定を切り替える方法
1・はじめに
NodeJSでORMを使用する際にTypeORMを使用していますが、環境ごとにDBを切り替える方法についてあまり情報がなかったため、今回紹介しようと思います。
開発環境
OS・・・Ubuntu20.04LTS
TypeORM・・・0.2.32
Typescript・・・4.2.4
dotenv・・・8.2.0
2・TypeORMで環境ごとにDBを切り替える
まず始めに今回の方法を簡単に説明すると、
1・package.json
と同じ階層にormconfig.js
ファイルを用意する
↓
2・if文または三項演算子を使用してNODE_ENVごとに設定情報を分岐させる
↓
3・package.json
のスクリプトに環境情報を追加する
です。それぞれ順を追って説明します。
2−1 package.jsonと同じ階層にormconfig.js
ファイルを用意する
まずはプロジェクトのpackage.json
と同じ階層にormconfig.js
ファイルを用意します。
通常の方法ですとormconfig.json
を使用する方法が一般的かと思いますが、
・dotenvの環境変数(process.env.~~)
を設定ファイル内に記述できる
・if文や三項演算子のようなJavascriptの文法が記述可能である
以上のことからormconfig.json
ではなくormconfig.js
にTypeORMの設定を記述します。すでにormconfig.json
がプロジェクトにある方はormconfig.js
に置き換えて下さい。
またormconfig.ts
じゃあダメなの?と思う方がいらっしゃると思いますが、.ts
形式にしてしまうと本番環境、言い換えればトランスパイル後のjsが設定ファイルを認識しなくなるため全環境に対応できるように.js
形式にしています。
2−2 if文または三項演算子を使用してNODE_ENVごとに設定情報を分岐させる
次はNODE_ENVごとに設定情報を分岐させます。
例では三項演算子を使用して分岐させていますがif文でも問題なく動作しますのでお好みで好きな方を選んで下さい。
module.exports = {
type: process.env.DATABASE_TYPE,
username: process.env.DATABASE_USERNAME,
//↓NODE_ENV==='production'で本番環境,'test'でテスト環境,設定しなければ開発環境になるよう設定
host:
process.env.NODE_ENV === 'production'
? process.env.DATABASE_HOST_PRODUCTION
: process.env.NODE_ENV === 'test'
? process.env.DATABASE_HOST_TEST
: process.env.DATABASE_HOST_DEVELOPMENT,
port:
process.env.NODE_ENV === 'production'
? process.env.DATABASE_PORT_PRODUCTION
: process.env.NODE_ENV === 'test'
? process.env.DATABASE_PORT_TEST
: process.env.DATABASE_PORT_DEVELOPMENT,
password:
process.env.NODE_ENV === 'production'
? process.env.DATABASE_PASSWORD_PRODUCTION
: process.env.NODE_ENV === 'test'
? process.env.DATABASE_PASSWORD_TEST
: process.env.DATABASE_PASSWORD_DEVELOPMENT,
database:
process.env.NODE_ENV === 'production'
? process.env.DATABASE_NAME_PRODUCTION
: process.env.NODE_ENV === 'test'
? process.env.DATABASE_NAME_TEST
: process.env.DATABASE_NAME_DEVELOPMENT,
//↓開発時のみロギングをONにする
logging: process.env.NODE_ENV === 'development' ? true : false,
//↓テスト環境時のみsynchronizeをONにする
synchronize: process.env.NODE_ENV === 'test' ? true : false,
//↓テスト環境時のみ接続時DBをクリアにする
dropSchema: process.env.NODE_ENV === 'test' ? true : false,
//↓テスト環境時のみ「.ts」ファイルを参照する
entities:
process.env.NODE_ENV === 'test'
? ['src/entities/**/*.ts']
: ['dist/entities/**/*.js'],
migrations: ['dist/migration/**/*.js']
};
このような感じです。
私は開発時もトランスパイルしたjsファイルを参照しているので、entities
もテスト環境以外は.js
ファイルを参照しています。
このように各人若干開発環境や手法が違う場合があると思うので、各人自分の開発環境、手法に置き換えて実装してみて下さい。
2−3 package.json
のスクリプトに環境情報を追加する
あとは切り替えたい環境によってpackage.jsonのスクリプトにNODE_ENV情報を追加すればOKです。
"scripts": {
"dev": "nodemon dist/index.js",
"test": "NODE_ENV=test jest"//テスト環境の設定に切り替えられる
}
"dev"
のスクリプトには何も記述していませんが、今回の例ではNODE_ENV情報を設定しなければ開発環境になるように設定したのでOKです。
3・まとめ
ormconfig.js
を使用してTypeORMの設定を記述すると、Javascriptの文法も使用できるため柔軟なDB環境の設定ができることがわかったと思います。
皆さんも開発時に試してみて下さい!
Author And Source
この問題について(TypeORMで開発環境ごとにDB、設定を切り替える方法), 我々は、より多くの情報をここで見つけました https://qiita.com/uwattotaitai/items/28bb2130a39e46161ca2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .