4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WordPress後継候補のEmDashを試してみた

4
Posted at

はじめに

こんにちは、@tmaru-engです。

個人利用していたほぼ休眠状態ながら、閉鎖しづらいWordPressサイトがあります。
一昨年くらいに「LambdaとSQLiteでの実現」や「静的サイトとして維持」などと検討したことがあったんですが、そのときは結局断念した経緯があります。

先日、CloudflareからEmDashというCMS機能のプラグインをリリースされました。
「WordPressの精神的後継者」というキャッチコピーで、あのとき自分が考えていた方向に近いものが出てきたなという気がしたため試してみました。

結論としては、ローカルでPoCを作るところから始めコンテンツのインポート自体は問題なくできました。
きちんと内容を読まずに細かなセットアップ部分は生成AI先生に頼った結果、途中で「インポートしたはずなのにサイトが空に見える」というハマりどころがあって、原因がわかるまでちょっと焦りました。

ちなみに操作感などを触ってみるだけであれば公開されているデモサイトで触ることができます。

EmDash ってどんなもの?

TypeScript + AstroベースのフルスタックCMSで、DBはローカルならSQLite、本番はCloudflare D1か PostgreSQLが選べるようです。
プラグインはサンドボックス内で動くのでWordPressのような「プラグイン起因の脆弱性」が起きにくい設計になっていて、MCP サーバーも内蔵されているようです。

やりたかったこと

今回の目的は次の3点でした。

  • WordPress の記事や固定ページを EmDash に取り込めるか
  • 取り込んだコンテンツが実際に表示できるか
  • 本番公開まで持っていけそうかを見極めること(ローカルで感触をつかむ)

最初から本番構築に行くのではなく、まずはローカルで確認してから判断する方針にしました。

環境構築

まず emdash-cms/emdash をローカルに取得し、README と移行ドキュメントを読みました。

検証には templates/blank を使いました。余計なダミーデータが少なく、「移行データが入ったかどうか」を見分けやすいからです。

# 依存関係インストール
pnpm install

# monorepo ビルド
pnpm build

# blank テンプレートを初期化(SQLite DB 作成)
cd templates/blank
pnpm dev

http://localhost:4321/_emdash/admin で管理画面が起動します。初回は3ステップのセットアップウィザードが走ります。

step 1:サイト情報の設定
image.png

step 2:アカウント作成

image.png

step 3:パスキー設定(パスワードレスで認証する)

セットアップが完了するとサインイン画面になり、パスキーのほか GitHub / Google でもログインできます。デフォルトでパスキーに対応しているのは使い勝手が良さそうでした。

image.png

image.png

image.png

アカウント作成完了。ロール「管理者」が付与された状態

ログイン後のダッシュボードはこんな感じで、インポート前なのでコンテンツはまだ空の状態です。

image.png

WordPress 側の準備とインポート方法

WordPress からの移行方法は主に2つありました。

  • WXR(.xml)エクスポートを使う方法
  • WordPress 側に EmDash Exporter プラグイン(emdash-cms/wp-emdash)を入れて API 経由で取り込む方法

Exporter プラグインを使うと、下書きや非公開投稿などなど取り込み対象が増えるようだったため今回はこちらのExporterを使う方法で進めました。ただ、プラグインのインストールも少しだけ手間取りました。

ちなみに、WXRエクスポートの場合は、WordPress 側は管理画面の ツール → エクスポート から .xml を取得するだけでデータの取得ができました。

インポートしてみた

EmDash の管理画面から Settings → Import → WordPress を開くとこのような画面になります。WXR ファイルをアップロードするか、WordPress サイトの URL を直接入力する方法が選べます。

image.png

今回は Exporter プラグインを WordPress側に入れて、URL 入力で直接接続する方法で進めました。
プラグインのインストールは zipを直接アップロードする形だったのですが、入手可能なzip をそのままアップロードしても「有効なプラグインが見つかりません」エラーになるため、zipを展開してから正しいディレクトリzipにしてアップロードが正解でした。

image.png

URL 接続が成功すると、Exporter が検出されてコンテンツ数のプレビューが出ます。

image.png

インポートのレビュー画面では、著者マッピングや取り込むコンテンツの選択ができます。
ローカル環境なので OAuth は「HTTPS 必須」エラーが出ましたが、そのまま進んでもインポート自体は可能でした。

image.png

image.png

著者のマッピング機能としてWordPressの著者を EmDash のユーザーに対応付けることができます。

image.png

メディアのインポートも同じフローで進みます。

image.png

インポートが完了するとこのような結果画面になりました。

image.png

image.png

ダッシュボードにも投稿が反映されています。

image.png

ハマったポイント

インポートは完了したものの、ここで問題が起きました。

管理画面からは記事が見えているのですが、公開サイトを開くと何も表示されない。最初はなんらかの原因で「移行に失敗したか」と思いましたが、原因は別のところにありました。

使っていた blankテンプレートには、公開側のページ実装がなかったことが原因でした。

blank は本当に最小構成で、トップページが出るだけ。CMS としては動いていてデータも入っているのに、公開フロントにpostspagesを表示するルートがそもそもない、という状態でした。

移行失敗ではなく、確認に使ったテンプレートが表示用ではなかったために発生したようです。

解決:templates/blog に切り替えて表示確認

表示確認のため、今度は templates/blog に同じデータベースを載せて起動しました。

blog テンプレートには最初から次の公開ルートがあります。

  • /posts
  • /posts/[slug]
  • /pages/[slug]
  • /category/[slug]
  • /tag/[slug]

これで改めて確認すると、投稿一覧も記事詳細も正常に表示されました。

おわりに

今回のローカル検証で分かったのは、WordPressからEmDashへのインポート自体は、かなり現実的そうだと感じました。
また、Exporter経由で手軽に取り込めることが確認できました。

ただ、移行時にはまったことからわかるようにWordPressのテンプレートなどはそのまま利用することができなそうだったため、EmDash用に再度作成する必要はありそうでした。

今回はローカルで感触をつかんだところで止まっています。
移行の検討をしたのですが、EmDashはCloudflareの有料プランにする必要があるようで、現在のレンタルサーバの価格と大差ないもしくは移行後の方が少しだけ高くなりそうだったため一旦は見送ることになりました。
同じような構成で無料で使えるプラットフォームの互換性などがあればコスト的にも勝てそうな気がします。

機能としては非常に面白く使いやすいものだと感じたので、もし実際に移行された方や、もっと深くEmDashを試してみた方がいれば、コメントなどで教えていただけますと幸いです。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?