記事一覧

EmDash を Cloudflare Workers に公開するまで(1.3.1 の実録)

このサイトを Cloudflare Workers に公開したときの手順と、つまずきかけた所の記録です。無料プランで足りるのか、初期設定で気をつけること、暗号化キーの扱いまで、実測の数字つきでまとめました。

このサイトは、EmDash 1.3.1 の blog テンプレートを Cloudflare Workers に公開して動かしています。この記事は、2026年10月21日に公開したときの手順と、つまずきかけた所の記録です。使った wrangler(Cloudflare のコマンド)は 4.151.3 です。

先に結論をまとめます。

  • 公開のコマンドは1つ:wrangler deploy を実行すると、データベース(D1)・画像の保存場所(R2)・セッション用の KV が自動で作られ、そのまま公開されました
  • 無料プランでは足りない:実測すると、表示1回あたりの処理時間が無料プランの上限(10ms)をほとんどのページで超えていました。Workers の有料プラン(月5ドル〜)にしました
  • 公開したら、すぐ初期設定:最初に初期設定を終えた人が管理者になります
  • 暗号化キーは別に保管:本番用の秘密の値として設定し、控えをデータとは別の場所に置きます

1. 公開前に、資源の名前を確認する

Cloudflare 用のテンプレートでは、設定ファイル wrangler.jsonc に、Cloudflare 上に作られる資源の名前が書かれています。初期値はデータベースが「my-emdash-site」、保存場所が「my-emdash-media」でした。

Edel Hearts の Cloudflare アカウントには、4月に EmDash を試したときの同じ名前のデータベースと保存場所が残っていました。そのまま公開すると、古いものに接続してしまうところでした。公開する前に、サイトごとの名前に変えておくと安心です。このサイトでは、Worker とデータベースを「emdash-guide」、保存場所を「emdash-guide-media」にしました。

2. 送信しない試行(dry-run)で中身を確かめる

いきなり公開せず、まず送信しない試行で、何が作られるかを確かめました。

npm run build
npx wrangler deploy --dry-run

結果には、使う資源の一覧(KV・D1・R2・Images・Assets)と、アップロードする量が表示されます。このサイトでは、アップロードの量が約19MB(圧縮後 約5MB)でした。Cloudflare の公式の上限表(2026年10月時点)では、Worker の大きさの上限は無料プラン・有料プランとも圧縮前で64MBなので、大きさは問題ありませんでした。

3. 公開する

確認できたら、公開します。

npx wrangler deploy

初回は、設定ファイルに書いた名前で KV・D1・R2 が自動で作られ、そのまま公開されました。公開先は「Worker の名前.アカウントのサブドメイン.workers.dev」です。あわせて、1分ごとに動く定期実行(予約投稿などに使う仕組み)も登録されました。

4. 無料プランで足りるか、実測した

Workers の無料プランでは、表示1回あたりに使える処理時間(CPU 時間)が10msまでです(有料プランは最長5分)。公開したあと、wrangler tail(本番の動きをその場で見るコマンド)で、ページごとの処理時間を測りました。

  • トップページ:31〜234ms
  • 記事ページ:19〜385ms
  • カテゴリーページ:21〜193ms
  • 記事一覧:12〜15ms
  • 検索結果:7〜28ms

同じページを続けて開くと短くなりますが、それでも多くのページが10msを超えていました。無料プランでは表示できないページが出るおそれがあるため、このサイトは Workers の有料プラン(月5ドル〜)で動かしています。

5. 暗号化キーを設定する

EmDash は、プラグインの設定などを暗号化するキー(EMDASH_ENCRYPTION_KEY)を使います。キーは EmDash のコマンドで作り、wrangler で本番の「秘密の値」として登録します。

npx emdash secrets generate --write=保存先のファイル
npx wrangler secret put EMDASH_ENCRYPTION_KEY

公式の手順書では、このキーをデータベースのバックアップとは別に保管するよう書かれています。このサイトでは、プロジェクトのフォルダの外に控えを置き、画面にキーを表示させずに登録しました。

6. 公開したら、すぐに初期設定をする

公開した直後は、管理者がいない状態です。管理画面(/_emdash/admin)を開くと初期設定の画面になり、ここで最初にアカウントを作った人が管理者になります。EmDash 側にも、初期設定の途中で別の人に割り込まれないようにする仕組みはありますが、公開から初期設定までの時間はできるだけ短くするのが安全です。

初期設定は「サイト」「アカウント」「ログイン」の3段階でした。

  • サイト:サイト名と説明文、始め方を選びます。「Sample content」を選ぶと、テンプレートに入っている記事やページが入ります。このサイトでは、サンプルの代わりに日本語の記事を入れておき、それを読み込みました
  • アカウント:メールアドレスと名前を入れます。パスワードの欄はありません
  • ログイン:パスキーを作ります。作り終えると「Passkey created」と表示され、管理画面に入れます
パスキーを作り終えたときの画面(EmDash 1.3.1)
パスキーを作り終えたときの画面(EmDash 1.3.1)

パスキーは、登録したときのアドレス(このサイトなら workers.dev のアドレス)に結びつきます。あとで独自のドメインに移すときは、管理画面の設定でドメインを変更する必要があります。

7. 手元のコマンドから記事を書けるようにする

EmDash の CLI(手元で使うコマンド)を本番につなぐと、記事の追加や更新をコマンドから行えます。このページも、手元のコマンドから投稿しました。

npx emdash login --url https://公開先のアドレス

実行すると、ブラウザで開くアドレスと8文字のコードが表示されます。管理画面にログインした状態でそのアドレスを開き、コードを入れて承認すると、「デバイスを承認しました」と表示され、コマンド側のログインが完了します。

CLI のログインを承認したときの画面(メールアドレスは伏せています)
CLI のログインを承認したときの画面(メールアドレスは伏せています)

まとめ

EmDash の公開は、コマンド1つで資源の作成まで終わる手軽さでした。一方で、無料プランの処理時間の上限、資源の名前の重なり、初期設定のタイミング、暗号化キーの保管など、公開の前後で気をつける所がいくつかあります。

WordPress から乗り換えるかどうかの判断材料は、Edel Hearts のブログ記事「EmDash(エムダッシュ)とは?1.0で何が変わったか、WordPressと実際に比べてみた」にまとめています。