mcpField
N
netlify-db

netlify-db

github.com/netlifyデータ・データベース4796 回インストール6 日前に更新
リポジトリ

netlify-db について

Netlifyを通じてマネージドNeon Postgresデータベースを構成・利用するスキルです。Netlifyプロジェクトの開発者向けに、SQLやDrizzle ORM、スキーマ移行、プレビュー用ブランチ、ローカル開発を扱います。

主な機能

  1. 01Netlify経由でNeon Postgresを構成
  2. 02SQLまたはDrizzle ORMでクエリ
  3. 03スキーマとマイグレーションの管理
  4. 04プレビュー用の別データベースブランチ
  5. 05ローカル開発でデータベースに接続

活用シーン

  1. 01構造化されたリレーショナルデータの保存
  2. 02マイグレーションによるスキーマ変更
  3. 03デプロイプレビューでデータベース変更をテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/netlify/context-and-tools --skill netlify-db

インストール後、Claude Code で/netlify-dbを入力して読み込まれたか確認します。

詳細

Netlify DB

Netlify DB は、マネージド Neon Postgres データベースを自動的にプロビジョニングします。Neon アカウントは不要です。

DB と Blobs の使い分け

次の場合は Netlify DB を使用します:

  • 構造化されたリレーショナルデータを保存する
  • データが時間とともに増加する
  • クエリ、フィルタリング、結合、集計が必要

次の場合は、代わりに Netlify Blobs を使用します:

  • ファイル(画像、ドキュメント、エクスポートデータ)を保存する
  • 今後増える見込みのない少数のレコードを扱う
  • リレーショナルな要件のない、シンプルなキーと値のストレージが必要
  • @netlify/blobs 以外の依存関係をなくしたい

Blobs の使用方法については、netlify-blobs スキルを参照してください。

セットアップ

npm install @netlify/neon
netlify db init    # Provisions database and sets up Drizzle ORM

前提条件:Netlify CLI にログインし、サイトをリンクしていること(netlify link)。

@netlify/neon による生 SQL

@netlify/neon は @neondatabase/serverless をラップしています。接続文字列は不要です。自動的に設定されます。

import { neon } from "@netlify/neon";
const sql = neon();

const users = await sql("SELECT * FROM users");
await sql("INSERT INTO users (name) VALUES ($1)", ["Jane"]);
await sql("UPDATE users SET name = $1 WHERE id = $2", ["Jane", 1]);
await sql("DELETE FROM users WHERE id = $1", [1]);

Drizzle ORM との統合

ほとんどのプロジェクトでは、Netlify DB の上に Drizzle ORM を使用します。

drizzle.config.ts
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql",
  dbCredentials: { url: process.env.NETLIFY_DATABASE_URL! },
  schema: "./db/schema.ts",
  out: "./migrations",
  migrations: { prefix: "timestamp" }, // Avoids conflicts across branches
});
db/index.ts
import { neon } from "@neondatabase/serverless";
import { drizzle } from "drizzle-orm/neon-http";
import * as schema from "./schema";

const sql = neon(process.env.NETLIFY_DATABASE_URL!);
export const db = drizzle(sql, { schema });
export * from "./schema";
スキーマの例
// db/schema.ts
import { integer, pgTable, varchar, text, boolean, timestamp } from "drizzle-orm/pg-core";

export const items = pgTable("items", {
  id: integer().primaryKey().generatedAlwaysAsIdentity(),
  title: varchar({ length: 255 }).notNull(),
  description: text(),
  isActive: boolean("is_active").notNull().default(true),
  createdAt: timestamp("created_at").defaultNow(),
  updatedAt: timestamp("updated_at").defaultNow(),
});

export type Item = typeof items.$inferSelect;
export type NewItem = typeof items.$inferInsert;
クエリパターン
import { db, items } from "../db";
import { eq } from "drizzle-orm";

const all = await db.select().from(items);
const [one] = await db.select().from(items).where(eq(items.id, id)).limit(1);
const [created] = await db.insert(items).values({ title: "New" }).returning();
const [updated] = await db.update(items).set({ title: "Updated" }).where(eq(items.id, id)).returning();
await db.delete(items).where(eq(items.id, id));

マイグレーション

{
  "scripts": {
    "db:generate": "drizzle-kit generate",
    "db:migrate": "netlify dev:exec drizzle-kit migrate",
    "db:push": "netlify dev:exec drizzle-kit push",
    "db:studio": "netlify dev:exec drizzle-kit studio"
  }
}

ワークフロー:スキーマを変更し、db:generate を実行してから、db:migrate を実行します。

デプロイプレビューのブランチ機能

Netlify DB はブランチ機能をサポートしています。production ブランチには production データベースが割り当てられ、それ以外のすべてのブランチとデプロイプレビューには別の preview ブランチが割り当てられます。preview でマイグレーションを開発・テストし、main にマージしてから production に適用します。

環境変数

  • NETLIFY_DATABASE_URL — データベースのプロビジョニング時に Netlify によって自動設定されます
  • 手動で取得する場合:netlify env:get NETLIFY_DATABASE_URL

ローカル開発

netlify dev を実行するか、@netlify/vite-plugin を使用すると、ローカルでデータベースにアクセスできます。適切な環境でマイグレーションコマンドを実行するには、netlify dev:exec を使用します。

コメント