📑

node-pg-migrateでマイグレーションをする

2023/10/13に公開

はじめに

DBを使うプロジェクトにはマイグレーションツールが欠かせません。
開発でTypeScriptを使うので、
マイグレーションツールもnode.jsで動くものを探したところ、node-pg-migrateが良さそうだと感じました。

今回はnode-pg-migrateでマイグレーションを行う方法を記事にしたいと思います。

node-pg-migrateの特徴

  • TypeScriptでマイグレーション時のロジックを組み込むことが出来るため、複雑なマイグレーションが必要な時にも安心して対応することが出来る。
  • ORMのエンティティベースでない。

node-pg-migrateでマイグレーションをして、Drizzle kit`でDrizzle用のスキーマファイルを自動生成する。という流れで使いたいなと思っています。

導入から実行まで

事前準備

npmプロジェクトをinit

npm init

ライブラリのインストール

npm i pg node-pg-migrate dotenv
npm i -D typescript ts-node @types/pg @types/node

tsconfig.jsonを生成

npx tsc --init

package.jsonにコマンドを準備

scriptsに以下を追加する

"migrate": "ts-node node_modules/node-pg-migrate/bin/node-pg-migrate -j ts"

以上でマイグレーションを行う設定は終了です。
ここからマイグレーションのコードを作成していきます。

マイグレーションファイルを作成する

マイグレーションファイルの生成

以下のコマンドを実行します。

npm run migrate create {マイグレーションファイルの名前}

npm run migrate create initial_migration

./migrationsの中にマイグレーションファイルが作成されます。

マイグレーションファイルの編集

今回はsqlでマイグレーションを行いたいため、
./migrations/up/{生成されたマイグレーションファイル名(.tsより前)}_up.sqlを作成します。
このファイルの中に実行したいsqlを書いていきます。

続いて、
./migrations/down/{生成されたマイグレーションファイル名(.tsより前)}_down.sqlを作成して、リバートの時のsqlを記入していきます。

最後に生成されたマイグレーションファイルのTypeScriptのupとdownの関数を編集します。

./migrations/xxxx_initial-migration.ts
/* eslint-disable @typescript-eslint/naming-convention */
import { MigrationBuilder, ColumnDefinitions } from 'node-pg-migrate';
import * as fs from 'fs';
import path from 'path';

export const shorthands: ColumnDefinitions | undefined = undefined;

export async function up(pgm: MigrationBuilder): Promise<void> {
  const migrationFilePath = path.join(__dirname, "up","xxxx_initial-migration_up.sql")
  const migrationSql = fs.readFileSync(migrationFilePath, "utf-8");
  pgm.sql(migrationSql);
}

export async function down(pgm: MigrationBuilder): Promise<void> {
  const migrationFilePath = path.join(__dirname, "down","xxxx_initial-migration_down.sql")
  const migrationSql = fs.readFileSync(migrationFilePath, "utf-8");
  pgm.sql(migrationSql);
}

以上でマイグレーションファイルの作成は完了です。

マイグレーションの実行

以下のコマンドでマイグレーションを実行することが出来ます。

npm run migrate up

リバートの実行

リバートの実行

npm run migrate down

以上でnode-pg-migrate導入完了です!😊

その他のコマンドは以下のサイトに説明があります。
https://salsita.github.io/node-pg-migrate/#/cli

コラボスタイル Developers

Discussion