プラグインをビルドしたら、EmDash Marketplace に公開して、他のサイトが管理ダッシュボードからインストールできるようにできます。
前提条件
公開前に、プラグインが次を満たしていることを確認してください。
- プラグインのエントリを指す
"."export を含む有効なpackage.jsonがある - 一意の
idと有効な semverversionでdefinePlugin()を使っている - 必要な API を
capabilitiesで宣言している
バンドル形式
公開されるプラグインは、次を含む .tar.gz アーカイブとして配布されます。
| ファイル | 必須 | 説明 |
|---|---|---|
manifest.json | はい | definePlugin() から抽出したプラグインメタデータ |
backend.js | いいえ | バンドル済みサンドボックスコード(自己完結 ES モジュール) |
admin.js | いいえ | バンドル済み管理 UI コード |
README.md | いいえ | プラグインのドキュメント |
icon.png | いいえ | プラグインアイコン(256x256 PNG) |
screenshots/ | いいえ | 最大 5 枚のスクリーンショット(PNG/JPEG、最大 1920x1080) |
manifest.json は definePlugin() 呼び出しから自動生成されます。プラグイン ID、version、capabilities、フック名、ルート名、管理設定が含まれますが、実行可能なコードは含みません。
バンドルの作成
emdash plugin bundle コマンドがプラグインソースから tarball を生成します。
cd packages/plugins/my-plugin
emdash plugin bundle
実行内容:
package.jsonを読み、エントリポイントを特定する- メインエントリを tsdown でビルドし manifest を抽出する
backend.jsをバンドルする(minify、tree-shake、自己完結)"./admin"export があればadmin.jsをバンドルする- アセット(README、アイコン、スクリーンショット)を収集する
- バンドルを検証する(サイズ上限、backend に Node.js builtin を含めない)
dist/に{id}-{version}.tar.gzを書き出す
エントリポイントの解決
bundle コマンドは package.json の exports でコードを見つけます。
{
"exports": {
".": { "import": "./dist/index.mjs" },
"./sandbox": { "import": "./dist/sandbox-entry.mjs" },
"./admin": { "import": "./dist/admin.mjs" }
}
}
| Export | 用途 | ビルド結果 |
|---|---|---|
"." | メインエントリ — manifest 抽出用 | Externals: emdash, @emdash-cms/* |
"./sandbox" | サンドボックスで動くバックエンドコード | 完全自己完結(externals なし) |
"./admin" | 管理 UI コンポーネント | 完全自己完結 |
"./sandbox" がない場合は、フォールバックとして src/sandbox-entry.ts を探します。
オプション
emdash plugin bundle [--dir <path>] [--outDir <path>]
| フラグ | デフォルト | 説明 |
|---|---|---|
--dir | カレントディレクトリ | プラグインソースディレクトリ |
--outDir, -o | dist | tarball の出力ディレクトリ |
検証
bundle コマンドは次をチェックします。
- サイズ上限 — 合計バンドルは 5MB 未満であること
- Node.js builtin 禁止 —
backend.jsはfs、path、child_processなどを import できない(サンドボックスコードは Node.js ではなく V8 isolate で動く) - アイコン寸法 —
icon.pngは 256x256 を推奨(違っても警告のうえ含める) - スクリーンショット上限 — 最大 5 枚、最大 1920x1080
公開
emdash plugin publish コマンドが tarball をマーケットプレイスにアップロードします。
emdash plugin publish
dist/ 内の最新の .tar.gz を見つけてアップロードします。明示的に tarball を指定したり、公開前にビルドすることもできます。
# tarball パスを明示
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz
# 先にビルドしてから公開
emdash plugin publish --build
認証
初回公開時、CLI は GitHub で認証します。
- CLI がブラウザで GitHub のデバイス認証ページを開く
- ターミナルに表示されたコードを入力する
- GitHub が access token を発行する
- CLI が marketplace JWT と交換する(
~/.config/emdash/auth.jsonに保存)
トークンの有効期限は 30 日です。期限切れ後は、次の publish 時に再認証を求められます。
認証は単体でも管理できます。
# 公開せずにログイン
emdash plugin login
# ログアウト(保存トークンを削除)
emdash plugin logout
初回登録
プラグイン ID がマーケットプレイスにまだない場合、emdash plugin publish は最初のバージョンをアップロードする前に自動登録します。
バージョン要件
公開する各バージョンは、直前より高い semver である必要があります。既存バージョンの上書きや再公開はできません。
セキュリティ監査
公開される各バージョンは自動セキュリティ監査を受けます。マーケットプレイスは backend.js と admin.js をスキャンし、次を検出します。
- データ持ち出しパターン
- 設定経由のクレデンシャル収集
- 難読化コード
- リソース悪用(暗号採掘など)
- 不審なネットワーク活動
監査は pass、warn、fail の判定を出し、プラグインのマーケットプレイス掲載に表示されます。マーケットプレイスの enforcement レベルにより、fail は公開そのものをブロックする場合があります。
オプション
emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
| フラグ | デフォルト | 説明 |
|---|---|---|
--tarball | dist/ 内の最新 .tar.gz | tarball の明示パス |
--build | false | 公開前に emdash plugin bundle を実行 |
--dir | カレントディレクトリ | プラグインディレクトリ(--build と併用) |
--registry | https://marketplace.emdashcms.com | マーケットプレイス URL |
一連の流れ
典型的な公開サイクル:
# 1. 変更を加える
# 2. definePlugin() と package.json の version を上げる
# 3. バンドルと公開を一度に
emdash plugin publish --build
バンドルを先に確認する場合:
# tarball をビルド
emdash plugin bundle
# 出力を確認
tar tzf dist/my-plugin-1.1.0.tar.gz
# 公開
emdash plugin publish