
CloudflareがAstroベースのオープンソースCMS「EmDash」を公開したので早速Workersにデプロイしてみた
ベルリンのしがひです。
Cloudflareが先日Astroを買収したのは記憶に新しいですが、早速その成果物が出てきました。AstroをベースにしたServerless/HeadlessなオープンソースCMS「EmDash」がリリースされたので、早速Cloudflare Workersにデプロイして触ってみました。
EmDashとは
EmDashは、Cloudflareが「WordPressの精神的後継」と位置づけるフルスタックのサーバーレスCMSです。TypeScriptで書かれており、MITライセンスで公開されています。現在v0.1.0のベータ版です。
特徴をざっくりまとめると、テーマやフロントエンドはAstroそのまま、管理画面はWordPressそっくり、インフラはCloudflare Workers + D1 + R2というサーバーレス構成。プラグインはV8 isolateで隔離実行されるので、WordPressで問題になりがちなプラグイン経由のセキュリティリスクが構造的に排除されています。認証もデフォルトでPasskeyベースです。
Cloudflareダッシュボードからデプロイ
Cloudflareダッシュボードの「Workers & Pages」から、EmDashのテンプレートを選択してデプロイできます。設定項目はGitアカウント連携、プロジェクト名、D1データベース、R2バケットあたり。

プロジェクト名を my-emdash-site にして、D1データベースとR2バケットを新規作成します。R2のロケーションはWestern Europe (WEUR)を選択。ビルドコマンドは npm run build、デプロイコマンドは npm run deploy がデフォルトで入っています。

「Create and deploy」をクリックすると、GitHubにプライベートリポジトリが作成され、ビルド・デプロイが自動で走ります。ここまで4分です。特段つまずくところはありませんでした。
初期セットアップ
デプロイが完了すると my-emdash-site.classmethodeurope.workers.dev でサイトにアクセスできるようになります。初回アクセスでセットアップウィザードが表示されます。

Site TitleとTaglineを入力して、アカウント作成、Passkeyの登録と進みます。ステップは3つだけ。

サインインはPasskeyの他にGitHub、Google、メールリンクにも対応しています。Passkey認証がデフォルトというのは今どきで良いですね。
管理画面はWordPressそのまま
ログインすると表示されるダッシュボードがこちら。

左サイドバーにPages、Posts、Media、Comments、Menus、Redirects、Widgets、Sections、Categories、Tags、Bylines...。WordPressを使ったことがある人なら、説明不要で操作できるレベル(いんすぱいや)です。Content TypesやUsersといった管理メニューもあります。
ページ編集
Pagesから新しいページを作ってみます。リッチテキストエディタが搭載されていて、太字、イタリック、見出し、リスト、引用、画像挿入などWordPressのブロックエディタほど複雑ではないですが、基本的な編集機能は揃っています。

画像をアップロードしてページを公開すると、すぐにサイトに反映されます。

my-emdash-site.classmethodeurope.workers.dev/pages/brocken-jr でちゃんとページが表示されました。スラグも自動生成されています。
Marketplace(プラグイン)
管理画面にはMarketplaceメニューがあり、プラグインをインストールできます。

現時点では webhook-notifier、audit-log、atproto(Bluesky連携)など数点のプラグインが公開されています。v0.1.0のベータなので数は少ないですが、プラグインの仕組み自体はしっかりしています。EmDashのプラグインはV8 isolateで隔離実行され、必要な権限をマニフェストで明示的に宣言する仕組みです。WordPressのようにプラグインがDBに直接アクセスできてしまう問題が構造的に解消されています。
Content Types
Content Typesでは、ページやポストのスキーマを管理できます。

システムフィールド(ID、Slug、Status、Created At、Updated At、Published At)に加えて、カスタムフィールド(Title、Content)が定義されています。WordPressのカスタムフィールドに相当する機能ですが、UIで見通しよく管理できるのが好印象です。
GitHubリポジトリの中身はほぼAstro
デプロイ時に自動作成されたGitHubリポジトリのソースを見てみると、これがほぼAstroそのままです。

src/ 配下に components/、layouts/、pages/ というAstroの標準的なディレクトリ構成。ページテンプレートの [slug].astro を見ると、getEmDashEntry でCMSからコンテンツを取得して、PortableText でレンダリングしています。Astroを触ったことがある人なら、テーマのカスタマイズは何も新しいことを覚えなくてよいでしょう。
つまりEmDashは、AstroプロジェクトにWordPress的な管理画面とCMSレイヤーをラップした製品、という理解が一番しっくりきます。
所感
実際にデプロイから記事公開まで触ってみた感想です。
セットアップの手軽さは素晴らしいです。Cloudflareダッシュボードから数クリックでデプロイ完了、初期セットアップも3ステップ。WordPressをVPSにインストールしていた時代を思うと隔世の感があります。管理画面のUIもWordPressユーザーなら迷うことはないでしょう。
一方で、Markdown/JSONレンダリングのAstroとReact→API→D1サイト両方の経験がある私からすると、コンテンツやエレメントの量が多い大規模サイトには現時点では厳しそうです。D1(SQLite)ベースなので、ある程度ページ、ポストに重みがある数千ページ規模のサイトでのパフォーマンスは相応のチューニング(KVによるマルチレイヤーキャッシングなど)が求められます。
ただ、それほど管理するページ数がないコーポレートサイトやランディングページ、ポートフォリオサイトなど、いわゆる「いまなんとなくWordPress作っちゃったサイトのリプレイス(脆弱性を見て見ぬふりしている)」という用途にはゲームチェンジャーになりそうです。サーバー管理不要、スケール・トゥ・ゼロで使った分だけ課金、セキュリティも構造的に堅い。
テーマやプラグインがAstroベースで作れるというのも大きなポイントです。Astroのエコシステムがそのまま流用できるので、コミュニティの立ち上がりは早いのではないかと思います。
WordPressのリプレイス候補として、今後の発展が楽しみなプロジェクトです。






