483文字
2分
編集

EmDash v0.1プレビュー、Cloudflare製WordPress互換CMS

WordPressの機能互換を志向しつつコアをTypeScriptで組み直したフルスタックのサーバーレスJavaScript CMSとしてEmDashが位置づけられている。各プラグインをDynamic Workerのisolateで動かし、manifestに書いたcapabilitiesとbindingsだけを通じてサイト機能に触れる設計のため、同一プロセスにフックするPHPプラグイン型と比べて、インストール前に権限セットを検討しやすい。基盤はAstro 6.0、ライセンスはMITのGitHub公開で、v0.1.0プレビューではCloudflareアカウントへのデプロイと任意のNode.jsホストでの実行の双方が案内されている。

#主な機能・特徴

  • プラグインはhooksとread:contentemail:sendなど明示したcapabilitiesだけを利用可能で、必要ならホスト名単位の外向き通信も宣言に含められる想定。
  • テーマはAstroプロジェクト(pages・layouts・components・スタイル・seed JSON)として提供し、テーマ側からDB操作は行わない。
  • コンテンツへのアクセスにHTTP 402と支払いフローを使うx402の組み込み対応。
  • インスタンスごとのAgent Skills・EmDash CLI・リモートMCPサーバーで、管理UIと同等の操作をエージェントから実行可能。
  • 既定のPasskeys認証に加え、SSO連携などプラグ可能な認証。
  • WordPress管理画面からのWXRエクスポート、またはEmDash Exporter経由でのコンテンツ・メディア取り込み。

通知プラグインの一例では、content:afterSaveで投稿の公開を見てからctx.emailを呼び出し、そのためにread:contentemail:sendをcapabilitiesとして宣言している。

ts
import { definePlugin } from "emdash";

export default () =>
  definePlugin({
    id: "notify-on-publish",
    version: "1.0.0",
    capabilities: ["read:content", "email:send"],
    hooks: {
      "content:afterSave": async (event, ctx) => {
        if (event.collection !== "posts" || event.content.status !== "published")
          return;
        await ctx.email!.send({
          to: "editors@example.com",
          subject: `New post published: ${event.content.title}`,
          text: `"${event.content.title}" is now live.`,
        });
        ctx.log.info(`Notified editors about ${event.content.id}`);
      },
    },
  });

ローカル新規はnpm create emdash@latestEmDash Playgroundで管理UIを試せる案内。v0.1.0プレビューは早期開発者向けベータ。WordPressのコードは使わずMITで配布しつつ、機能面の互換を追う前提の説明。

#参考文献