0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Remix ✕ Prisma ✕ Cloudflare D1の構成でクリーンマイグレーションしやすいようにコマンドを整えてみた

Posted at

概要

laravelのマイグレーションやシーダーが結構使いやすいイメージがあったのでそれに合わせて作ってみた。(ファクトリっぽいものも作っても良かったかも。)
マイグレーションファイルだけ自動出力されたものをそのまま使うわけにはいかず、手を加える必要がある。Prismaは性質上それまでの定義スキーマをすべて一つのファイルに出力してしまうはずなので。(間違えていたらすみません。)

package.jsonのscript部分の内容

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 deploy --branch preview",
  "local-seed": "./execute_seeds.sh --local",
  "local-migrate": "npx wrangler d1 migrations apply DB名 --local",
  "local-migrate-fresh": "npx wrangler d1 execute DB名 --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",
  "preview-seed": "./execute_seeds.sh --preview",
  "preview-migrate": "npx wrangler d1 migrations apply DB名 --preview --remote",
  "preview-migrate-fresh": "npx wrangler d1 execute DB名 --preview --remote --file ./seeds/drop_tables.sql",
  "preview-migrate-reset": "npm run preview-migrate-fresh && npm run preview-migrate",
  "preview-migrate-reset-and-seed": "npm run preview-migrate-reset && npm run preview-seed",
  "remote-seed": "./execute_seeds.sh --remote",
  "remote-migrate": "npx wrangler d1 migrations apply DB名 --remote",
  "remote-migrate-fresh": "npx wrangler d1 execute DB名 --remote --file ./seeds/drop_tables.sql",
  "remote-migrate-reset": "npm run remote-migrate-fresh && npm run remote-migrate",
  "remote-migrate-reset-and-seed": "npm run remote-migrate-reset && npm run remote-seed"
},

drop_tables.sqlの内容

./seeds/drop_tables.sql
-- DropTable
-- マイグレーション管理テーブルリセット
DELETE FROM d1_migrations;
-- NOTE: テーブルを追加したらこちらにも忘れず追記
DROP TABLE IF EXISTS hoges;
DROP TABLE IF EXISTS fugas;
DROP TABLE IF EXISTS piyos;

execute_seeds.shの内容

./execute_seeds.sh
#!/bin/bash

# SQLファイルのリスト
sql_files=(
    # NOTE: seedファイルを追加したらこちらにも追加
    "./seeds/hoges_seed.sql"
    "./seeds/fugas_seed.sql"
    "./seeds/piyos_seed.sql"
)

# 各SQLファイルを実行
for file in "${sql_files[@]}"; do
    if [ "$1" == "--preview" ]; then
        npx wrangler d1 execute job_listings --preview --remote --file "$file"
    else
        npx wrangler d1 execute job_listings $1 --file "$file"
    fi
done

hoges_seed.sqlの内容

./seeds/hoges_seed.sql
-- InsertTable
INSERT INTO "hoges" ("name", "key") VALUES ("hogeのname1", "hoge-one");
INSERT INTO "hoges" ("name", "key") VALUES ("hogeのname2", "hoge-two");
INSERT INTO "hoges" ("name", "key") VALUES ("hogeのname3", "hoge-three");
INSERT INTO "hoges" ("name", "key") VALUES ("hogeのname4", "hoge-four");
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?