ブログ一覧

EmDash を本番で半年使った料金と WordPress 移行

Cloudflare が 4 月に出した EmDash(Astro 製のオープンソースの CMS)が、9 月末に 1.x の最初の版になりました。私は WordPress のサイトをいくつも運用していて、v0.1 だった 4 月に EmDash に移すと決めたので、半年たった答え合わせとして、本番で実際いくらかかって WordPress から何が移せたのかを確かめました。

いまは 9 サイトを Cloudflare の 1 つのアカウントで動かしていて、そのうち 6 サイトは shinobiworks.com を含めて WordPress から移した物です。

結論から言うと、9 サイトはいまも無料プランで動いています。お客さんのサイトは管理画面の保存が CPU の上限を超えるので有料プランを前提にします。まだ切り替えていませんが、それでも 1 アカウント月 5 ドルで、レンタルサーバーの月額より安く収まる想定です。

9 サイトは無料プランで動き、お客さんのサイトは月 5 ドルの有料プランにする

EmDash は Cloudflare のサーバーレスの実行環境である Cloudflare Workers で動かすのが標準です。私の 9 サイトはいまも Workers の無料プランで動いていて、公開ページは Cloudflare が応答を手前で返すエッジキャッシュから返るので、描画の回数は少なく済んでいます。

無料プランの弱点は、1回の起動で使える CPU 時間が 10ms までであることです。無料プランで管理画面の保存と同じ API を 22回呼んだところ、22回のうち 1回が打ち切られ、成功した 21回もすべて 10ms を超えていました(中央値 31ms)。

打ち切られると下書きだけが書かれて公開されず、トップページが途中で切れた HTML のままキャッシュに残って無料プランの CPU 上限で EmDash が真っ白になったこともあります。自分のサイトなら保存を送り直せば済むので、私は無料のままにしています。

「保存したのに反映されない」はお客さんにとって困るので、新しく作るお客さんのサイトは最初から Workers の有料プランで見積もると決めています。

Workers の有料プランは 1 アカウント月 5 ドルからで、CPU の上限は既定で 30秒、月 1,000 万リクエストまでが込みです。料金はアカウント単位で、同じアカウントに載せたサイトすべてに効きます。エックスサーバーの料金と並べると次のとおりで(どちらも 2026 年 10 月時点)、どちらも 1 契約で複数のサイトを置けます。

  • Workers の有料プラン: 1 アカウント月 5 ドルから
  • エックスサーバーのスタンダードプラン: 12か月契約の通常価格で月 1,100円

WordPress からは記事と画像が移り、直すのは URL とリンク

EmDash には WordPress の書き出したファイル(WXR)を読み込む機能があり、記事・固定ページ・画像・カテゴリ・タグはこれで取り込めました。6 サイトはすべてこの方法で移しています。テーマとプラグインは PHP なので TypeScript の EmDash では動かず、フォームやメール送信の部品は自作しましたが、欲しい機能は AI で作れるので、私は大きな不利だと思っていません(WordPress から EmDash に移る価値があるかに書きました)。

手間がかかったのは URL と記事間のリンクとサイトマップの直しです。日本語のスラッグは URL エンコードされた形のまま入るので、英語のスラッグに付け直して旧 URL から 301 リダイレクトを張りましたが、日本語 URL のリダイレクトだけが効かなかった原因は percent-encoding の大文字と小文字の違いでした。

取り込みは画像の URL を書き換えますが、本文中の記事どうしのリンクは 0.28 の時点で書き換えませんでした。本文が WordPress の旧い画像の URL を指したままで記事内の画像が 404 になる問題も出ています。取り込みで作られたコレクション(WordPress のカスタム投稿タイプなど)はエラーを出さずにサイトマップから落ちるので、私は移行のたびにサイトマップを突き合わせています。

本番では使えていて、壊れる更新は本番に出る前に止まる

EmDash の 1.0 は 0.x で非推奨だった API を消した版で、以後の破壊的変更はメジャーバージョンだけになります。1.0 をはさむ 0.34 から 1.1 までの約 6 週間には 12 の版が出ていて、私は 0.7 から何度かに分けて 1.2 まで上げてきました。

WordPress の更新は、動いている本番のサイトにそのまま当たります。6.6 からはプラグインの自動更新のあとにサイトを読み込んで、致命的なエラーが出たら元に戻す仕組みが入りましたが、確かめるのは本番を更新したあとで、致命的なエラーにならない壊れ方は残ります。

EmDash の更新は依存パッケージのバージョンを上げてビルドし直すコードの変更なので、壊れる変更があればビルドの段階で止まり、本番には出ません。1.0 ではコメント欄を出す部品が本体から消えましたが、それを使っていた 2 サイトはビルドが落ちて気付けたので、本番は古いバージョンのまま動き続け、直してから上げられました。手間はかかりますが、壊れたまま本番が更新されることが無い分、私は EmDash の方が堅いと考えています。

上げて良くなった物もあります。EmDash の記事が入る Cloudflare のデータベース D1 は、無料プランだと読み取る行数が 1日 500万行までで、私のサイトでは一時 D1 の読み取りが 1日 2,100 万行になったこともありました。タグの一覧ページが 1回で読む行数は、上げる前の平均 4,001行から、記事の一番多いタグでも 1,056行に減っています。

半年動かして、本番で使えるかへの私の答えは「使えている」です。自分のサイトは無料プランで回せていて、お客さんのサイトはまだ有料プランにしていませんが、有料プランを前提にしても 1 アカウント月 5 ドルで済む想定です。

この記事をシェア