- ビルド
- 実行
- ホットリロード
- デバッグ
- Prisma
Node.js | 18.12.0 |
npm | 9.6.6 |
docker | 23.0.5 |
docker-compose | 2.17.3 |
fastify | 4.17.0 |
typescript | 5.0.4 |
- デバッグ用にポート番号を揃える必要がある箇所
.vscode/launch.json
に指定するport
番号package.json
のstart:dev
に指定する--inspect=0.0.0.0:ポート番号
のポート番号docker-compose.yml
に指定するports
のポート番号
- プロジェクトの Hot Reload 対応をしたため、node_modules を volume 指定したので以下に注意する
- 新しいパッケージをインストールしたり、削除したりするときは volume を削除し、イメージを再ビルドする
- prisma のモデル、テーブル構造を変更した際、volume を削除する
- 初期化
npx prisma init
- Prisma Schema から Prisma Client コードを生成する
npx prisma generate
node_modules/@prisma/client
に置かれる
- スキーマのマイグレーション用の sql を生成する
npx prisma migrate dev --name マイグレーション名 --preview-feature
npx prisma migrate dev
のオプション--create-only
- マイグレーション用の SQL 文だけ生成する
- DB には適用しない
- 生成された文を自分でカスタマイズすることも可能
--preview-feature
- 実行時にどういうことをするかをコンソール上に表示してくれる
--name <stage name>
- マイグレーション名を指定できる
- マイグレーション内容の説明を入れたりするのに使う
- ローカル環境の DB を GUI 操作するためのツールを起動する
npx prisma studio
- 開発環境でマイグレーションを生成して適用する
npx prisma migrate dev
- 本番環境では使ってはいけない
- 開発環境の DB を再設定する
npx prisma migrate reset
- 本番環境では使ってはいけない
- マイグレーション用の SQL 文だけを生成する
npx prisma migrate dev --create-only
- SQL 文を適用させるには
npx prisma migrate dev
を実行
- マイグレーションファイルを生成せず、DB のテーブルに変更を加える
npx prisma db push
- 開発用コマンド
- 開発中の試行錯誤で使う
- DB への反映と Prisma Client の更新を行う
- 意図した DB のスキーマになったら
npx migrate dev
でマイグレーションファイルを生成する
- 本番・STG 環境でマイグレーションを適用する
npx prisma migrate deploy
Prisma Migrate could not create the shadow database. Please make sure the database user has permission to create databases.
-
npx prisma migrate dev
でマイグレーション用の SQL 文を生成・適用させようとした際に発生 -
原因
npx prisma migrate dev
を実行すると shadow database と呼ばれる一時的なデータベースがマイグレーションのために作成される- しかし、shadow database を作成する権限がない場合、マイグレーションが実行できないので失敗してエラーメッセージが表示される
-
対応
-
Prisma 公式のAbout the shadow databaseをもとに、mysql の場合の書き方をした SQL 文を設ける
-
grant all CREATE, ALTER, DROP, REFERENCES ON *.* to MYSQL_USER@'%';
-
-
さらに Docker で 最初に MySQL を起動した際に自動的に設定の初期化をするように、設定をする
db/init/init.sql
を設けて、対応用の SQL を書き込むdocker-compose.yml
のvolume
に./db/init
配下を/docker-entrypoint-initdb.d
配下におくように設定する
-
- 原因
- prisma 接続先の DATABASE_URL で db コンテナを localhost で指定していた
docker-compose
によって app コンテナと db コンテナが立っている状態のため、app コンテナから見たlocalhost
は app コンテナということになる
- 対応
docker-compose.yml
で定義したサービス名のdb
を使って指定するdocker-compose.yml
で network を指定しなくてもデフォルトで同一ネットワークに属していることになる
- Fastify + Docker = 🚀. Update: I recently expanded upon this… | by David | Medium
- Fastify + Distroless Docker = 😍. Update: I’ve written another part to… | by David | Medium
- Hot Reload Node-Typscript with Docker! | by Kartik Kwatra | Medium
- How to Speed up Docker Development! 🐳 Hot Reloading, Debuggers, and More!
- Debugging Node.js + Typescript Running inside Docker Containers with Hot Reload
- flolu/docker-typescript-debug: 🐞 Example for Debugging Node.js + Typescript Running inside Docker Containers with Hot Reload
- GraphQL, Fastify, Nest, Prisma, MySQL, Docker 環境をサクッと構築する
- [Prisma]Module '"@prisma/client"' has no exported member のエラー
- Prisma 基礎
- Prisma 備忘録 - Qiita
- Prisma Migrate in development and production
- TypeScript ORM「Prisma」のはじめかた - くらげになりたい。
- Rails エンジニアが Prisma に入門する:開発フロー編
- Node.js(Express.js)環境で Prisma ORM を使いこなすための基礎 | アールエフェクト
- Prototype your schema
- About the shadow database
- MySQL で prisma migrate dev が失敗する
- Docker で MySQL 起動時にデータの初期化を行う - Qiita
- Prisma で npx prisma migrate dev が「Can't reach database server at xxxx」になる場合に確認すること | For