Deno で DB マイグレーション を試す - 追加 (CREATE DATABASE もしてほしい)

以前、Deno で DB マイグレーション を試す という記事を書きました。

この時は、nessie を使ってマイグレーションを試しました。
試したものの書き忘れていた不満が有って、それは DB の create と drop ができないこと。

なので、対応してみました。

参考

実装

nessie には、CREATE DATABASE する機能が無いので、ローカルにインストール済みの mysql クライアントを使用して SQL を直接実行していきます。
そのための shell ツールとして、dzxを今回は採用します。

CREATE DATABASE スクリプト

create_db.ts
1
2
3
4
5
import { config } from "./config.ts"; //設定周りは、config.tsを介して提供される想定、場合によっては環境変数の読み込みを直接書くこともあるだろう
import { $ } from "https://deno.land/x/dzx@0.3.1/mod.ts";

$.verbose = true;
await $`mysql -h${config.dbHost} -u${config.dbUser} -p${config.dbPassword} -e'CREATE DATABASE IF NOT EXISTS ${config.dbName}'`;

DROP DATABASE スクリプト

drop_db.ts
1
2
3
4
5
import { config } from "./config.ts";
import { $ } from "https://deno.land/x/dzx@0.3.1/mod.ts";

$.verbose = true;
await $`mysql -h${config.dbHost} -u${config.dbUser} -p${config.dbPassword} -e'DROP DATABASE IF EXISTS ${config.dbName}'`;

deno task 準備

オプションの設定もあり、nessie 関連の長いコマンドも併せて、deno task ですべて管理するようにしました。

deno.json
1
2
3
4
5
6
7
8
{
"tasks": {
"make:migration": "deno run --allow-env --allow-net --allow-read=./ --allow-write=./ --unstable https://deno.land/x/nessie/cli.ts make:migration",
"db:migrate": "deno run --allow-env --allow-net --allow-read=./ --unstable https://deno.land/x/nessie/cli.ts migrate",
"db:create": "deno run --allow-env --allow-net --allow-read=./ script/create_db.ts",
"db:drop": "deno run --allow-env --allow-net --allow-read=./ script/drop_db.ts"
}
}

実行

1
2
3
4
5
6
7
$ deno task db:create
$ deno task make:migration user
# => Created migration /usr/src/app/db/migrations/20220410150258_task.ts
# 編集する

$ deno task db:migrate
$ deno task db:drop

Deno.run を直接使えば、dzx を使う必要も無かったがオプションの渡し方など見ていると使った方が書きやすかった。
shell ツールの面目躍如を感じた。

ではでは。