EmDashをCloudflareに立ち上げる手順|作成からログインまで

連載「WordPressからEmDashへ移行する」の第2回です。今回は、EmDashのサイトを作り、Cloudflareの仮アドレスで管理画面にログインできるところまでを進めます。

コマンドは、筆者がClaude Code(パソコンの中でコマンドを打ってくれるAI)に頼んで実行してもらいました。人が操作したのは、ブラウザでの許可、サブドメインの登録、管理画面の初期設定だけです。

✅ この記事で解決できること

  • EmDashのサイトを作り、Cloudflareの仮アドレスで管理画面にログインするまでを再現できる
  • 初回のデプロイでつまずく3か所(サブドメイン未登録、HTTPSのエラー、データベースの準備)の対処がわかる
  • パスキーとドメインの関係を、先に知っておける
  • 所要時間:約30分(つまずき込み)

🎯 こんな人に最適です

  • WordPressからEmDashへの移行を考えていて、まず新しいサイトを立ち上げたい人
  • Cloudflare Workersを初めて使う人
  • コマンド操作をAI(Claude Code)に任せながら進めたい人

🔧 必要な環境・前提

  • Mac
  • Node.js 22.23.4以上(筆者は v24.22.1、npm 11.19.1)
  • EmDash 1.4.0、テンプレート「ブログ(Cloudflare向け)」
  • Cloudflareのアカウント(この時点では無料プラン)
  • Claude Code(なくても、同じコマンドをターミナルで打てば同じことができます)
  • 検証日:2026年10月30日

⚠️ 先に第1回の準備を済ませてください

バックアップとCloudflareのアカウントの用意がまだの人は、先に第1回「【図解】WordPressからEmDashへ移行する手順(準備編)」を済ませてから進めてください。

📋 作業全体の流れ

  1. 手順1:EmDashのサイトを作る(手元のパソコン)
  2. 手順2:WranglerでCloudflareにログインする
  3. 手順3:Cloudflareにデプロイする
  4. 手順4:データベースの準備を終わらせる
  5. 手順5:管理画面の初期設定をする

この記事で出てくる言葉

言葉意味
デプロイ作ったサイトをインターネット上(Cloudflare)に出すこと
WorkerCloudflareのサーバーで動くプログラム。EmDashのサイトそのもの
WranglerCloudflareにWorkerを出すための公式のコマンド
D1Cloudflareのデータベース(記事や設定の入れ物)
R2Cloudflareのファイル置き場(画像などのメディアを入れる)
KVログイン状態などを覚えておく小さな保存場所
workers.dev のサブドメインCloudflareが配る仮のアドレスの名前。本番のドメインに切り替える前は、このアドレスでサイトを開く
マイグレーション空のデータベースに、EmDashが使う表(テーブル)を順番に作っていく作業
パスキーパスワードの代わりに、Macの指紋認証(Touch ID)などでログインするしくみ

手順1:EmDashのサイトを作る(手元のパソコン)

手順1-1:作成のコマンドを実行する

ターミナル(文字だけでパソコンを操作する画面)で、次のコマンドを実行しました。Node.js(JavaScriptのプログラムを動かす土台)とnpm(部品を取ってくる道具)を使います。

npm create emdash@latest site -- --template cloudflare:blog --pm npm --no-sandboxed-plugins --install --yes
  • site:できるフォルダの名前です。
  • --template cloudflare:blog:ブログ用・Cloudflare向けのテンプレート(サイトのひな形)です。
  • --no-sandboxed-plugins:有料プランが必要な「サンドボックス型プラグイン」を使わない設定です。無料プランで動かすために付けました。

部品(666個)のインストールに、約1分かかりました。

手順1-2:npm 11 のときは2つの部品を許可する

作成のあと、手元でサイトが起動しませんでした。原因はnpm 11の仕様です。

💡
ポイント:npm 11は、インストールのときに自動で動くスクリプトを止めます。止められたのはworkerd(Cloudflareの実行環境を手元で再現する部品)とesbuild(プログラムを組み立てる部品)の2つです。この2つを許可して、組み立て直すと動きます。
npm install-scripts approve workerd esbuild
npm rebuild workerd esbuild

手順1-3:名前を自分のサイト用に変える

  1. wrangler.jsonc(Cloudflare向けの設定ファイル)を開きます。
  2. 初期値の名前(my-emdash-site など)を、自分のサイト用に変えます。

筆者は、Workerを manual-chang、D1を manual-chang-db、R2を manual-chang-media にしました。

作成のときに、次のファイルも自動で作られます。

  • .env:暗号化キー(秘密の値)が入っています。git(変更の履歴を残す道具)には入らない設定になっています。
  • .mcp.json:Claude CodeからEmDashの公式ドキュメントを検索できる設定です。

筆者は、ここでサイトのフォルダをgitで管理し始めました。

手順1-4:手元で起動を確認する

  1. npm run dev を実行します。
  2. ブラウザで http://localhost:4321 を開きます。
  3. テンプレートの「My Blog」が表示されれば成功です。黒い背景で、記事は0件(「No posts yet」)です。
手元で起動したEmDashのブログテンプレート「My Blog」。黒い背景で、記事は0件(No posts yet)

ここまで、作成から起動の確認まで約5分でした。

手順2:WranglerでCloudflareにログインする

  1. npx wrangler login を実行します。
  2. ブラウザに「Wrangler wants to access your account」の画面が開きます。
  3. アカウントを確認して、「Authorize」を押します。
  4. 「Authorization granted to Wrangler」と表示されれば完了です。
Cloudflareの「Wrangler wants to access your account」の画面と「Authorize」ボタン
💡
ポイント:画面には「30 total permissions」と出ます。この許可は、あとからCloudflareの「My Profile」→「Access Management」→「Connected Applications」で取り消せます。

手順3:Cloudflareにデプロイする

手順3-1:最初のデプロイで止まる

npm run deploy を実行しました。中身は「組み立て(build)」と「wrangler deploy」です。結果は、次のエラーで失敗しました。

You need to register a workers.dev subdomain before publishing to workers.dev
💡
ポイント:Workersを初めて使うアカウントは、必ずここで止まります。仮アドレスの名前(サブドメイン)を先に登録する必要があるためです。登録はアカウントにつき1回だけです。なお、組み立て自体は成功していました(約19MB)。

手順3-2:workers.dev のサブドメインを登録する

  1. Cloudflareのダッシュボード(管理画面)を開きます。
  2. 左のメニューで「Compute」→「Workers & Pages」を開きます。
  3. 右下の「Account details」にある「Subdomain」の欄で、鉛筆マークを押します。
  4. 名前を決めて登録します。
Cloudflareの「Workers & Pages」の画面。右下の「Account details」に「Subdomain」の欄がある

この時点では、Workerはまだ0個(「No projects found」)です。右上には無料枠が表示されていました。1日10万リクエストまで無料で、請求額は $0.00 です。

決めた名前は、アカウント全体の仮アドレス <名前>.workers.dev になります。サイトの仮アドレスは https://<Worker名>.<名前>.workers.dev です。

手順3-3:もう一度デプロイする

  1. もう一度 npm run deploy を実行します。
  2. D1・R2・KVが自動で作られてから、アップロードされます。約30秒でした。

Cloudflareの画面でデータベースなどを自分で作る必要はありませんでした。wrangler.jsonc に書いた名前で作られます。

1回のデプロイで、Cloudflare上にWorker(サイトそのもの)・D1(データベース)・R2(ファイル置き場)・KV(小さな保存場所)の4つがそろう図

手順3-4:暗号化キーをCloudflareにも登録する

手順1-3で .env に作られた暗号化キーを、Cloudflare側にも登録します。

npx wrangler secret put EMDASH_ENCRYPTION_KEY

入れる値は、.env にあるものです。値は画面にもログにも出さないでください。

手順3-5:HTTPSのエラーが出たら1〜2分待つ

デプロイの直後、サイトを開くとHTTPSの接続エラーになりました。

💡
ポイント:サブドメインを登録したばかりで、証明書(httpsの鍵)を準備している途中です。1〜2分待つだけで開けるようになります。

手順4:データベースの準備を終わらせる

HTTPSのエラーが消えたあと、今度は「Database migrations are required」(503)と表示されました。

手順4-1:原因を知る

  • データベースの準備(マイグレーション)は、全部で91段階あります。
  • Workerは、最初のアクセスのときに自動で準備を進めます。ただし、重い段階(51段階目以降)は手元のコマンドで実行する仕様です。
  • さらに、自動の実行が途中で止まり、「作業中」の印(ロック)が残っていました。

手順4-2:コマンドで残りを実行する

ここはClaude Codeが実行しました。

① wrangler.jsonc に、D1のIDを書き足します。自動で作られたD1は、IDが書かれていないため、コマンドがどのデータベースか特定できないからです。

② 状況を確認します。

npx emdash migrate --status

筆者の場合は、50段階まで完了、41段階が未実行で、ロックが残っていました。

③ 残りを実行します。<…> には、--status の結果に出る値を入れます。

npx emdash migrate --take-over-lock=<ロックのID> --expected-target-fingerprint=<確認用の文字列>

このコマンドには、CloudflareのアカウントIDとAPIトークンが必要です。環境変数 CLOUDFLARE_ACCOUNT_ID と CLOUDFLARE_API_TOKEN に入れて使いました。トークンは新しく発行せず、ログイン済みのWranglerから npx wrangler auth token で取り出しました。

⚠️ トークンは貼らない

APIトークンとアカウントIDは秘密の値です。チャットやブログ、スクショに載せないでください。

💡
ポイント:初回のデプロイのあとに、データベースの準備コマンドが必要になることがあります。公式のCloudflareへのデプロイ手順だけ読むと気づきにくい点です。公式ドキュメントでは、別のページ「Core migrations」に書かれています。

手順4-3:表示を確認する

  1. トップページが表示されることを確認します。
  2. 管理画面 /_emdash/admin を開きます。
  3. 初期設定の画面 /_emdash/admin/setup に移動すれば正常です。

サブドメインの登録から表示の確認まで、データベースのトラブル込みで約15分でした。

手順5:管理画面の初期設定をする

ここだけは人が操作します。

⚠️ デプロイしたら、すぐに初期設定をする

初期設定が終わるまでは、アドレスを知っている人が先に管理者を作れてしまいます。

ブラウザで https://<Worker名>.<名前>.workers.dev/_emdash/admin を開きます。「サイトをセットアップ」の画面(日本語表示)が開きます。設定は「サイト」→「アカウント」→「ログイン」の3ステップです。

手順5-1:サイト

  1. 「サイトタイトル」を入れます。筆者は「マニュアルちゃん」にしました。
  2. 「キャッチフレーズ」を入れます。初期値は英語(Thoughts on building for the web)なので、今のサイトと同じ文に変えました。
  3. 「どのように始めますか?」で、「空のサイト」を選びます。
  4. 「続行 →」を押します。
EmDashの「サイトをセットアップ」画面のステップ1「サイト」。入力前の状態で、初期値の「サンプルコンテンツ」が選ばれている
💡
ポイント:選択肢は「サンプルコンテンツ」(初期値)/「空のサイト」/「既存のEmDashサイトをインポート」の3つです。サンプル記事を入れると、WordPressから取り込む記事やページと名前がぶつかります。移行するなら「空のサイト」を選んでください。上のスクショは入力前の状態です。

手順5-2:アカウント

  1. メールアドレスを入れます。
💡
ポイント:WordPressと同じメールアドレスにしておくと、第3回の記事の取り込みで、投稿者が自動でつながります。

手順5-3:ログイン(パスキーを作る)

  1. パスキーを作成します。MacではTouch IDを使いました。
  2. 「パスキーを作成しました」と表示されます。
  3. 「ダッシュボードを開く」を押します。
EmDashの「パスキーを作成しました」の画面と「ダッシュボードを開く」ボタン

パスキーの確認、名前の変更、追加は、あとから「セキュリティ設定」でできると画面に表示されます。

パスキーとドメインの注意

パスキーは、アドレスごとに作られます。workers.devの仮アドレスで作ったパスキーは、本番のドメイン(manual-chang.com)では使えません。

  • 最初は「パスキーは本番ドメインで登録しないといけない」と思っていました。
  • 公式の「Move to a New Domain」ガイドを読むと、workers.devで作ってから本番に移す方法が用意されていました。
  • 本番に切り替えるときに、管理画面の「設定」→「一般」→「ドメインを変更」から、新しいアドレス用のパスキーを登録し直せばよいです(第5回で実際にやりました)。

⚠️ この段階では本番ドメインを設定しない

最初から本番ドメイン(EMDASH_SITE_URL)を設定すると、ドメインを切り替えるまで管理画面に入れなくなります。この時点の本番ドメインは、まだ古いWordPressを指しているためです。ドキュメントの一部だけを読むと誤解しやすい点です。

うまくいかないときは

症状原因対処
作成後、npm run dev で起動しないnpm 11がインストール時のスクリプト(workerd、esbuild)を止めているnpm install-scripts approve workerd esbuild のあと npm rebuild workerd esbuild
デプロイで「You need to register a workers.dev subdomain…」Workersを初めて使うアカウント「Compute」→「Workers & Pages」の「Account details」→「Subdomain」で名前を登録して、もう一度デプロイ
デプロイ直後にページが開かない(HTTPSのエラー)証明書の準備中1〜2分待つ
「Database migrations are required」(503)データベースの準備が途中で止まっているD1のIDを wrangler.jsonc に書き、npx emdash migrate --status で状況を見て、npx emdash migrate で残りを実行
本番ドメインに切り替えたらログインできないパスキーはアドレスごと切り替えのときに「ドメインを変更」から本番用のパスキーを登録し直す(第5回)

まとめ

  • npm create emdash@latest でサイトを作ります。npm 11では、workerdとesbuildの許可が必要です。
  • Workersを初めて使うなら、デプロイの前にworkers.devのサブドメインを登録します。
  • D1・R2・KVは、デプロイのときに自動で作られます。
  • 「Database migrations are required」が出たら、npx emdash migrate で残りの準備を実行します。
  • デプロイしたら、すぐに管理画面の初期設定をします。移行するなら「空のサイト」を選びます。

この回の終わりの時点で、EmDashは仮アドレス(workers.dev)で動き、管理者としてログインできます。記事はまだ0件です。本番のmanual-chang.comは、まだ古いWordPressのままなので、読者からは何も変わって見えません。

次回は、第3回「WordPressの記事をEmDashに移す手順|無料プランで止まった時の対処」です。ここでCloudflareの無料プランの上限に当たります。

連載の他の回

この記事を書いた人

hiroshi