Bunでprismaが使えない時のエラー対処

2023/09/30に公開1

事象

  • 以下のpackage.jsonで、bun installを実行して、prismaをインストールしたら、
    エラーが出た。
  • 以下のpackage.jsonで、npm installを実行して、prismaをインストールしたら、
    正常に起動した。
  • Bun公式のprismaやり方ページでは、
    bun add prismaで行っている
backend $ bun run dev
$ bun src/index.ts
[0.05ms] ".env"


error: Cannot find module ".prisma/client/index" from "/Users/src/node-api-server/backend/node_modules/@prisma/client/index.js"
error: script "dev" exited with code 1 (SIGHUP)
backend $ 
package.json
{
  "name": "backend",
  "module": "index.ts",
  "type": "module",
  "devDependencies": {
    "@types/jest": "^29.5.5",
    "@typescript-eslint/eslint-plugin": "^6.7.0",
    "bun-types": "latest",
    "eslint": "^8.49.0",
    "eslint-config-standard-with-typescript": "^39.0.0",
    "eslint-plugin-import": "^2.28.1",
    "eslint-plugin-n": "^16.1.0",
    "eslint-plugin-promise": "^6.1.1",
    "jest": "^29.7.0",
    "typescript": "^5.2.2"
  },
  "scripts": {
    "dev": "bun src/index.ts",
    "build": "bun build --compile ./src/index.ts --outfile=app",
    "test": "bun test --coverage",
    "lint": "bun eslint src/**/*.ts",
    "prettier": "bun prettier . --write",
    "lint-fix": "npx eslint --fix src/**/*.ts && npx prettier . --write"
  },
  "peerDependencies": {
    "typescript": "^5.0.0"
  },
  "dependencies": {
    "@prisma/client": "latest",
    "@types/express": "^4.17.17",
    "@types/jest-when": "^3.5.3",
    "body-parser": "^1.20.2",
    "express": "^4.18.2",
    "jest-mock-extended": "^3.0.5",
    "jest-when": "^3.6.0",
    "prettier": "^3.0.3",
    "prisma": "^5.3.1",
    "prisma-mock": "^0.9.0"
  },
  "jest": {
    "transform": {
      "^.+\\.(t|j)sx?$": "@swc/jest"
    },
    "coverageReporters": [
      [
        "text",
        {
          "file": "report.json"
        }
      ]
    ]
  }
}

発生状況

  • OS :
  ProductName:            macOS
  ProductVersion:         14.0
  BuildVersion:           23A344
  • NodeJs : v18.16.1
  • Bun : 1.0.1
  • npm : 9.5.1

対象読者

  • Bunでprisma使い始めて方
  • Bunのエラーに関する情報が少なくて困っている方
  • 未来の自分

解決法

BunとPrismaの両方のGitHubのIssueにある通り
まだ、サポートされていませんでした。

おとなしくPrisma使いたいならNodeを使いましょう。

https://github.com/prisma/prisma/issues/17715

https://github.com/oven-sh/bun/issues/5320

まとめ

  • Prismaは、Bunをまだサポートしていませんでした
  • 2023/9/29現在、本記事と同様の事象に関するIssueがOpenになっており、議論されている
  • 基本は、Nodeを使いつつ、CI/CDとかのテストとか恩恵を受けられるところで使っていくのがいいのかなと思いました

Discussion

ぴんなるぴんなる

Nodeがインストールされていればbunでprismaを実行することができます。
私はdockerで運用していますが、
nodeのイメージにbunをbuild時にインストールしています。
そうすることで、bun prisma initをはじめとしたコマンドが使用できます。