データベースオプション
EmDashは複数のデータベースバックエンドをサポートしています。デプロイ先に基づいて選択してください。
| データベース | 最適な用途 | デプロイ先 |
|---|---|---|
| D1 | Cloudflare Workers | エッジ、グローバル分散型 |
| PostgreSQL | 本番環境用Node.js | PostgreSQLが利用可能な任意のプラットフォーム |
| libSQL | リモートデータベース | エッジまたはNode.js |
| SQLite | Node.js、ローカル開発 | 単一サーバー |
Cloudflare D1
Section titled “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 | "__ec_d1_bookmark" | セッションブックマーク用のクッキー名 |
セットアップ
Section titled “セットアップ”{ "d1_databases": [ { "binding": "DB", "database_name": "emdash-db", "database_id": "your-database-id" } ]}[[d1_databases]]binding = "DB"database_name = "emdash-db"database_id = "your-database-id"D1データベースの作成
Section titled “D1データベースの作成”wrangler d1 create emdash-db読み取りレプリカ
Section titled “読み取りレプリカ”D1は読み取りレプリケーションをサポートしており、グローバル分散型サイトの読み取り遅延を低減できます。有効にすると、読み取りクエリは常にプライマリデータベースにアクセスする代わりに、近くのレプリカにルーティングされます。
EmDashはこれを透過的に管理するためにD1 Sessions APIを使用します。sessionオプションで有効にできます:
js title="astro.config.mjs"import { d1 } from "@emdash-cms/cloudflare";
export default defineConfig({ integrations: [ emdash({ database: d1({ binding: "DB", session: "auto", }), }), ],});セッションモード
Section titled “セッションモード”| モード | 動作 |
|---|---|
"disabled" | セッションなし。すべてのクエリはプライマリに送られます。デフォルト。 |
"auto" | 匿名リクエストは最も近いレプリカから読み取ります。認証済みユーザーはブックマーククッキーを介してread-your-writes整合性を取得します。 |
"primary-first" | "auto"と同様ですが、最初のクエリは常にプライマリに送られます。書き込み頻度の非常に高いサイトに使用します。 |
- 匿名訪問者には
first-unconstrainedが適用され、読み取りは最も近いレプリカに送られて最低遅延を実現します。匿名ユーザーは書き込みを行わないため、整合性保証は必要ありません。 - 認証済みユーザー(編集者、著者)にはブックマークベースのセッションが適用されます。書き込み後、ブックマーククッキーにより次のリクエストで少なくともその状態が反映されます。
- 書き込みリクエスト(
POST、PUT、DELETE)は常にプライマリデータベースから開始されます。 - ビルド時クエリ(Astroコンテンツコレクション)はセッションを完全にバイパスし、プライマリを直接使用します。
libSQL
Section titled “libSQL”libSQLはリモート接続をサポートするSQLiteのフォークです。Cloudflare D1なしでリモートデータベースが必要な場合に使用します。
js title="astro.config.mjs"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 | リモートデータベース用の認証トークン(ローカルではオプション) |
ローカル開発
Section titled “ローカル開発”開発中はローカルのlibSQLファイルを使用します:
database: libsql({ url: "file:./data.db" });PostgreSQL
Section titled “PostgreSQL”PostgreSQLは、本格的なリレーショナルデータベースを必要とするNode.jsデプロイメントでサポートされています。
js title="astro.config.mjs"import { postgres } from "emdash/db";
export default defineConfig({ integrations: [ emdash({ database: postgres({ connectionString: process.env.DATABASE_URL, }), }), ],});接続文字列または個別のパラメータで接続できます:
// Connection stringdatabase: 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) |
コネクションプーリング
Section titled “コネクションプーリング”アダプターは内部でpg.Poolを使用しています。デプロイメントに基づいてプールサイズを調整してください:
database: postgres({ connectionString: process.env.DATABASE_URL, pool: { min: 2, max: 20 },});SQLite
Section titled “SQLite”better-sqlite3を使用したSQLiteは、Node.jsデプロイメントで最もシンプルなオプションです。
js title="astro.config.mjs"import { sqlite } from "emdash/db";
export default defineConfig({ integrations: [ emdash({ database: sqlite({ url: "file:./data.db" }), }), ],});| オプション | タイプ | 説明 |
|---|---|---|
url | string | file:プレフィックス付きのファイルパス |
ファイルパス
Section titled “ファイルパス”urlはfile:で始める必要があります:
// Relative pathdatabase: sqlite({ url: "file:./data/emdash.db" });
// 絶対パスdatabase: sqlite({ url: "file:/var/data/emdash.db" });
// 環境変数からdatabase: sqlite({ url: `file:${process.env.DATABASE_PATH}` });マイグレーション
Section titled “マイグレーション”EmDashはSQLite、libSQL、PostgreSQLのマイグレーションを自動的に処理します。D1の場合、Wrangler経由でマイグレーションを実行してください。
マイグレーションの状態を確認
Section titled “マイグレーションの状態を確認”npx emdash init --database ./data.dbこのコマンドは:
- 必要に応じてデータベースファイルを作成します
- 保留中のマイグレーションを実行します
- 現在のマイグレーション状態を報告します
マイグレーションファイル
Section titled “マイグレーションファイル”マイグレーションはEmDashにバンドルされています。手動で実行するには:
# SQLite/libSQL - migrations run automatically
# D1 - wrangler経由で実行wrangler d1 migrations apply DB環境ベースの設定
Section titled “環境ベースの設定”環境ごとに異なるデータベースを使用:
js title="astro.config.mjs"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" });