3
0

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.

【NestJS】TypeORMのMigrationを実装する

Posted at

#はじめに
TypeORMのMigrationについてのメモです。

NestJSに関するこれまでの記事については以下をご覧ください。

実装したコードを確認したい方は以下よりご確認ください。

#実装
AppModuleのsynchronizeの設定がtrueだと、アプリケーションをデプロイしたときにDBのテーブルがEntityから自動的に生成されます。
Entityの状態がDBに同期されるため一見便利にみえますが、Entityのカラムを消したときにDBのカラムも消えてしまうため、誤ってPasswordのカラムを消してしまうなどのリスクがあります。

そのため、本番環境のデプロイ前になったらsynchronize: falseにして、マイグレーションファイルを元に手動でDBの状態を更新してあげるようにします。

TypeORMではDBに接続するための情報type database entitiesが必要となります。
Moduleにこれらの情報を記述しても読み込まれないので、ormconfig.jsにそれぞれの設定を記述してmodule.exportsしてあげます。
開発環境development、テスト環境test、本番環境productionで接続するDBの種類などが異なるので、switch文で設定を切り替えます。

ormconfig.js
var dbConfig = {
  synchronize: false,
  migrations: ['migrations/*.js'],
  cli: {
    migrationsDir: 'migrations',
  },
};

switch (process.env.NODE_ENV) {
  case 'development':
    module.exports = Object.assign(dbConfig, {
      type: 'sqlite',
      database: 'db.sqlite',
      entities: ['**/*.entity.js'],
    });
    break;
  case 'test':
    module.exports = Object.assign(dbConfig, {
      type: 'sqlite',
      database: 'test.sqlite',
      entities: ['**/*.entity.ts'],
      migrationsRun: true,
    });
    break;
  case 'production':
    module.exports = Object.assign(dbConfig, {
      type: 'postgres',
      url: process.env.DATABASE_URL,
      migrationsRun: true,
      entities: ['**/*.entity.js'],
      ssl: {
        rejectUnauthorized: false,
      },
    });
    break;
  default:
    throw new Error('unknown error');
}

つぎにpackage.jsonscriptsへ以下を追記します。

"typeorm": "cross-env NODE_ENV=development node --require ts-node/register ./node_modules/typeorm/cli.js"

以下のコマンドでマイグレーションファイルが生成されます。

npm run typeorm migration:generate -- -n initial-schema -o

そして以下のコマンドでマイグレーションファイルを元にmigrate(DBテーブルの生成)が実行されます。

npm run typeorm migration:run

#参考資料

3
0
0

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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?