新しいWebサービスを開発中で、コードは一切自分で書かず、Claude Code と Codex に 100% 書かせています。
この記事は、そのDBアクセス層を Drizzle と Kysely で悩んだ末に Kysely を選んだ話です。
選定軸はAIに検証を任せられること
Claude Code や Codex に安全にDB管理を任せる、という観点で2点を満たすものを選びました。
- SQLを型でガードできること
- クエリを検証しやすいこと
検証しやすさとは、クエリ検証そのものをAIエージェントに任せられることです。
AIが自分の書いた発行SQLを確認し、EXPLAIN で実行計画までチェックできる状態を指します。
候補は Drizzle(ORM)と Kysely(クエリビルダー)です。
AIにORMの書き味は要らない
ORMの大きな価値のひとつは、SQLを直接書かずにTypeScriptらしくクエリを組める書き味です。
人間には嬉しい価値ですが、AIには不要だと思いました。
命令ひとつで生SQLですら問題なく書けるからです。
ORMはAI時代には、抽象層が増えているだけになっているかもしれません。
そこで、薄くて型安全なクエリビルダーの Kysely を選びました。
Kyselyのコード例
有効なジャンルを表示順で取得する、よくあるクエリです。
const genres = await db
.selectFrom("genres")
.select(["id", "slug", "name"])
.where("is_active", "=", 1)
.orderBy("display_order", "asc")
.execute();
// genres の型は自動で { id: number; slug: string; name: string }[] になる
// "is_activ" のように列名を打ち間違えると、この時点でコンパイルエラー
書いたコードがほぼSQLそのもので、型も自動でついてきます。
抽象が挟まらないぶん、AIが書いても何をするコードか素直に伝わります。
マイグレーションもKysely標準で十分
マイグレーション管理では Atlas が人気です。
スキーマの差分からマイグレーションSQLを自動生成してくれるのが売りで、よくできたツールだと思います。
ただ、AI時代にはそこまで豪華なツールは要らないと、僕は考えています。
ORMと同じで、人間視点ではAIが生成するかAtlasが生成するかの違いでしかなく、生成がブラックボックスだと怖さもあります。
Kysely標準のマイグレーションに自動生成はなく、ファイルは自分で書きます。
ただ、地味に大事なところは押さえられています。
- マイグレーションファイル内で普通のクエリビルダーが使え、データ移行も同じTypeScriptで書ける
- Postgresでは各マイグレーションがトランザクション内で実行され、失敗時はまるごと巻き戻る
- DBレベルのロックがあり、複数サーバーから同時に走っても直列化される
安全にマイグレできるハーネスがあれば十分なので、Kysely標準で問題なさそうです。
さいごに
役に立ったら、高評価、チャンネル登録、お願いします✨️