1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DrizzleよりAtlasよりKyselyを選んだ理由

1
Last updated at Posted at 2026-05-17

新しい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標準で問題なさそうです。

さいごに

役に立ったら、高評価、チャンネル登録、お願いします✨️

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?