🧊

Drizzle Studioを、Cloudflare D1のローカル開発で使う

やってみたらできたので一応書いておくけど、正直なところ微妙かも。

2023/11/10: 追記

DrizzleKitのアップデートによって、正式にD1の対応が入った。

https://github.com/drizzle-team/drizzle-kit-mirror/releases/tag/v0.20.0

ただし、wrangler d1 executeを使う関係で遅いかもって書いてあるので、ローカルにあるDBを覗きたいだけなら、以下の方法がまだ使える。

用語の紹介

  • Drizzle Studio
    • ORMであるDrizzleが提供する、ローカルでDBを閲覧できるGUI
  • Cloudflare D1
    • SQLiteをCDNエッジで使えるようにしたやつ
    • ローカルでの開発は、miniflareの実装を経由しつつも.sqliteファイルが使われる

というわけで、Drizzle Studioに対して、その.sqliteファイルを通してあげればよい。

やり方

まずは、drizzle.config.tsに以下を追記する。

  // ...
  driver: "better-sqlite",
  dbCredentials: { 
    url: ".wrangler/state/v3/d1/miniflare-D1DatabaseObject/6389830e7b3f2a469bc78ee91e9e8baee5e3548baebe608e533164f402c1aa1e.sqlite",
  },

D1用のドライバーはサポートがなく定義もされてないので、とりあえずSQLite互換ものを入れてごまかす。

urlはそれぞれ違うけど、自分で明示してない限りは.wrangler配下にあるはず。

そしてbetter-sqlite3をインストールして、devDependenciesにでも追加しておく。

ここまでやれば、あとはdrizzle-kit studioコマンドで起動するだけ。

おしまい。

TablePlusでいい

  • そもそも無理やりやってる
  • 使ってないbetter-sqlite3に依存したくない
  • Drizzle Studio自体の機能も豊富ではない
    • テーブルを一覧・フィルタできるくらい
    • 行の追加、更新や削除はもちろんできるけど
    • 任意のSQLを発行(JOINしたい)したりできない

コマンドで起動してブラウザが開いてこれしかできないなら、最初からTablePlusで.sqliteファイルを開いたほうが速いし高機能。

もう少し機能がありつつ、KVやR2の中身も覗けるビューワー、やっぱ作ろうかな・・。