Noh | エンジニア向け情報共有コミュニティ
Signup / Login

Cloudflare d1 + Prisma をやめて Drizzle orm に移行した

cloudflare
prisma
drizzle

投稿日: 2025/08/31

Cloudflare d1 + Prisma を以前試していました。

Rails の Active record に脳髄を侵されている自分にとって Prisma の使い心地は非常によかったのですが、D1と組み合わせるにあたって相性が悪かったので Drizzle に移行しました。

https://noh.ink/articles/cdnuIsO3dLOpIHcFkO2d

不便だったことや機能不足

D1 の batch メソッドと組み合わせられない。

これがほぼすべての理由です。

D1がトランザクションに対応してない事自体は知っていました。
分散型のDBとトランザクショを組み合わせるのは難しいみたいで、現時点で実装予定も無いそうです。

その代わりに提供されているのが、Batchメソッドです。これは複数のSQLを単一の呼び出しに送信するバッチ処理を行うものです。バッチ処理はトランザクションとして扱われ、途中で失敗した場合はその文にエラーが返され、全体が中止またはロールバックされます。
そこまで複雑なアプリでなければ、これである程度乗り切れそうな気はします。

Prismaを使い始めて気づいたのですが、Prismaからこのbatchメソッドを使う方法がありません。Activerecordのto_sqlメソッドのようなものがあるだろうと思っていたのですが、ありませんでした。

当時、issueやドキュメント、ソースコード、公式discordまで見ましたがありません。batchメソッドを使うときは生のSQLを書く必要があります。
一部とはいえ、生のSQLを書かないといけないのは明確にデメリットです。

テーブル設計で回避することも考えましたが、複雑な設計になることは避けられません。やめたほうがいいです。

マイグレーションファイルの生成が面倒

マイグレーションファイルをスキーマから生成する手順は面倒です。

毎回自分で空のマイグレーションファイルを生成し、そのファイルやスキーマファイルを引数に入れたコマンドを実行してマイグレーションファイルを生成する必要があります。

コレだけでも面倒ですが、さらにマイグレーションを実際に行い、npx prisma generateコマンドで必要なファイルを生成し、TSサーバーをリスタートしてました。手順多すぎます。

prisma db pushコマンド? D1では使えません

サイズが大きい

自分のアプリケーションでは問題になってませんでしたが、無視できないデメリットです。

以下のリンクによると2024年4月時点でWebassemblyファイルはgzip圧縮で約785KBあります。Cloudflare workersの無料プラン制限が1MBなので約8割を使用します。

drizzleに移行して感じたこと

思ったよりも機能は十分な水準だった

SQLライクな薄いORMという認識だったので、Prismaよりも抽象度が低く不便だと言う思い込みがありました。

しかし、実際に使ってみるとPrismaライクなメソッドも用意されていて便利です。

困ったことに、困ることがありません。
すごい勢いでシェアを伸ばしてるだけあります。

batchに対応

公式で対応してくれています。
正直、コレだけでCloudflare D1と組み合わせる価値があります。

マイグレーションは便利

一応書いておくとPrismaのマイグレーションも本来便利です。しかし、D1と組み合わせると多くの機能が使えなくなって不便に感じていました。

Drizzleもやってる事自体は変わりませんが、Prismaで必要だった一部ファイルの生成やTSサーバーの再起動をしなくても動くので少し楽です。

Prismaに比べると情報は少ない

使われてる期間が全く違うのでコレは仕方ないですね。Star数とかを見るとDrizzleも猛追しているので今後期待は高いです。

D1とDrizzle Queriesを組み合わせる方法がわからなくてハマりました。

サンプルとか見てもDrizzle Queriesと組み合わせたものがまったくないんですよね。すると、AIもうまく回答できません。

コードや型、ドキュメント見てたら解決したので良かったです。

まとめ

Drizzleは非常に便利でした。

当初、Cloudflare d1のチュートリアルを読んでPrismaを使えることが書かれていたので、Prismaを選択したのですが失敗でした。

CloudflareとしてはD1という新しいプロダクトを宣伝するために、シェアの高いPrismaで使えることを宣伝したかったのだと思います。
そのためにPrismaに積極的に機能追加していたようですが、最近はあまり活発に動いているように見えません(多分ね)。
DrizzleなどD1により相性の良いORMがシェアを伸ばしたことで、無理にPrismaにこだわらなくて良くなったのかなと思います。

CloudflareはもっとDrizzleを宣伝してほしいですね。

yosi

Noh を作ってるエンジニア。