脱WordPress、Cloudflareへ引っ越し(第2回):無料プランの壁と、XMLの細切れ作戦

こんにちは、あるいはごきげんよう。

888FXです。

シリーズ「脱WordPress、始めました」、第2回。前回は自分のPCの中(ローカル環境)でEmDashを動かして、記事の引っ越しとデザインまで終わらせたところまで。今回はいよいよ、それをインターネットに出す話。

……の前に、ひとつ実話を。

小5の息子に「パパこれどうやるの?」と聞かれて、「コマンドプロンプトつかうんだよ」と答えたら、

「?コマンド…?あ、それってPowerShellのこと?」

「…はい。そうです。」

時代は変わった。黒い画面=コマンドプロンプト、の世代はもう古いらしい。なので今回もPowerShellでいきます(笑)。

目次
  1. 置き場所はCloudflare一択
  2. 本番用のEmDashを作る
  3. エラー祭りの始まり
  4. 本題:記事の引っ越し
  5. workers.devで、新しいブログが動いた
  6. これから引っ越す人へ:1か月だけでも課金を
  7. まとめ:小さいブログなら無料でも、なんとかなる

置き場所はCloudflare一択

公開先はCloudflare。実はプロップファームの比較サイトをすでにCloudflareで動かしていて、使い勝手は分かっている。EmDashもCloudflareで動かす前提の作りになっているし、小さいブログなら無料プランで収まる……はず。この「はず」が、あとで効いてくるんですけどね。

ドメインは「先に」Cloudflareへ

最初にやったのが、ドメイン(888fx.trade)の管理をCloudflareに移すこと。ドメインを買ったバリュードメイン側で、ネームサーバーをCloudflareのものに書き換えるだけ。

ポイントは、中身はまだWordPressのままにしておけること。Cloudflare側で「888fx.tradeはエックスサーバー(WordPress)へ」という設定を残しておけば、ブログは普通に表示され続ける。「え、そんなことできるの?」って思わず聞き返しました。ネームサーバーの切り替えは反映に時間がかかることもあるので、先に済ませておくと本番の切り替えが一瞬で終わる。これ、地味に効く小ワザ。

本番用のEmDashを作る

ローカルで作ったものとは別に、Cloudflare用のEmDashを新しく作ります。やることは前回と同じで、質問に答えるだけ。

違うのは「どこに置く?」の答えが「Cloudflare Workers」になるところ。テンプレートは前回と同じ「Starter」。

デザインのファイルは、ローカル版からそのままコピー。前回AIと作った見た目が、ここでそのまま生きてきます。

PowerShellからCloudflareにログイン

次はPCとCloudflareをつなぐ作業。npx wrangler login と打つとブラウザが開いて、「Wranglerがアカウントにアクセスしたがってます」の画面に。Wranglerは、Cloudflareを黒い画面から操作するための公式の道具。

「Authorize」を押せば完了。あとは npm run deploy で公開……と思ったら、最初に「workers.devのサブドメインを登録しますか?」と聞かれる。

ここは「Y」でOK。Cloudflareが無料でくれる仮のアドレス(〇〇.workers.dev)で、本番のドメインに切り替えるまでは、ここで中身を確認できます。

エラー祭りの始まり

で、ここからが本番。

画像の置き場所(R2)がない

「R2 bucket '888fx-media' not found」。R2というのは、Cloudflareの画像やファイルの置き場所。それを作ろうとしたら、今度は「ダッシュボードでR2を有効にして」と怒られる。

R2は無料枠(月10GBまで)の中なら0円。でも、有効にするにはカードの登録が必要。0円なのにカード……。最近は登録するのが怖いので、上限を決めたカードレスデビットにしました。いつでも止められるし、気持ち的にもラク。

「月額0ドル」で購入完了(笑)。あとは npx wrangler r2 bucket create 888fx-media で置き場所を作って、もう一度 npm run deploy。

今度は通った。……と思ったら、次。

「データベースの準備が必要です」

サイトを開くと「Database migrations are required」。データベースの中身の準備(マイグレーション)を、こちらから実行しないといけないらしい。ここで必要になるのが、CloudflareのAPIトークン。PowerShellからデータベースを触るための、合い鍵みたいなもの。

権限は「D1(データベース)の編集」だけ、期限は7日。合い鍵は必要最小限が鉄則。

作ったトークンは一度しか表示されないので、すぐコピー。そして絶対にスクショやブログに載せないこと(なので隠してます)。これをPowerShellに渡して、

npx emdash migrate --d1 888fx-blog

途中で「ロックがかかっています」と止まったりもしたけど、エラー文をAIに見せたら解除のやり方が出てきて解決。

やっとセットアップ画面

ここからは前回と同じ。サイト名を入れて、アカウントを作って、パスキーで保護。

ローカルの時はサクッと終わったところに、ここまで来るのに何回エラーを見たことか……。

本題:記事の引っ越し

前回、一番伝えたかったのが「WordPressから移るなら、まずは標準のエクスポート」。今回もこれでいきます。最新の状態をもう一度書き出して、

EmDashの「インポート」に渡す。ローカルでは一発だったし、余裕でしょ。……と、

「インポート失敗」。……え?

無料プランの壁「CPU 10ミリ秒」

原因は、Cloudflare Workersの無料プランの制限。1回の処理で使えるCPU時間は10ミリ秒まで。記事を一気に取り込むような重い処理は、途中で打ち切られてしまう。

ただ、EmDashのインポートは「段階的に進み、中断した場合も再実行できます」。つまり、失敗してももう一回押せば続きから。

押して、止まって、また押して。48/69、のように少しずつ進んで、記事67件はなんとか完了。ちなみに、記事一覧を「1ページ100件表示」にしたら、それも重すぎて……

Error 1102。管理画面ですら制限に引っかかる(笑)。20件表示に戻したら直りました。

問題は画像191枚

記事はなんとかなったけど、画像はそうはいかない。WordPressから画像を1枚ずつダウンロードしてR2に入れる処理なので、もっと重い。

何回押しても「No result received from media import」。ここで選択肢は2つ。

  • 月5ドルの有料プランに1か月だけ入って、一気に取り込む
  • 無料のまま、何か工夫する

5ドルなら払ってもいい。けど、ここで僕は気になった。「XMLって、分解できないの?」

XMLを細切れにする作戦

WordPressのエクスポートファイル(XML)は、ただの文字のファイル。中身は「記事」「画像」の情報が1件ずつ並んでいるだけ。なら、画像だけを少しずつに分けたファイルを何個も作って、1個ずつ取り込めばいい。分けるのはAIにお願い。

最初は15枚ずつ、13ファイル。……それでも止まる。5枚ずつ、2枚ずつ、最後は1枚ずつ(笑)。細かくするほど通るようになっていきました。

ひとつ、ハマったのが「インポートを開始」のボタンが押せないこと。画像だけのファイルだと、「取り込む記事がない」と判断されるらしい。そこで、どのファイルにも小さな固定ページを1件だけ混ぜておく。取り込み済みのものは自動でスキップされるので、何回混ぜても増えません。こういう抜け道を一緒に考えてくれるのも、AI相手のいいところ。

で、最終的に画像は191枚中184枚。残りの7枚は重複してまとめられた……と、この時は思っていました。この7枚が、次回ちょっとした事件になります。

workers.devで、新しいブログが動いた

Cloudflareの仮のアドレスで、新しいブログが表示されました。ローカルで作った見た目もそのまま。トップのフィルター、目次、パンくずも全部動いている。

あとは「もっと見る」ボタンや「読みもの」の枠、日本語のメニューなどを足しながら、本番への切り替えを待つだけ。

これから引っ越す人へ:1か月だけでも課金を

PHPの件のあたりから、EmDash+Cloudflareを紹介する動画や記事が一気に増えました。でも、どれも「AIと一緒に、簡単なサイトを新しく作ってみた」がほとんど。今あるサイトを引っ越した話や、「移行のデータ量の限界」の話は、一切聞いたことがない。考えてみれば、そりゃそうだよな、って話なんですけどね。

このブログ、記事は67件。100ページにも届かない、小さいブログです。それでもこれだけ細切れにして、何回もボタンを押して、やっと引っ越せた。5000ページのアフィサイトなんて、1枚ずつ分割してたら日が暮れる……どころか年が明ける(笑)。ある程度の規模のサイトを無料のまま移すのは現実的じゃない、と思います。

なので、ブログやサイトの引っ越しなら、移行する月だけでも有料プラン(Workers Paid、月5ドル)に入るのがおすすめ。CPUの制限がぐっと緩むので、XMLを分けたり、何十回もボタンを押したりする手間がまるごと消えます。終わったら無料に戻してもいいし、そのまま払い続けても、国内のレンタルサーバーと比べて高くはない。

ひとつ注意するなら、メール。Cloudflareにはメールボックスを置く機能がないので、そのドメインでメールを使っている人は、今のサーバーにメールだけ残すなど、別に考えておく必要があります。

まとめ:小さいブログなら無料でも、なんとかなる

今回つまずいたのは、このあたり。

  • R2(画像の置き場所)は0円でも、有効にするにはカード登録が必要
  • データベースの準備には、APIトークン(合い鍵)が必要。権限と期限は最小限に
  • 無料プランはCPU 10ミリ秒の壁。記事の取り込みは「もう一回押せば続きから」
  • 画像はXMLを細切れにして取り込む。各ファイルに固定ページを1件混ぜるのがコツ
  • ある程度の規模なら、移行する月だけ有料プランにした方が早い

どれもエラー画面をAIに見せて、一緒に考えながら解決。今回は月5ドルを払わずに済んだけど、それはこのブログが小さかったから。手間と時間を考えたら、5ドルは安いと思います。

次回は、いよいよ本番の切り替え。ドメインをWordPressからEmDashに向けた瞬間、画像が消えた話から。……そう、この記事はもう、EmDashからお届けしています。

#脱WordPress