概要
Remix + Prisma + CloudFlareのD1という構成だとフレッシュマイグレーション + seed実行のようなコマンドは用意されていないため自前で用意してみる。
前提
-
- CloudFlare上のD1データベース名は「todo-cloudflare-d1」とする。よってwrangler.tomlでdatabase_nameが
todo-cloudflare-d1
と指定されている
- CloudFlare上のD1データベース名は「todo-cloudflare-d1」とする。よってwrangler.tomlでdatabase_nameが
- 下記の内容が完了している
方法
-
フレッシュマイグレーションの流れは「テーブル削除」 → 「マイグレーション実行」のためその流れを作成
-
下記を実行してseedsディレクトリ直下に
drop_tables.sql
を作成touch seeds/drop_tables.sql
-
seeds/drop_tables.sql
を下記のように記載seeds/drop_tables.sql-- DropTable -- マイグレーション管理テーブルリセット DELETE FROM d1_migrations; -- NOTE: テーブルを追加したらこちらにも忘れず追記 DROP TABLE IF EXISTS tasks; DROP TABLE IF EXISTS task_category_masters; DROP TABLE IF EXISTS users;
-
下記を実行してテーブルが削除されることを確認
npx wrangler d1 execute todo-cloudflare-d1 --local --file ./seeds/drop_tables.sql
-
テーブルが一部削除されていることを確認
-
下記を実行してマイグレーションが通ることを確認
npm run migrate
-
下記を実行してseedを流しデータが入ることを確認
npm run seed
-
ここまでが無事通ったら実装は問題ない
一発でマイグレーションリセット(テーブル削除していちからマイグレーション実行)できるコマンドを用意
-
下記をpackage.jsonのscriptsに記載
package.json{ "scripts": { "local-migrate-fresh": "npx wrangler d1 execute todo-cloudflare-d1 --local --file ./seeds/drop_tables.sql" } }
-
これで下記を実行することでマイグレーションフレッシュする事が可能
npm run local-migrate-fresh
-
下記をpackage.jsonのscriptsに記載
package.json{ "scripts": { "local-migrate-reset": "npm run local-migrate-fresh && npm run local-migrate" } }
-
これで下記を実行することでマイグレーションリセットをする事が可能
npm run local-migrate-reset
更に便利になりそうなコマンドを追加
コマンドを入れ子実行するようにして便利なコマンドを作っておいた。
package.json
"scripts": {
"build": "remix vite:build",
"deploy": "npm run build && wrangler pages deploy",
"dev": "remix vite:dev",
"lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .",
"start": "wrangler pages dev ./build/client",
"typecheck": "tsc",
"typegen": "wrangler types",
"preview": "npm run build && wrangler pages dev",
"cf-typegen": "wrangler types",
"local-seed": "./execute_seeds.sh",
"local-migrate": "npx wrangler d1 migrations apply todo-cloudflare-d1 --local",
"local-migrate-fresh": "npx wrangler d1 execute todo-cloudflare-d1 --local --file ./seeds/drop_tables.sql",
"local-migrate-reset": "npm run local-migrate-fresh && npm run local-migrate",
"local-migrate-reset-and-seed": "npm run local-migrate-reset && npm run local-seed",
"remote-migrate": "npx wrangler d1 migrations apply todo-cloudflare-d1 --remote"
},