Chapter 04無料公開

✅マイグレーションを使ってデータベースの変更を意味のある単位で管理する

たった
たった
2021.10.15に更新
このチャプターの目次
バックエンド
be
├── src
├── tests
├── migrations   ... マイグレーションファイル(自動生成)
├── schema       ... GraphQLスキーマ(自動生成)
├── eslintrc.js  ... コーディングルール
> ├── ormconfig.js ... DBの接続設定
└── TypeOrmNamingStrategy.js ... 命名規則

このチャプターで使用するライブラリ

  • TypeORM

概要

データベースのスキーマを変更する改修を行った時、本番に流すSQLをコミットして、本番サーバにSSHして...というのは皆さんご経験があるかと思います。

マイグレーションでデータベースのスキーマ変更を意味のある単位で管理することができます。TypeORMではEntityを正としてデータベースのマイグレーションを行うことができます。

実装

コマンドを楽に使えるようにしましょう。

be/package.json
...
"scripts": {
+    "typeorm": "npx ts-node --files -r tsconfig-paths/register ./node_modules/.bin/typeorm",
},
...

EntityとMigrationの設定を定義します。

be/ormconfig.js
const TypeOrmNamingStrategy = require('./TypeOrmNamingStrategy.js')

module.exports = [
  {
    /* 略 */
    namingStrategy: new TypeOrmNamingStrategy(),
+    synchronize: false,
+    entities: ['src/entities/*.ts'],
+    migrations: ['migrations/**/*.ts'],
+    cli: {
+      entitiesDir: 'src/entities',
+      migrationsDir: 'migrations',
+    },
  },
]

実行手順

  1. Entity の変更
    be/src/entities配下の Entity ファイルを変更します。
  2. マイグレーションファイルの作成
    be/migrations配下にタイムスタンプ+名前のマイグレーションファイルが作成されます。
    $ yarn run typeorm migration:generate -- -n XXXX
  3. マイグレーションの実行
    作成したマイグレーションファイルを元にマイグレーションを実行します。
    $ yarn run typeorm migration:run

他の方法

マイグレーションの実行を自動化する
be/ormconfig.js
module.exports = [
  {
    /* 略 */
+    migrationRun: true,
  },
]
マイグレーションファイルの作成と実行を自動化する
be/ormconfig.js
module.exports = [
  {
    /* 略 */
+    synchronize: true,
  },
]

※本番環境でこちらの設定をするのはオススメしません