😄

Drizzleの接続のメモ

2024/10/01に公開

Drizzleの接続のメモ

環境

  • Next.js(app)
  • postgresql
  • docker-compose

インストール

npm install drizzle-orm postgres
npm install -D drizzle-kit

drizzle.config.tsの作成

ルートディレクトリに作成する

import { defineConfig } from "drizzle-kit"

export default defineConfig({
  // スキーマファイルのディレクトリ
  schema: "./src/db/schema.ts",

  // マイグレーションファイルの出力先
  out: "./src/db/migrations",

  // 指定できるのはMySQL, PostgreSQL, SQLiteの3種類 
  dialect: "postgresql",

  // 接続するDBの情報
  dbCredentials: {
    // ssl接続をオフ
    ssl: false,
    host: 'db',
    user: 'root',
    password: 'password',
    port: 5432,
    database: 'database',
  },
});

コマンドの登録

使用するコマンドを登録すると便利なので登録
デフォルトではdrizzle.config.jsonが設定ファイルになっているみたいなので、設定ファイルが見つからないというエラーが発生する。なので設定ファイルをコマンドを実行するときに指定する

{
  "scripts": {
    "db:generate": "npx drizzle-kit generate --config drizzle.config.ts",
    "db:push": "npx drizzle-kit push --config drizzle.config.ts"
  }
}

スキーマの定義

他の型などはドキュメントを参照

import { pgTable, serial, text, boolean, timestamp } from "drizzle-orm/pg-core";

export const todos = pgTable("todos", {
  id: serial("id").primaryKey(),
  title: text("title").notNull(),
  completed: boolean("completed").default(false).notNull(),
  createdAt: timestamp("created_at").notNull().defaultNow(),
  updatedAt: timestamp("updated_at").notNull().defaultNow(),
});

その後、スキーマ―を基にしてDDLを作成するため、下記コマンドを実行

npm run db:generate

drizzle.config.tsのoutで指定したディレクトリにファイルが諸々生成される

テーブルの作成

テーブルを作成する

npm run db:push

データベースに接続するクライアントを定義

データベースのURLは.env.localに書いておくのが吉

URLはpostgresql://ユーザー名:パスワード@ホスト名:ポート番号/データベース名という構成になっている

const client = postgres("postgresql://root:password@db:5432/database");

export const db = drizzle(client, {
  schema,
});

参考

最後に

間違っていることがあればコメントに書いていただけると幸いです。
よろしくお願いいたします。

GitHubで編集を提案

Discussion