管理者は、プラグインレジストリからサンドボックス化されたプラグインをインストールしたり、astro.config.mjs に npm パッケージを登録したりできます。設定ベースのプラグインは、サンドボックス内でも、サイトのプロセス内でも実行できます。
管理画面からのインストールに備える
レジストリからのインストールには、次のものが必要です。
plugins:manage権限を持つ管理者アカウント。- ダウンロードしたプラグインバンドルのための設定済みのストレージ。
- 利用可能なサンドボックスランナー。
Cloudflare Workers では、@emdash-cms/cloudflare の sandbox() を使用します。
import { sandbox } from "@emdash-cms/cloudflare";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
export default defineConfig({
integrations: [
emdash({
sandboxRunner: sandbox(),
}),
],
});
Cloudflare のランナーは Worker Loader を使って、プラグインごとに個別の Worker を作成します。Workers Paid プランと、LOADER という名前の worker_loaders バインディングが必要です。サンドボックス化されたプラグインは、PluginBridge を通じてコンテンツ、メディア、ストレージ、ネットワーク、メールの API にアクセスするため、サイトの Worker エントリポイントはそのクラスをエクスポートしなければなりません。
*-cloudflare テンプレートは PluginBridge をエクスポートしますが、Worker Loader バインディングはコメントアウトしたままにしてあるため、新しいプロジェクトを Workers の無料プランにデプロイできます。サンドボックス化されたプラグインは、スキャフォールド時に有効にするか、Cloudflare サンドボックスのセットアップに従って後からバインディングを追加してください。sandbox() ヘルパーは、ビルド時に有効な Wrangler 設定を読み取ります。LOADER がない場合でも、レジストリの閲覧はできますが、設定で管理されているサンドボックス化プラグインは読み込まれず、インストールや更新のリクエストは SANDBOX_NOT_AVAILABLE を返します。
Node.js では、ランナーとそのピア依存関係である workerd をインストールします。
npm install @emdash-cms/sandbox-workerd workerd
workerd プロセスは、プラグインのコードを Node.js サーバーとは別に実行します。EmDash インテグレーションでランナーを選択します。
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
export default defineConfig({
integrations: [
emdash({
sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox",
}),
],
});
開発時のセットアップ、ランタイム要件、リソース制限、両プラットフォームでランナーが利用できない場合のエラーについては、プラグインサンドボックスの設定を参照してください。
レジストリからインストールする
- 管理画面で Registry を開きます。
- プラグインを検索して、その詳細ページを開きます。
- リリースを選択し、発行者、メタデータ、要求される権限、検証ステータスを確認します。
- Install を選択します。
- 同意ダイアログで、検証済みのリリース識別子と権限を確認してから、確定します。
EmDash は、発行者の現在の署名付きレコードを検証し、ダウンロードしたバンドルをサンドボックスランナー経由で読み込む前にチェックします。プラグインは Plugins に表示され、そこで無効化や設定ができます。検証と信頼のモデルの全体については、プラグインレジストリを参照してください。
権限を確認する
同意ダイアログには、プラグインが宣言しているすべての権限が表示されます。一般的な権限には次のものがあります。
| 権限 | 付与されるアクセス |
|---|---|
content:read | サイトのコンテンツを読み取る |
content:write | コンテンツを作成、更新、削除する |
content:revisions:read | 保持されているコンテンツのリビジョン履歴を読み取る |
schema:read | コレクションとフィールドの定義を読み取る |
bylines:read | 公開されているバイラインのプロフィールとコンテンツのクレジットを読み取る |
redirects:read | リダイレクトルールを読み取る |
redirects:write | 訪問者の転送先を変更する |
media:read | 準備完了のメディアの安全なメタデータを読み取る |
media:bytes:read | 準備完了のメディアのファイル内容とコンテンツハッシュを読み取る |
media:metadata:write | メディアの代替テキスト、キャプション、フォーカルポイントを変更する |
media:write | メディアをアップロード、置換、削除する |
network:request | プラグインに許可されたホストリストへリクエストを送信する |
プラグインが Model Context Protocol (MCP) ツールとして公開するプラグインルートを宣言している場合は、ダイアログにそれも表示されます。権限モデルの全体については、Capability とセキュリティを参照してください。
プラグインを更新する
- 管理画面で Plugins を開きます。
- Check for updates を選択します。
- 利用可能なリリースがあるレジストリプラグインで Update を選択します。
- 同意ダイアログを確認してから、更新を確定します。
レジストリの更新で権限や MCP ツールが追加される場合、またはルートが認証必須から公開に変わる場合は、もう一度確認が必要です。変更を承認するまで、EmDash はインストール済みのバージョンをそのまま残します。
明示的な更新は前方向のみです。レジストリの最新リリースに追従する更新は、発行者が最新リリースを取り下げた場合にロールバックされることがあります。それ以外のときに古いリリースへ戻すには、プラグインをアンインストールし、そのバージョンをレジストリのページからインストールします。削除を選択しない限り、アンインストールしてもプラグインの保存データは保持されます。
プラグインをアンインストールする
- 管理画面で Plugins を開き、インストール済みのプラグインを展開します。
- Uninstall を選択します。
- 後で再インストールするときにプラグインの保存データが不要な場合にのみ、Also delete plugin storage data を選択します。
- アンインストールを確定します。
EmDash はインストール済みのバンドルを削除し、そのプラグインの読み込みを停止します。デフォルトでは、プラグインのストレージデータは残ります。
npm からインストールする
ネイティブプラグインと、設定で管理されるサンドボックス化プラグインは、npm の依存関係としてインストールされます。パッケージの手順に従って、plugins: [] と sandboxed: [] のどちらかを選択してください。
次の例では、ネイティブの Field Kit プラグインを登録します。
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import { fieldKitPlugin } from "@emdash-cms/plugin-field-kit";
export default defineConfig({
integrations: [
emdash({
plugins: [fieldKitPlugin()],
}),
],
});
設定で管理されるプラグインは、npm の依存関係を更新してサイトをデプロイしたときに変わります。管理画面からインストールや削除はできません。
インストール方法を選ぶ
| レジストリ | sandboxed: [] を使う npm | plugins: [] を使う npm | |
|---|---|---|---|
| インストールと更新 | 管理画面 | 依存関係の変更とデプロイ | 依存関係の変更とデプロイ |
| 実行場所 | 設定済みのサンドボックスランナー | 設定済みのサンドボックスランナー | サイトのプロセス |
| EmDash へのアクセス | 宣言されたプラグイン API のみ | 宣言されたプラグイン API のみ | 宣言されたプラグイン API に加えて、プロセスへの直接アクセス |
Node.js API と直接の fetch() | 利用不可 | 利用不可 | 利用可能 |
| React 管理画面コンポーネント | 利用不可 | 利用不可 | 利用可能 |
| Portable Text レンダラー | 利用不可 | 利用不可 | 利用可能 |
React 管理画面コンポーネント、Portable Text レンダラー、ページフラグメント、またはサイトのプロセスへの直接アクセスが必要な場合は、ネイティブプラグインを使用してください。宣言されたプラグイン APIを通じて動作できる場合は、サンドボックス化されたプラグインを使用してください。