EmDash は複数のデータベースバックエンドをサポートしています。デプロイメントターゲットに基づいて選択してください。
概要
| データベース | 最適な用途 | デプロイメント |
|---|---|---|
| D1 | Cloudflare Workers | エッジ、グローバル分散 |
| PostgreSQL | 本番 Node.js | Postgres をサポートする任意のプラットフォーム |
| libSQL | リモートデータベース | エッジまたは Node.js |
| SQLite | Node.js、ローカル開発 | シングルサーバー |
Cloudflare D1
D1 は Cloudflare のサーバーレス SQLite データベースです。Cloudflare Workers へのデプロイ時に使用します。
import { d1 } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
emdash({
database: d1({ binding: "DB" }),
}),
],
});
設定
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
binding | string | — | wrangler.jsonc からの D1 バインディング名 |
session | string | "disabled" | 読み取りレプリケーションモード(下記参照) |
bookmarkCookie | string | "__em_d1_bookmark" | セッションブックマーク用の Cookie 名 |
セットアップ
wrangler.jsonc
{
"d1_databases": [
{
"binding": "DB",
"database_name": "emdash-db",
"database_id": "your-database-id"
}
]
} wrangler.toml
[[d1_databases]]
binding = "DB"
database_name = "emdash-db"
database_id = "your-database-id" D1 データベースの作成
wrangler d1 create emdash-db
読み取りレプリカ
D1 は読み取りレプリケーションをサポートし、グローバルに分散されたサイトの読み取りレイテンシを低減します。有効にすると、読み取りクエリは常にプライマリデータベースにアクセスするのではなく、近くのレプリカにルーティングされます。
EmDash は D1 Sessions API を使用してこれを透過的に管理します。session オプションで有効にします:
import { d1 } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
emdash({
database: d1({
binding: "DB",
session: "auto",
}),
}),
],
});
セッションモード
| モード | 動作 |
|---|---|
"disabled" | セッションなし。すべてのクエリがプライマリに送られます。デフォルト。 |
"auto" | 匿名リクエストは最も近いレプリカから読み取ります。認証済みユーザーはブックマーク Cookie を介して読み書き一貫性を取得します。 |
"primary-first" | "auto" と同様ですが、最初のクエリは常にプライマリに送られます。書き込みが非常に頻繁なサイトに使用します。 |
仕組み
- 匿名訪問者は
first-unconstrainedを取得 — 読み取りは最も近いレプリカに送られ、最低レイテンシを実現します。匿名ユーザーは書き込みを行わないため、一貫性の保証は必要ありません。 - 認証済みユーザー(編集者、著者)はブックマークベースのセッションを取得します。書き込み後、ブックマーク Cookie により次のリクエストが少なくともその状態を参照することが保証されます。
- 書き込みリクエスト(
POST、PUT、DELETE)は常にプライマリデータベースから開始されます。 - ビルド時クエリ(Astro コンテンツコレクション)はセッションを完全にバイパスし、プライマリを直接使用します。
libSQL
libSQL は SQLite のフォークで、リモート接続をサポートしています。Cloudflare D1 を使用せずにリモートデータベースが必要な場合に使用します。
import { libsql } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: libsql({
url: process.env.LIBSQL_DATABASE_URL,
authToken: process.env.LIBSQL_AUTH_TOKEN,
}),
}),
],
});
設定
| オプション | 型 | 説明 |
|---|---|---|
url | string | データベース URL(libsql://... または file:...) |
authToken | string | リモートデータベースの認証トークン(ローカルではオプション) |
ローカル開発
開発中にローカル libSQL ファイルを使用します:
database: libsql({ url: "file:./data.db" });
PostgreSQL
PostgreSQL は、完全なリレーショナルデータベースが必要な Node.js デプロイメントでサポートされています。
import { postgres } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: postgres({
connectionString: process.env.DATABASE_URL,
}),
}),
],
});
設定
接続文字列または個別のパラメータで接続できます:
// 接続文字列
database: postgres({
connectionString: "postgres://user:password@localhost:5432/emdash",
});
// 個別のパラメータ
database: postgres({
host: "localhost",
port: 5432,
database: "emdash",
user: "emdash",
password: process.env.DB_PASSWORD,
ssl: true,
});
| オプション | 型 | 説明 |
|---|---|---|
connectionString | string | PostgreSQL 接続 URL |
host | string | データベースホスト |
port | number | データベースポート |
database | string | データベース名 |
user | string | データベースユーザー |
password | string | データベースパスワード |
ssl | boolean | SSL を有効化 |
pool.min | number | 最小プール接続数(デフォルト 0) |
pool.max | number | 最大プール接続数(デフォルト 10) |
接続プーリング
アダプターは内部で pg.Pool を使用します。デプロイメントに基づいてプールサイズを調整します:
database: postgres({
connectionString: process.env.DATABASE_URL,
pool: { min: 2, max: 20 },
});
SQLite
better-sqlite3 を使用した SQLite は、Node.js デプロイメントの最もシンプルなオプションです。
import { sqlite } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: sqlite({ url: "file:./data.db" }),
}),
],
});
設定
| オプション | 型 | 説明 |
|---|---|---|
url | string | file: プレフィックス付きファイルパス |
ファイルパス
url は file: で始まる必要があります:
// 相対パス
database: sqlite({ url: "file:./data/emdash.db" });
// 絶対パス
database: sqlite({ url: "file:/var/data/emdash.db" });
// 環境変数から
database: sqlite({ url: `file:${process.env.DATABASE_PATH}` });
マイグレーション
EmDash は SQLite、libSQL、PostgreSQL のマイグレーションを自動的に処理します。D1 の場合は、Wrangler を介してマイグレーションを実行します。
マイグレーションステータスの確認
npx emdash init --database ./data.db
このコマンドは:
- 必要に応じてデータベースファイルを作成
- 保留中のマイグレーションを実行
- 現在のマイグレーションステータスを報告
マイグレーションファイル
マイグレーションは EmDash にバンドルされています。手動で実行するには:
# SQLite/libSQL - マイグレーションは自動的に実行されます
# D1 - wrangler を介して実行
wrangler d1 migrations apply DB
環境ベースの設定
環境ごとに異なるデータベースを使用します:
import { sqlite, libsql, postgres } from "emdash/db";
import { d1 } from "@emdash-cms/cloudflare";
const database = import.meta.env.PROD ? d1({ binding: "DB" }) : sqlite({ url: "file:./data.db" });
export default defineConfig({
integrations: [emdash({ database })],
});
または環境変数に基づいて切り替えます:
const database = process.env.DATABASE_URL
? postgres({ connectionString: process.env.DATABASE_URL })
: sqlite({ url: "file:./data.db" });