Cloudflareが公開したCMS、EmDashがアツい。
WordPressの機能や見た目を踏襲しつつセキュリティ、パフォーマンスに重きを置き、なおかつサーバーレス環境で動作する良いとこ取りのようなCMS。
今回はドキュメントと管理画面をさらっと見ていきたいと思います。
公式発表を見て
まずは公式を読むのが良いです。興味深いのはこの1文。
EmDash is designed to be managed programmatically by your AI agents
(EmDashは、AIエージェントによるプログラム的な管理を想定して設計されています)
プラグインやテーマは自分で作る時代ではないということか。後ほどコードも追っていこうと思います。
実行環境はCloudflareだけでなくサーバーを用意してホスティングもできると記載されています。ですが、EmDashはAstroのSSRで動作する(つまりNodeJSのプロセスが常駐する)のでレンタルサーバーでは使えないんじゃないか?というのがWordPressと違うところです。
例えば、さくらインターネットではこういう注意書きがあります。
- daemonとしてサーバーに常駐するプログラムの実行
発見した場合、予告無くプロセスを強制終了する場合があります。
では実際に管理画面を触っていきます。
管理画面レビュー
ローカル環境で動かしてます。セットアップ〜ログインは既に多くの方が投稿しているので割愛。
ログイン後のダッシュボード画面。

サイドバーは大分類CONTENT、MANAGE、ADMIN、PLUGINSの4つあります。
CONTENT
CONTENTはその名の通りユーザーが投稿・管理したいコンテンツ情報を扱うようです。自分でテキストや日付、ドロップダウンなどのスキーマを定義してカスタム投稿を作って運用することが可能。
CategoriesやTagsはMANAGEに分類されてることに違和感を覚える人もいるかもしれません。ヘッドレスCMSに慣れているとコレクション形式で自前定義するからですね。EmDashでは標準でカテゴリーとタグが機能として備わっていて、それぞれのカスタム投稿(Content Types)に紐づけることが出来るのでMANAGEのセクションに分類されているようです。
新しくカスタム投稿を作ってからTaxonomyを作成してタグやカテゴリーを紐づける流れになると予想しているのですが、どうもまだ管理画面でTaxonomyを新規追加しても表示/変更が出来ないようです。関連PRがあったので近々改善されそう。
Mediaは画像や、音声、動画などをアップロードするシンプルな一覧画面。画像のリサイズなんかは今後プラグインで出てくるに違いない。
MANAGE
MANAGEは投稿やフロントの画面部分の管理機能。
CommentsはCONTENTにある投稿の種類毎にコメント機能を有効にできる。上記キャプチャでいうとPostsにコメント機能を設置し、Pagesにはコメント機能を設けないということができる。しかし、Postsの特定の記事だけコメントを無効にするということは標準ではできない模様。
コメントの投稿は管理者の承認を必須にもできる。設定パターンは下記3つ。
・常に承認が必要
・常に即時公開
・最初の1回だけ承認が必要(承認されたら2回目以降は即公開)
Menusではフロントに設けたいメニューを自由に定義することができますが、当然フロント側でメニューを読み込む処理が必要になります。この辺もWordPressと同じ。
Redirectsでは特定のパスにアクセスされた時に別のパスにリダイレクトすることができます。ステータスコードがデフォルトで301(恒久的な移転)なのがちょっと気になりますね。誤った設定を適用すると管理画面で後から変更してもユーザーが一度リダイレクトを通っているとブラウザ側でキャッシュしてしまい変更されず、トラブルになりがち。

Widgets、Categories、Tagsは特筆することがないので省略。ほぼWordPressと同等でした。
Sectionsの便利さがいまいち分かりませんでした。これはブロックエディター形式であらかじめコンテンツを作成しておき、他のCONTENTの投稿から/コマンドで参照できるという機能のようです。
公式ドキュメントの説明によればCTAやお客様の声などの投稿をまたがって表示したい時に活用、とあります。しかし、後からセクションの内容を変更しても投稿の方の文章は変わらないので、変更する場合は一個ずつ直していくしかないと思います。
BylinesはCONTENTの投稿に対して執筆者の情報を紐づけることができます。これはEmDashを実際の運用者とユーザーに見せたい執筆者を分ける場合に有効です。
ちょっと分かりにくいので別のケースを挙げると、Strapiでは管理画面にログインしたユーザーのidがcreatedBy、updatedByに自動的に付与されるので、管理画面で操作した人と投稿者はイコールになります。
EmDashではBylinesから執筆者をあらかじめ作成しておき、投稿する際に明示的に投稿者(執筆者)を設定できます。つまり、実際には運用している人が1人でもエンドユーザーから見ると複数人いるように見せることができます。
ADMIN
続いて管理機能。
Content TypesはまさにWordPressのカスタム投稿。
登録できるフィールド(型)はごく一般的なCMSにあるものなので省略。
投稿の設定(オプション)にはDrafts、Revisions、Preview、Search、SEOの5つ。
→このうち、DraftsとPreviewが正しく動かず検証できませんでした。
Revisionsは有効にすると投稿を保存する度に履歴が増えていきます。
Searchはフロント側から検索を許可するかどうかを設定できます。加えて、フィールド毎に検索対象とするか設定できるので、タイトルや本文以外にも独自のフィールドを設けて検索にヒットさせることができます。

↑のSearchableにチェック。
SEOを有効にすると、投稿画面の右側にSEO関連のフィールドが表示されます。

加えてサイトマップ(/sitemap.xml)にSEOを有効にした投稿が含まれるようになります。
Usersでは管理画面のユーザーをロールをつけて追加できる・・はずなんですが、バグっていて正しく動作しませんでした。関連Issueはこちら。
招待URLのパスが間違っていたり、正しいパスにアクセスしても生のJSONが出るだけで登録できず。ここはちょっと酷い。
ロール毎の操作は気になるところなので、詳細は省きますが強引にアクセスしてそれぞれの制御を確認してまとめました。
|
権限 |
表示される画面 |
できること |
|
Author |
CONTENT |
記事作成および自分の記事の変更、公開、非公開、削除 |
|
Editor |
CONTENTとMANAGE |
CONTENTとMANAGEの全ての操作 |
|
Contributor |
CONTENT |
記事の初回作成のみ。変更や削除できない |
|
Subscriber |
CONTENT |
全てのコンテンツの表示。変更を伴う操作は一切できない |
|
Admin |
全て |
全て |
権限が足りずエラーメッセージが無限に出たり、操作によっては何も出なかったりすることがありました。
PluginsとImportはスキップ。
Settingsも概ね画面通りという感じ。ただ、Generalの日付のフォーマットをYYYY/MM/DDとかに変更しても見た目変わらなかったのは画面側がフォーマットをみていないようでした。同様にfaviconも反映されなかったのでフロント側のテンプレートを色々いじらないといけなそうです。
Settings -> Social Linksの項目はログインユーザー毎ではなくCMS内で共通です。コーポーレートサイトで企業アカウントを設定するものであって、投稿者の個人アカウントをうっかり設定しないように注意。
まとめ
リリース間もないとはいえ基本的な操作のバグが多いんですが、エディターが使いやすいのが良いです。
あとはCloudflareで運用した時のWorkersの使用量がどんなものか気になりますね。
今回はひとまず管理画面に絞って紹介していきました。次に開発者向けにコードやプラグインなどを見ていこうと思います。