コンテンツにスキップ

プラグインの公開

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

公開前に、以下の点を確認してください:

  • プラグインのエントリーポイントを指す有効な package.json が存在し、"." エクスポートが設定されていること
  • definePlugin() を使用しており、一意の id と有効な semver version が設定されていること
  • 必要なAPIへのアクセス権を定義する capabilities が宣言されていること

公開されるプラグインは、以下の内容を含む .tar.gz 形式のtarballとして配布されます:

ファイル必須説明
manifest.jsonはいdefinePlugin() から抽出されたプラグインメタデータ
backend.jsいいえバンドルされたサンドボックスコード(自己完結型ESモジュール)
admin.jsいいえバンドルされた管理UIコード
README.mdいいえプラグインのドキュメント
icon.pngいいえプラグインアイコン(256x256 PNG)
screenshots/いいえ最大5枚のスクリーンショット(PNG/JPEG、最大1920x1080)

manifest.json は definePlugin() の呼び出しから自動的に生成されます。これにはプラグインID、バージョン、機能、フック名、ルート名、管理設定が含まれますが、実行可能なコードは含まれません。

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

Terminal window
cd packages/plugins/my-plugin
emdash plugin bundle

このコマンドは以下の処理を行います:

  1. package.json を読み取り、エントリーポイントを特定します
  2. メインエントリーポイントを tsdown でビルドし、マニフェストを抽出します
  3. backend.js をバンドルします(最小化、ツリーシェイク、自己完結型)
  4. "./admin" エクスポートが存在する場合、admin.js をバンドルします
  5. アセット(README、アイコン、スクリーンショット)を収集します
  6. バンドルを検証します(サイズ制限、backendにNode.js組み込みモジュールがないか)
  7. {id}-{version}.tar.gz を dist/ ディレクトリに書き出します

バンドルコマンドは package.json のエクスポートを通じてコードを探します:

json title="package.json"
{
"exports": {
".": { "import": "./dist/index.mjs" },
"./sandbox": { "import": "./dist/sandbox-entry.mjs" },
"./admin": { "import": "./dist/admin.mjs" }
}
}
エクスポート目的ビルド方法
"."メインエントリーポイント — マニフェストの抽出に使用外部依存: emdash, @emdash-cms/*
"./sandbox"サンドボックスで実行されるバックエンドコード完全に自己完結型(外部依存なし)
"./admin"管理UIコンポーネント完全に自己完結型

"./sandbox" が存在しない場合、コマンドはフォールバックとして src/sandbox-entry.ts を探します。

Terminal window
emdash plugin bundle [--dir <path>] [--outDir <path>]
フラグデフォルト説明
--dirカレントディレクトリプラグインソースディレクトリ
--outDir, -odisttarballの出力ディレクトリ

バンドルコマンドは以下の点をチェックします:

  • サイズ制限 — バンドル全体が5MB未満であること
  • Node.js組み込みモジュールの禁止 — backend.js は fs、path、child_process などをインポートしてはいけません(サンドボックスコードはNode.jsではなくV8 isolateで実行されます)
  • アイコン寸法 — icon.png は256x256であるべきです(異なる場合は警告を出しますが、含めます)
  • スクリーンショット制限 — 最大5枚、最大1920x1080

emdash plugin publish コマンドは、tarballをマーケットプレイスにアップロードします:

Terminal window
emdash plugin publish

このコマンドは dist/ ディレクトリ内の最新の .tar.gz ファイルを見つけてアップロードします。tarballを明示的に指定したり、公開前にビルドしたりすることもできます:

Terminal window
# Explicit tarball path
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz
# まずビルドし、その後公開
emdash plugin publish --build

初めて公開する際、CLIはGitHubを通じて認証を行います:

  1. CLIがブラウザを開き、GitHubのデバイス認証ページに移動します
  2. ターミナルに表示されたコードを入力します
  3. GitHubがアクセストークンを発行します
  4. CLIはそれをマーケットプレイスのJWTと交換します(~/.config/emdash/auth.json に保存されます)

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

認証は個別に管理することもできます:

Terminal window
# Log in without publishing
emdash plugin login
# ログアウト(保存されたトークンをクリア)
emdash plugin logout

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

公開される各バージョンは、前のバージョンよりも高いsemverである必要があります。既存のバージョンを上書きしたり再公開したりすることはできません。

公開されるすべてのバージョンは、自動化されたセキュリティ監査を受けます。マーケットプレイスは backend.js と admin.js をスキャンし、以下をチェックします:

  • データ流出パターン
  • 設定を通じた認証情報の収集
  • 難読化されたコード
  • リソースの悪用(暗号通貨マイニングなど)
  • 不審なネットワーク活動

監査は 合格、警告、不合格 の判定を生成し、これはプラグインのマーケットプレイスリストに表示されます。マーケットプレイスの施行レベルに応じて、不合格 判定は公開を完全にブロックする場合があります。

Terminal window
emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
フラグデフォルト説明
--tarballdist/ 内の最新の .tar.gz明示的なtarballパス
--buildfalse公開前に emdash plugin bundle を実行
--dirカレントディレクトリプラグインディレクトリ(--build と併用)
--registryhttps://marketplace.emdashcms.comマーケットプレイスURL

典型的な公開サイクルは以下の通りです:

Terminal window
# 1. Make your changes
# 2. Bump the version in definePlugin() and package.json
# 3. Bundle and publish in one step
emdash plugin publish --build

または、バンドルを先に確認したい場合は:

Terminal window
# Build the tarball
emdash plugin bundle
# 出力を確認
tar tzf dist/my-plugin-1.1.0.tar.gz
# 公開
emdash plugin publish