設定リファレンス

このページ

EmDashは2つのファイルで設定されます:インテグレーション用の astro.config.mjs とコンテンツコレクション用の src/live.config.ts です。

Astroインテグレーション

astro.config.mjs でEmDashをAstroインテグレーションとして設定します:

import { defineConfig } from "astro/config";
import emdash, { local, s3 } from "emdash/astro";
import { sqlite, libsql } from "emdash/db";

export default defineConfig({
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			storage: local({
				directory: "./uploads",
				baseUrl: "/_emdash/api/media/file",
			}),
			plugins: [],
		}),
	],
});

インテグレーションオプション

database

必須。 データベースアダプター設定。アダプターを選択します:

// SQLite (Node.js)
database: sqlite({ url: "file:./data.db" });

// PostgreSQL
database: postgres({ connectionString: process.env.DATABASE_URL });

// libSQL
database: libsql({
	url: process.env.LIBSQL_DATABASE_URL,
	authToken: process.env.LIBSQL_AUTH_TOKEN,
});

// Cloudflare D1(@emdash-cms/cloudflareからインポート)
database: d1({ binding: "DB" });

詳細はデータベースオプションを参照してください。

storage

必須。 メディアストレージアダプター設定。アダプターを選択します:

// ローカルファイルシステム(開発用)
storage: local({
	directory: "./uploads",
	baseUrl: "/_emdash/api/media/file",
});

// R2バインディング(Cloudflare Workers)
storage: r2({
	binding: "MEDIA",
	publicUrl: "https://pub-xxxx.r2.dev", // オプション
});

// S3互換(任意のプラットフォーム)
storage: s3()

// または明示的な値で
storage: s3({
	endpoint: "https://s3.amazonaws.com",
	bucket: "my-bucket",
	accessKeyId: process.env.S3_ACCESS_KEY_ID,
	secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
	region: "us-east-1", // オプション、デフォルト: "auto"
	publicUrl: "https://cdn.example.com", // オプション
});

詳細はストレージオプションを参照してください。

objectCache

オプション。 コンテンツと設定のクエリ結果をキー/バリューストアにキャッシュし、リクエストごとにデータベースクエリなしで読み取りを提供します。省略時は無効です。アダプターを選択します:

// Cloudflare KV(すべてのisolate間で共有)
import { kvCache } from "@emdash-cms/cloudflare";
objectCache: kvCache({ binding: "CACHE" });

// インメモリ(Node.js / 開発用)
import { memoryCache } from "emdash/astro";
objectCache: memoryCache();

plugins

オプション。 EmDashプラグインの配列:

import seoPlugin from "@emdash-cms/plugin-seo";
plugins: [seoPlugin()];

fonts

オプション。 管理画面のフォント設定。

デフォルトでEmDashはAstro Font API経由でNoto Sansを読み込みます。フォントはビルド時にGoogleからダウンロードされ、セルフホストされます。ベースフォントはラテン、キリル、ギリシャ、デーバナーガリー、ベトナム文字をカバーします。

追加の文字体系のサポートを追加するには、スクリプト名を渡します:

emdash({
  fonts: {
    scripts: ["arabic", "japanese"],
  },
})

利用可能なスクリプトは arabicarmenianbengalichinese-simplifiedchinese-traditionalchinese-hongkongdevanagariethiopicfarsigeorgiangujaratigurmukhihebrewjapanesekannadakhmerkoreanlaomalayalammyanmaroriyasinhalatamilteluguthaitibetan です。

フォント注入を完全に無効にしシステムフォントを使用するには false に設定します:

emdash({
	fonts: false,
})

auth

オプション。 認証アダプター。EmDashの組み込みログインはパスキーを使用します。auth を設定すると外部プロバイダーに置き換わります。Cloudflare Accessアダプター access()@emdash-cms/cloudflare から提供されます:

import { access } from "@emdash-cms/cloudflare";

emdash({
	auth: access({
		teamDomain: "myteam.cloudflareaccess.com",
		audience: "your-app-audience-tag",
		roleMapping: {
			Admins: 50,
			Editors: 40,
		},
	}),
});

access() のオプション:

オプションデフォルト説明
teamDomainstring必須Cloudflare Accessチームドメイン
audiencestringApplication Audience (AUD) タグ
audienceEnvVarstring"CF_ACCESS_AUDIENCE"ランタイムにaudienceタグを読み取る環境変数
autoProvisionbooleantrue初回ログイン時にEmDashユーザーを作成
defaultRolenumber30roleMapping にマッチしないユーザーのロールレベル
syncRolesbooleanfalseプロビジョニング時だけでなく毎回ログイン時に roleMapping を再適用
roleMappingobjectIdPグループ名をEmDashロールレベルにマッピング

authProviders

オプション。 プラグイン可能なログインプロバイダーの配列:

import { github } from "emdash/auth/providers/github";
import { google } from "emdash/auth/providers/google";
import { atproto } from "@emdash-cms/auth-atproto";

emdash({
	authProviders: [github(), google(), atproto()],
});

組み込みプロバイダー:

  • github()EMDASH_OAUTH_GITHUB_CLIENT_ID / EMDASH_OAUTH_GITHUB_CLIENT_SECRET を読み取ります。
  • google()EMDASH_OAUTH_GOOGLE_CLIENT_ID / EMDASH_OAUTH_GOOGLE_CLIENT_SECRET を読み取ります。
  • atproto() — Atmosphereアカウントログイン(BlueSkyとATプロトコルネットワーク)。環境変数不要。{ allowedDIDs, allowedHandles, defaultRole } を受け付けます。

siteUrl

オプション。 サイトの公開ブラウザ向けオリジン(スキーム + ホスト + オプションポート、パスなし)。

TLS終端リバースプロキシの背後では、Astro.url は公開アドレス(https://cms.example.com)ではなく内部アドレス(http://localhost:4321)を返します。これはパスキー、CSRFオリジンマッチング、OAuthリダイレクト、ログインリダイレクト、MCP検出、スナップショットエクスポート、サイトマップ、robots.txt、JSON-LD構造化データを壊します。siteUrl を設定してすべてを一度に修正します。

emdash({
	database: sqlite({ url: "file:./data.db" }),
	storage: local({
		directory: "./uploads",
		baseUrl: "/_emdash/api/media/file",
	}),
	siteUrl: "https://cms.example.com",
});

設定で siteUrl が設定されていない場合、EmDashは順番に環境変数をチェックします:EMDASH_SITE_URL、次に SITE_URL

マルチオリジンパスキー検証

siteUrl は単一の正規オリジンを定義します。allowedOrigins または EMDASH_ALLOWED_ORIGINS 環境変数で追加の受け入れオリジンを宣言します:

emdash({
	siteUrl: "https://example.com",
	allowedOrigins: ["https://preview.example.com"],
})

リバースプロキシ設定

import { defineConfig } from "astro/config";
import emdash, { local } from "emdash/astro";
import { sqlite } from "emdash/db";

export default defineConfig({
	security: {
		allowedDomains: [
			{ hostname: "cms.example.com", protocol: "https" },
			{ hostname: "cms.example.com", protocol: "http" },
		],
	},
	vite: {
		server: {
			allowedHosts: ["cms.example.com"],
		},
	},
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			storage: local({
				directory: "./uploads",
				baseUrl: "/_emdash/api/media/file",
			}),
			siteUrl: "https://cms.example.com",
		}),
	],
});

trustedProxyHeaders

オプション。 リバースプロキシの背後でクライアントIP解決のために信頼するヘッダー。auth レートリミットとパブリックコメントエンドポイントで使用されます。

emdash({
	database: sqlite({ url: "file:./data.db" }),
	trustedProxyHeaders: ["x-real-ip"],
});

maxUploadSize

オプション。 メディアファイルアップロードの最大許容サイズ(バイト)。デフォルトは 52_428_800(50 MB):

emdash({
	maxUploadSize: 100 * 1024 * 1024, // 100 MB
});

toolbar

オプション。 エディターツールバーの配信方法を制御します。デフォルトは "server"

動作
"server"(デフォルト)ツールバーは認証済みエディター向けの各HTMLレスポンスにサーバーサイドで注入されます。
"client"パブリックHTMLはすべての訪問者で同一。小さなブートストラップスクリプトが “Edit” ピルを表示します。
falseツールバーもブートストラップスクリプトもレンダリングしません。

experimental

オプション。 マイナーリリースで動作やフォーマットが変更される可能性のあるオプトイン機能。

experimental.registry

オプション。 管理ダッシュボードのプラグインブラウズとインストールフローをフェデレーテッドなプラグインレジストリに向けます。

emdash({
	sandboxRunner: "@emdash-cms/sandbox-cloudflare",
	experimental: {
		registry: {
			aggregatorUrl: "https://registry.emdashcms.com",
			acceptLabelers: "did:plc:emdashverification",
			policy: {
				minimumReleaseAge: "48h",
				minimumReleaseAgeExclude: ["did:plc:yourfirstpartydid"],
			},
		},
	},
});

データベースアダプター

import { sqlite, libsql, postgres } from "emdash/db";

sqlite(config)

オプション説明
urlstringfile: プレフィックス付きファイルパス

libsql(config)

オプション説明
urlstringデータベースURL
authTokenstring認証トークン(ローカルファイルではオプション)

postgres(config)

オプション説明
connectionStringstringPostgreSQL接続URL
hoststringデータベースホスト
portnumberデータベースポート
databasestringデータベース名
userstringデータベースユーザー
passwordstringデータベースパスワード
sslbooleanSSLを有効化
pool.minnumber最小プールサイズ(デフォルト: 0)
pool.maxnumber最大プールサイズ(デフォルト: 10)

d1(config)

Cloudflare D1。@emdash-cms/cloudflare からインポート。

オプションデフォルト説明
bindingstringwrangler.jsonc のD1バインディング名
sessionstring"disabled"リードレプリケーションモード
bookmarkCookiestring"__em_d1_bookmark"セッションブックマークのCookie名

ストレージアダプター

import emdash, { local, s3 } from "emdash/astro";
import { r2 } from "@emdash-cms/cloudflare";

local(config)

オプション説明
directorystringディレクトリパス
baseUrlstringファイル配信のベースURL

r2(config)

オプション説明
bindingstringR2バインディング名
publicUrlstringオプションの公開URL

s3(config?)

S3互換ストレージ。すべてのフィールドはオプションです。

前提条件: @aws-sdk/client-s3@aws-sdk/s3-request-presigner をインストール。

オプション説明
endpointstringS3エンドポイントURL (S3_ENDPOINT)
bucketstringバケット名 (S3_BUCKET)
accessKeyIdstringアクセスキー (S3_ACCESS_KEY_ID)
secretAccessKeystringシークレットキー (S3_SECRET_ACCESS_KEY)
regionstringリージョン、デフォルト "auto" (S3_REGION)
publicUrlstringオプションのCDN URL (S3_PUBLIC_URL)

オブジェクトキャッシュアダプター

kvCache(config)

Cloudflare KVバックエンド。@emdash-cms/cloudflare からインポート。

kvCache({
	binding: "CACHE",
	defaultTtl: 3600,
	revalidate: 1000,
	timeout: 2000,
	keyPrefix: "em",
})

memoryCache(config?)

Node.js用インプロセスバックエンド。emdash/astro からインポート。

memoryCache({
	defaultTtl: 3600,
	revalidate: 1000,
	maxEntries: 1000,
	keyPrefix: "em",
})

ライブコレクション

import { defineLiveCollection } from "astro:content";
import { emdashLoader } from "emdash/runtime";

export const collections = {
	_emdash: defineLiveCollection({
		loader: emdashLoader(),
	}),
};

ローダーオプション

emdashLoader() 関数は引数を取りません:

emdashLoader();

環境変数

変数説明
EMDASH_SITE_URL公開ブラウザ向けオリジン(SITE_URL にフォールバック)
EMDASH_ALLOWED_ORIGINSパスキー検証で受け入れる追加オリジンのカンマ区切りリスト
EMDASH_DATABASE_URLデータベースURLの上書き
EMDASH_ENCRYPTION_KEYプラグインシークレットの保存時暗号化用キー
EMDASH_PREVIEW_SECRETプレビューHMACシークレットのオプションオーバーライド
EMDASH_IP_SALTコメンターIPハッシュソルトのオプションオーバーライド
EMDASH_AUTH_SECRETレガシー。設定時IP-saltソースとして使用。
EMDASH_TURNSTILE_SECRET_KEYCloudflare Turnstileシークレットキー
EMDASH_URLスキーマ同期用のリモートEmDash URL
npx emdash secrets generate

package.json設定

{
	"emdash": {
		"label": "My Blog Template",
		"seed": ".emdash/seed.json",
		"url": "https://my-site.pages.dev"
	}
}

TypeScript設定

{
	"compilerOptions": {
		"paths": {
			"@emdash-cms/types": ["./.emdash/types.ts"]
		}
	}
}
npx emdash types