Sequelize with TypeScriptと Migration時のSSH Tunnelの設定

2020年08月21日 00時08分

Sequelizeは Node.js で動作する ORM だ。

TypeORMとどちらを採用するか迷ったが、issue の数が Sequelize が 0.8k と TypeORM が 2k だったので、今回は Sequelize を採用した。

Sequelize は v6 でTypeScript をサポートしているがモデル等は自力で実装・定義する必要がある。

また、DB の Migration もこちらの Sequelize で行うことができるが TypeScript での生成や Migration 実行はサポートしていない。

併せて、DB への直接の接続は設定で定義することができるが踏み台サーバーから DB への接続する際には別途実装が必要である。

という訳で困ったところとしては下記の2つ。

1.Migration 定義ファイルは js で生成される。(TypeScript は対応していない

2.踏み台サーバーから DB に接続して Migration は対応していない。

下記を参考に進めていったので、ぜひ

Getting Started with Sequelize Migrations using Nodejs and Typescript

sequelize with tunnel-ssh

1.tsc で ts ファイルをトランスパイルして dist 配下の Migration 用ディレクトリに保存する

2.ssh2 を使ってポートフォワードをした後に Uzmug で Migration を実行する

ディレクトリ構造

root/

┣package.json

┣database/

┣tsconfig.json

┣config/

┣doMigration.ts

┣settings.ts

┣migrations/

┣20200726100026-create-hello.ts

┣dist/

┣migrations/

┣20200726100026-create-hello.js

1.トランスパイル用のフォルダ準備と設定

Migration 用ファイル

gist:matsuaki-jp/bb6080493091e45d5870387595ffde76

gist:matsuaki-jp/f05b118a97ffdbaf3ef7c953f176b507

script定義も書いておく。

gist:matsuaki-jp/2d71fffd4351911b513975f661c1360f

2.ssh2、Uzmug で Migration を実行する

Uzmug を利用することでスクリプトから Sequelize の Migration を実行することができる。

ポートフォワードする必要があるので、接続可能な状態にした後に Umzug から Migration を実行する。

実行スクリプト

gist:matsuaki-jp/bb6080493091e45d5870387595ffde76

gist:matsuaki-jp/7a90c03e584f6fe1ef1e4754a6a953a5

あとは、コマンドで実行!

npm run migration:up

感想

色々定義する必要があるけれど、TypeScript で書けるのはやっぱり嬉しい。

DB のバージョン管理ができるのはやっぱり嬉しいので職場でも流行らせたいなぁ。

async await のメソッドはもうちょっと良くなりそう。