jiko21’s techblog

Prismaがm1で動かなくて焦った話

TL;DR

  • prismaはm1 macでもnativeで動きます
  • PCハードの移行の際は既存ライブラリが動くか念のために確認を
  • 困らないよう、定期的にバージョンアップがおすすめ

はじめに

実は、M1 macが家に届いてから約1週間経ちました。

今までは、2016年製MBP15インチを使っており、結構ガタが来てましたが、 ようやく人権を手に入れた気分です。

ことの発端

実は、趣味でCMSを作り始めています。

Arkerfeldtっていう名前で、 BEをNode.js + Express + Prismaで構築しています。

Intel Mac時代から実装していて、最近あまり手をつけられていなかったのですが、 続きの実装をM1 Macでやり始めました。

もちろん、Intel→M1になったのでライブラリとかはちゃんと再インストールすればいいやろ、と

$ npm ci

で再取得して実装に取り掛かったところ、次のようなエラーに出くわしました。

node[57976]: ../src/node_http_parser.cc:567:static void node::(anonymous namespace)::Parser::Initialize(const FunctionCallbackInfo<v8::Value> &): Assertion `args[3]->IsInt32()' failed.

まるで意味がわからんぞ...

とりあえず、prismaが吐いているquery-engine-darwinが悪そうなのでこいつを消してデバッグしてみると

"Error: \nInvalid `prisma.post.findMany()` invocation:\n\n\n  Query engine binary for current platform \"darwin\" could not be found.\nThis probably happens, because you built Prisma Client on a different platform.\n

って見事に怒られてました。

要するに

お前のPlatformに合ったquery engineねぇから

ということです。

M1 Macに対応させる

実は、Prisma(cliの方)は2.27.0でM1にNative Supportしています! なので2.27.0をいれてしまえばおしまいです。

あとは、そこそこ変更があったのでそれを直すだけした。

今回のようにCPUアーキテクチャが変わるなんてビッグイベントは20年に1回とかその程度だと思うので おそらく次にCPUアーキテクチャが変わる頃には忘れてそうですが

CPUアーキテクチャが変わったらちゃんとライブラリの動作を確認する

は必要ですね。

もしかしたら、

PCハードの移行(別OS等)の場合にしっかり確認する

ができていればいいかもしれないです。

ライブラリは定期的に更新しておこう

サービス開発ではOSSライブラリのお世話にならないとほぼ実装は不可能です。 ですが、定期的にライブラリの更新ができている人はどれくらいいますか?

後方互換性が...だったり、調査するのが...など、 何かと理由をつけて後回しにしていることが多いかと思います。

ただ、ライブラリの更新をしっかりしておくと、

  • 新しい機能がすぐ使える
  • 一気に更新するよりもマイグレが楽 などのメリットがあります。

このような自動更新はRenovateだったり そのほか様々なツールで解決できるのでそういったツールをいれておくと手かもしれません。

最後に

以上、「あれ、Prismaが動かんぞ」、となったかと思ったら古いライブラリのためネイティブバイナリがなかったというお話でした。

巷ではM1対応アプリが増えてますが、ライブラリも同じようにどんどん対応してきている(逆にいうと古いままだと対応していない) ので、定期的にアップデートして、移行などに備えておくといいですね。

about author...

Frontend engineer.
loves: TypeScript, React, Node.js

more detail...