Skip to content

Drizzle は、SQL 風の「クエリビルダー」API と ORM 風の Queries API の両方をサポートする ORM です。bun:sqlite 組み込みモジュールをサポートしています。


bun init で新しいプロジェクトを作成し、Drizzle をインストールすることから始めましょう。

sh
bun init -y
bun add drizzle-orm
bun add -D drizzle-kit

次に、bun:sqlite モジュールを使用して SQLite データベースに接続し、Drizzle データベースインスタンスを作成します。

ts
import { drizzle } from "drizzle-orm/bun-sqlite";
import { Database } from "bun:sqlite";

const sqlite = new Database("sqlite.db");
export const db = drizzle(sqlite);

データベースを実際に動作させるには、index.ts に次の行を追加します。

ts
import { db } from "./db";
import { sql } from "drizzle-orm";

const query = sql`select "hello world" as text`;
const result = db.get<{ text: string }>(query);
console.log(result);

次に index.ts を Bun で実行します。Bun は自動的に sqlite.db を作成し、クエリを実行します。

sh
bun run index.ts
txt
{
  text: "hello world"
}

データベースに適切なスキーマを設定しましょう。schema.ts ファイルを作成し、movies テーブルを定義します。

ts
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";

export const movies = sqliteTable("movies", {
  id: integer("id").primaryKey(),
  title: text("name"),
  releaseYear: integer("release_year"),
});

drizzle-kit CLI を使用して、初期 SQL マイグレーションを生成できます。

sh
bunx drizzle-kit generate --dialect sqlite --schema ./schema.ts

これにより、新しい drizzle ディレクトリが作成され、.sql マイグレーションファイルと meta ディレクトリが含まれます。

txt
drizzle
├── 0000_ordinary_beyonder.sql
└── meta
    ├── 0000_snapshot.json
    └── _journal.json

シンプルな migrate.ts スクリプトでこれらのマイグレーションを実行できます。

このスクリプトは sqlite.db に書き込む SQLite データベースへの新しい接続を作成し、drizzle ディレクトリ内のすべての未実行のマイグレーションを実行します。

ts
import { migrate } from "drizzle-orm/bun-sqlite/migrator";

import { drizzle } from "drizzle-orm/bun-sqlite";
import { Database } from "bun:sqlite";

const sqlite = new Database("sqlite.db");
const db = drizzle(sqlite);
migrate(db, { migrationsFolder: "./drizzle" });

このスクリプトを bun で実行してマイグレーションを実行します。

sh
bun run migrate.ts

これでデータベースが完成したので、データを追加しましょう。seed.ts ファイルを次の内容で作成します。

ts
import { db } from "./db";
import * as schema from "./schema";

await db.insert(schema.movies).values([
  {
    title: "The Matrix",
    releaseYear: 1999,
  },
  {
    title: "The Matrix Reloaded",
    releaseYear: 2003,
  },
  {
    title: "The Matrix Revolutions",
    releaseYear: 2003,
  },
]);

console.log(`Seeding complete.`);

次にこのファイルを実行します。

sh
bun run seed.ts
txt
Seeding complete.

これでスキーマとサンプルデータを含むデータベースが完成しました。Drizzle を使用してクエリを実行しましょう。index.ts の内容を次に置き換えます。

ts
import * as schema from "./schema";
import { db } from "./db";

const result = await db.select().from(schema.movies);
console.log(result);

次にファイルを実行します。挿入した 3 つの映画が表示されます。

sh
bun run index.ts
txt
[
  {
    id: 1,
    title: "The Matrix",
    releaseYear: 1999
  }, {
    id: 2,
    title: "The Matrix Reloaded",
    releaseYear: 2003
  }, {
    id: 3,
    title: "The Matrix Revolutions",
    releaseYear: 2003
  }
]

完全なドキュメントについては、Drizzle ウェブサイト を参照してください。

Bun by www.bunjs.com.cn 編集