どんな問題?
最近 prisma を利用しているプロジェクトの各種バージョンをアップグレードしたら、
以下のようなエラーで prisma 系コマンドが確率で失敗するようになってしまった。
意味がわからないが本当に確率で失敗する。
5割成功する日もあれば、1割しか成功しない日もあった。クソ謎。
$ npx prisma generate
> repit-server@0.0.1 prisma-generate
> prisma generate
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
assertion failed [block != nullptr]: BasicBlock requested for unrecognized address
(BuilderBase.h:550 block_for_offset)
[1] 69526 abort npx prisma generate
原因と解決方法
参考 issue によれば、 インストールされている node が x86 用のものだったことが原因。
Prisma 自体の問題ではないとのこと。
(nodenv 経由で) arm64 用 node のインストールを行うことで解決できた。
元の状態
$ node -v
v18.15.0
$ node -e 'console.log(process.arch)'
x64
# 現在の shell のモード
$ uname -mp
x86_64 i386
この状態で node を再インストールし直すと変わらず x64 版がインストールされたため、
shell を arm64 モードに切り替えてみる。
解決策
# ターミナルを ARM64 に切り替え
$ arch -arm64e /bin/zsh
$ uname -mp
arm64 arm
# nodenv で対象のバージョンを(再)インストール
# darwin-arm64 版がダウンロードされればOK
$ nodenv uninstall 18.15.0
$ nodenv install 18.15.0
Downloading node-v18.15.0-darwin-arm64.tar.gz...
-> https://nodejs.org/dist/v18.15.0/node-v18.15.0-darwin-arm64.tar.gz
...
# arm64 版が入ったことを確かめてみる
$ node -e 'console.log(process.arch)'
arm64
# prisma バイナリを消すためにプロジェクトの node_modules をインストールし直し
$ rm -rf ./node_modules
$ npm i
# 上記実施以降は毎回 arch 切り替えは必要なし
$ npx prisma generate
意図したとおり arm64 node がインストールでき、prisma 系コマンドが 100% 成功するようになった!