Next.js App Routerに最適なORMを徹底比較:Prisma / Drizzle / Kysely / TypeORMの選び方ガイド【前編】

  • prisma
    prisma
  • drizzle
    drizzle
  • typeorm
    typeorm
  • nextjs
    nextjs
  • react
    react
  • postgresql
    postgresql
  • typescript
    typescript
2025/03/13に公開

はじめに

Next.jsのApp Routerは、これまでのPages Routerと比べてルーティング・データ取得・サーバー処理の構成が大きく変わりつつあります。中でも「データベースとの接続をどこでどう扱うか」は、アプリの構造や開発体験を左右する重要な選定ポイントです。

その選定の中心にあるのが、**ORM(Object-Relational Mapping)**です。

Prisma、Drizzle ORM、Kysely、TypeORM といった選択肢がある中で、App Routerの構造と本当に相性が良いORMはどれなのか?
この記事では、実装のしやすさ・型安全性・運用性・ホスティング対応といった観点から、実際のコードも交えて徹底比較していきます。

この記事について

この記事は 「Next.js × ORM 比較」シリーズの前編です。

前編(本記事)では、App Routerと相性の良いORMを選定するための比較軸を整理し、各ORMの特徴や違いを解説します。

後編(次回)では、DockerでPostgreSQL/MySQL環境を構築し、各ORMを実際に導入・マイグレーション・API実装する実践編をお届けします。

✅ 本記事で扱うこと

  • Next.js(App Router)環境での ORM 選定
  • Prisma / Drizzle ORM / Kysely / TypeORM の特徴と比較
  • Supabase(PostgreSQL)や PlanetScale(MySQL)といったマネージドDBとの相性
  • 型安全性、マイグレーション、軽量さ、Edge対応などの評価軸

🚫 この記事で扱わないこと

  • GraphQLを前提としたORM利用(Hasura / PostGraphileなど)
  • ORM未使用の生SQL、Knex単体での活用
  • Pages Router(従来のNext.js構成)でのORM利用

比較の背景

Next.js App Routerでは、ルートハンドラ(app/api/*/route.ts)やServer Actionsを用いて、Reactのコンポーネントとバックエンドの境界がより曖昧かつ柔軟になりました。
このアーキテクチャでは、以下のようなことが頻繁に起こります:

  • サーバーサイドで直接DBを叩きたい
  • UIコンポーネント内からServer Action経由でデータ取得したい
  • Edge Functionsで処理したいが、Clientのサイズやコネクション数が気になる

こうした背景の中で、単に「使えるORM」ではなく「Next.js App Routerと実際に噛み合うORM」を選ぶことが求められています。

本記事では、そうしたニーズに応えるべく、App Routerでの実用を前提としたORM比較と、環境ごとの注意点(特にSupabase / PlanetScale)まで踏み込んで解説していきます。

各ORM紹介:Next.js App Routerでよく使われる4つの選択肢

本記事では、Next.js App Routerと組み合わせて使われることの多い以下の4つのORMを比較対象とします。

ORM 対応DB 特徴
Prisma PostgreSQL, MySQL, SQLite など 型安全・ドキュメント豊富・GUI管理ツール付き。スキーマ駆動で高速開発に向く。
Drizzle ORM PostgreSQL, MySQL, SQLite SQLに近い構文で軽量。App RouterやEdge Functionと相性が良く、注目度上昇中。
Kysely PostgreSQL, MySQL, SQLite SQLライクなDSLと高い型推論能力が魅力。自由度の高さと軽量さが特徴。
TypeORM PostgreSQL, MySQL, SQLite DecoratorベースのEntity定義。NestJSでの採用が多く、古参だがApp Routerには非対応点も。

これらはすべて、Next.js App Routerにおいて以下のような用途で使用されることを想定しています。

  • API Route(app/api/*/route.ts)でのデータ取得や登録
  • サーバーアクション内でのデータ操作
  • 必要に応じてEdge Functionで動かす構成(特にDrizzle / Kysely)

https://www.prisma.io/

https://orm.drizzle.team/

https://kysely.dev/

https://typeorm.io/

比較軸:Next.js App RouterでORMを選ぶときに見るべきポイント

ORMの比較といっても、単に「使いやすさ」や「人気」で選ぶだけでは足りません。
特にApp Router時代のNext.jsでは、以下のような観点で選定することが重要です。

型安全性(Type Safety)

  • スキーマ定義から型を自動生成できるか
  • クエリ時の型推論がどこまで精度高く働くか
ORM 型安全性
Prisma
Drizzle ORM
Kysely
TypeORM

補足

  • Prisma:スキーマ駆動の型生成が可能。モデル・クエリ両方で型安全性が高い。
  • Drizzle:SQL DSLを使いながらも、テーブル構造をベースにした完全型安全を実現。
  • Kysely:SQL文風ながら、構文に依存しない柔軟な型推論が非常に強力。複雑なJOINでも型が崩れにくい。
  • TypeORM:Entity定義とクエリ構文の整合が取りにくく、型と実行時のズレが発生しやすい。

Edge Functionとの相性(軽量さ・クライアントサイズ)

  • Vercelなどのホスティング環境でEdge Functionを使いたい場合、クライアントサイズやコネクション制限に注意が必要
ORM Edge対応
Prisma
Drizzle ORM
Kysely
TypeORM ×

補足

  • Prisma はクライアントサイズが大きく、Edge Function 非推奨。
  • Drizzle / Kysely は非常に軽量で、Vercel の Edge Runtime にも適している。
  • TypeORM はNode依存が強く、Edge環境では実質不可。

Migration対応とDB管理

  • スキーマ変更をどう反映するか
  • CLIツールの使いやすさ、DBとの整合性
ORM Migration管理
Prisma
Drizzle ORM
Kysely
TypeORM

補足

  • Prisma:prisma migrate / db push による管理が簡単で、実運用向け。
  • Drizzle:drizzle-kit でスキーマからDDLを生成可能。運用にも強い。
  • Kysely:公式のMigrationはやや扱いづらい。別ライブラリや手動管理が必要。
  • TypeORM:CLIでMigration生成可能だが、精度や制御性がやや弱い。

Next.js App Routerでの実装しやすさ

  • API Routeやサーバーアクションで自然に使えるか
  • 接続管理、初期化処理、型定義の扱いやすさ
ORM 実装しやすさ
Prisma
Drizzle ORM
Kysely
TypeORM

補足

  • Prisma / Drizzle は import と初期化が簡潔で、App Routerとの統合も自然。
  • Kysely は型定義の準備に少し手間があるが柔軟性が高い。
  • TypeORM はDI風の構成が必要で、APIルートやServer Actionsで扱うには工夫が必要。

Supabase / PlanetScaleとの相性(詳細は後述)

ORM Supabaseとの相性 PlanetScaleとの相性
Prisma
Drizzle ORM
Kysely
TypeORM

補足

  • PrismaはSupabaseに強いが、PlanetScaleでは制限あり
  • DrizzleやKyselyは両方と好相性
  • TypeORMは両者と微妙(特にPlanetScaleで要注意)

以上の比較軸をベースに、次のセクションでは「実際に同じデータ取得処理を各ORMでどう書くか」を比較していきます。実装時の書き心地や見通しやすさもあわせて見ていきましょう。

まとめと次回予告

この記事では、Next.js App Router におけるORM選定の観点から、以下の4つの主要なORM(Prisma / Drizzle ORM / Kysely / TypeORM)を、型安全性、マイグレーション、Edge対応、マネージドDBとの相性といった軸で比較してきました。

それぞれのORMには明確な個性と選定基準があることが見えてきたのではないでしょうか。

次回の記事では、実際にDockerでPostgreSQLとMySQLを立ち上げた環境で、各ORMを順に導入・マイグレーション・API構築まで行う実践編をお届けします。

  • PrismaでマイグレーションしてAPIを作るには?
  • Drizzleでテーブル定義からスキーマを作るには?
  • Kyselyで同じことをどう表現するか?
  • それぞれの書き心地や設計のクセは?

といった内容を、実装ベースで比較していく予定です。

「言語化しづらい開発体験の違い」まで踏み込みながら、どのORMが自分たちのプロジェクトに合うかを、よりリアルに判断できる材料にしていただけたらと思います。

👉 後編はこちら:

https://shinagawa-web.com/blogs/nextjs-orm-docker-hands-on

Xでシェア
Facebookでシェア
LinkedInでシェア

記事に関するお問い合わせ📝

記事の内容に関するご質問、ご意見などは、下記よりお気軽にお問い合わせください。
ご質問フォームへ

技術支援などお仕事に関するお問い合わせ📄

技術支援やお仕事のご依頼に関するお問い合わせは、下記よりお気軽にお問い合わせください。
お問い合わせフォームへ

関連する技術ブログ

弊社の技術支援サービス

お問い合わせ

経営と現場をつなぐ“共創型”の技術支援。
成果に直結するチーム・技術・プロセスを共に整えます。

お問い合わせ