前回、WordPressの"精神的後継者(the spiritual successor to WordPress)"を謳う、新CMS「EmDash」の概要を紹介しました。
今回は実際にEmDashでサイトを構築してみた記録です。
■ Podmanで完全隔離
サプライチェーン攻撃が気になるのでnode.jsは隔離します。
node.jsもpnpmもホストマシンには一切入れていません。
全てpodmanコンテナの中に閉じ込めました。
サプライチェーン攻撃対策として、.npmrcでignore-scripts=trueを設定し、
明示的に許可したパッケージだけネイティブビルドを許可しています。
コンテナ自体もrootless、read-only、cap-drop=ALLで動かしています。
nix flakeのdevshellが提供するのはpodmanコマンドだけ。
emdash-start、emdash-buildといったコマンドをflakeで定義してあるので、emdash-startとするだけでEmDashが起動します。
ちなみに構築は全てClaude Codeに任せました。
設定ファイルの作成、コンテナ構成、デプロイ設定など、何から何まで全てAIが書いています。
■ 管理画面
EmDashにはGUIの管理画面がついてきます。
/_emdash/adminにアクセスするだけ。
認証はPasskey(WebAuthn)がデフォルトでパスワードレスです。
Passkeyの他、OAuthやマジックリンクも使えます。
最初からPasskeyで始まるのはいかにもモダンなCMSという感じ。
コレクション(記事やプロジェクト)の作成・編集、メディアライブラリ、メニュー管理、タクソノミー などWordPressでできることは大体できます。
■ テンプレートが5種類
リリースされたばかりなのにテンプレートが5種類あります。
・Blog — カテゴリ、タグ、検索、RSS、コメント、ダークモード
・Marketing — ヒーローセクション、料金表、FAQ、問い合わせフォーム
・Portfolio — プロジェクトグリッド、タグフィルタ、ケーススタディ
・Starter — 上記の機能全部入り
・Blank — 最小限の骨格
各テンプレートにCloudflare版があります。今回はPortfolioをベースに、Blogセクションを追加した構成にしました。
今回は動作確認のみなので変更したのはサイトタイトル、タグラインくらいで他は全てテンプレートのままです。
■ プラグインシステム
WordPressのプラグインは全権限でDBやファイルシステムにアクセスできます。
EmDashのプラグインはCloudflare WorkerのDynamic Worker Loaderを使ったサンドボックスで動きます。
各プラグインにはcapability manifest(権限宣言)があり、例えばread:contentとemail:sendだけ許可されたプラグインはコンテンツの読み取りとメール送信しかできません。CPU時間やネットワークアクセスにも制限がかかります。
ただしサンドボックスにはDynamic Workersが必要で、Cloudflareの有料プラン($5/月〜)が必要です。無料枠ではtrustedモード(サイト本体と同じプロセスで動く)になります。自分で書いたプラグインや信頼できるものなら問題ありませんが、権限の強制はされません。有料プランに移行すれば、設定の切り替えでサンドボックスが有効になります。
■ Cloudflare無料枠で運用可能
本番環境はCloudflareの無料枠内で動きます。
・D1(データベース): 5GB、500万行リード/日
・R2(メディアストレージ): 10GB、1000万リード/月
・Workers(ランタイム): 10万リクエスト/日
アクセス数がそれほど多くないサイトなら十分でしょう。
WordPressのレンタルサーバー代や保守料が丸ごと不要になります。
■ REST APIとMCP Server
EmDashにはREST APIが組み込まれています。
/_emdash/api/以下に記事のCRUD、メディア管理、スキーマ操作、タクソノミー、メニュー、全文検索、サイト設定といったエンドポイントが揃っています。Bearer tokenで認証して外部から操作できます。
管理画面を開かなくても、CLIやスクリプトからコンテンツを投稿・編集できるということです。
さらにMCP Serverも内蔵しているので、Claude CodeやCodexなどのAIツールから直接サイトのコンテンツを操作できます。
WordPressにもREST APIはありますが、MCPは後付けのプラグインが必要です。
EmDashは最初からAIとの連携を前提に設計されています。
■ 気になった点
まだベータ版(v0.1.0)なので課題もあります。
・日本語タイトルのページが404になる場合がある
・管理画面の一部にまだバグがある
・CJK(日中韓)コンテンツの読了時間表示が正しくない
・手動公開がうまくいかないケースがある
日本語の情報もほぼありません。
■ まとめ
EmDashはベータですが完成度は高いです。
管理画面はWordPress並み、セキュリティはそれ以上。
更新頻度低めで、それほど多くの機能を求めないのであればEmDashで十分かも知れません。
WordPressからのインポート機能もあるので、既存サイトの移行も簡単にできそうです。
今回はローカル環境での動作確認のみでしたが、次回は実際にCloudflareにデプロイしてみたいと思います。