Sutando vs Drizzle:Active Record と SQL ファーストの対決
Sutando と Drizzle は、Node.js の ORM として異なるアプローチを代表しています。Sutando は Active Record パターンで開発速度を重視し、Drizzle は SQL ファーストで最大限の制御を提供します。
Sutando と Drizzle は、Node.js の ORM として異なるアプローチを代表しています。Sutando は Active Record パターンで開発速度を重視し、Drizzle は SQL ファーストで最大限の制御を提供します。
核心的な違い
| 側面 | Sutando | Drizzle |
|---|---|---|
| パターン | Active Record | SQL ビルダー |
| スキーマ | モデルクラス | スキーマ定義ファイル |
| クエリ | メソッドチェーン | SQL ライクな API |
| リレーション | 宣言的メソッド | 手動 JOIN |
| ランタイム | ゼロオーバーヘッド | ゼロオーバーヘッド |
| 学習曲線 | 低い(Eloquent ライク) | 中程度(SQL 知識が必要) |
スキーマ定義
// Sutando: モデルクラスで定義
class User extends Model {
table = 'users';
casts = { is_admin: 'boolean' };
relationPosts() { return this.hasMany(Post, 'user_id'); }
}
// Drizzle: スキーマファイルで定義
import { pgTable, serial, varchar, boolean } from 'drizzle-orm/pg-core';
export const users = pgTable('users', {
id: serial('id').primaryKey(),
name: varchar('name').notNull(),
email: varchar('email').notNull().unique(),
is_admin: boolean('is_admin').default(false),
});
クエリの比較
基本的なクエリ
// Sutando
const users = await User.query()
.where('is_admin', true)
.orderBy('created_at', 'desc')
.get();
// Drizzle
const result = await db.select()
.from(users)
.where(eq(users.is_admin, true))
.orderBy(desc(users.created_at));
リレーション
// Sutando: ネストされたリレーションを1行で
const users = await User.query()
.with('posts.comments.author')
.get();
// Drizzle: 複数の JOIN が必要
const result = await db.select()
.from(users)
.leftJoin(posts, eq(users.id, posts.userId))
.leftJoin(comments, eq(posts.id, comments.postId))
.leftJoin(authors, eq(comments.authorId, authors.id));
Sutando の利点
1. リレーション管理
Sutando の最大の利点です。Drizzle ではすべてのクエリで明示的な JOIN が必要ですが、Sutando は宣言的なリレーションメソッドで処理します。
2. 組み込みのソフトデリート
// Sutando: deleted_at カラムを追加するだけ
import { Model, compose, SoftDeletes } from 'sutando';
class Post extends compose(Model, SoftDeletes) {
}
await post.delete(); // ソフトデリート
await post.forceDelete(); // 完全削除
Drizzle ではすべてのクエリで手動フィルタリングが必要です。
3. 開発速度
CRUD アプリケーションにおいて、Sutando は大幅に少ないコードで済みます。
Drizzle の利点
1. SQL の完全な制御
複雑なクエリやパフォーマンスが重要な場面で、Drizzle は SQL に近い制御を提供します。
2. エッジ環境でのパフォーマンス
Drizzle は Cloudflare Workers や Vercel Edge などのエッジ環境で非常に軽量に動作します。
3. 型安全性
スキーマから完全な型を生成するため、クエリ結果の型推論が強力です。
どちらを選ぶべきか?
Sutando を選ぶ場合:
- CRUD 中心のアプリケーション
- リレーション管理をシンプルにしたい
- Laravel Eloquent の経験がある
- 開発速度を重視する
Drizzle を選ぶ場合:
- SQL の完全な制御が必要
- エッジ環境でのパフォーマンスが重要
- 複雑なクエリが多い
- チームが SQL に精通している
結論
Sutando は開発速度を、Drizzle は制御力を優先します。CRUD アプリなら Sutando、複雑なクエリが中心なら Drizzle が適しています。
Sutando を試す:npm install sutando — ドキュメント