プラグインの公開

このページ

プラグインをビルドしたら、EmDash Marketplace に公開して、他のサイトが管理ダッシュボードからインストールできるようにできます。

前提条件

公開前に、プラグインが次を満たしていることを確認してください。

  • プラグインのエントリを指す "." export を含む有効な package.json がある
  • 一意の id と有効な semver versiondefinePlugin() を使っている
  • 必要な 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.jsondefinePlugin() 呼び出しから自動生成されます。プラグイン ID、version、capabilities、フック名、ルート名、管理設定が含まれますが、実行可能なコードは含みません。

バンドルの作成

emdash plugin bundle コマンドがプラグインソースから tarball を生成します。

cd packages/plugins/my-plugin
emdash plugin bundle

実行内容:

  1. package.json を読み、エントリポイントを特定する
  2. メインエントリを tsdown でビルドし manifest を抽出する
  3. backend.js をバンドルする(minify、tree-shake、自己完結)
  4. "./admin" export があれば admin.js をバンドルする
  5. アセット(README、アイコン、スクリーンショット)を収集する
  6. バンドルを検証する(サイズ上限、backend に Node.js builtin を含めない)
  7. 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, -odisttarball の出力ディレクトリ

検証

bundle コマンドは次をチェックします。

  • サイズ上限 — 合計バンドルは 5MB 未満であること
  • Node.js builtin 禁止backend.jsfspathchild_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 で認証します。

  1. CLI がブラウザで GitHub のデバイス認証ページを開く
  2. ターミナルに表示されたコードを入力する
  3. GitHub が access token を発行する
  4. CLI が marketplace JWT と交換する(~/.config/emdash/auth.json に保存)

トークンの有効期限は 30 日です。期限切れ後は、次の publish 時に再認証を求められます。

認証は単体でも管理できます。

# 公開せずにログイン
emdash plugin login

# ログアウト(保存トークンを削除)
emdash plugin logout

初回登録

プラグイン ID がマーケットプレイスにまだない場合、emdash plugin publish は最初のバージョンをアップロードする前に自動登録します。

バージョン要件

公開する各バージョンは、直前より高い semver である必要があります。既存バージョンの上書きや再公開はできません。

セキュリティ監査

公開される各バージョンは自動セキュリティ監査を受けます。マーケットプレイスは backend.jsadmin.js をスキャンし、次を検出します。

  • データ持ち出しパターン
  • 設定経由のクレデンシャル収集
  • 難読化コード
  • リソース悪用(暗号採掘など)
  • 不審なネットワーク活動

監査は passwarnfail の判定を出し、プラグインのマーケットプレイス掲載に表示されます。マーケットプレイスの enforcement レベルにより、fail は公開そのものをブロックする場合があります。

オプション

emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
フラグデフォルト説明
--tarballdist/ 内の最新 .tar.gztarball の明示パス
--buildfalse公開前に emdash plugin bundle を実行
--dirカレントディレクトリプラグインディレクトリ(--build と併用)
--registryhttps://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