AI

Ghost -> EmDash 移行完了

GhostからCloudflare Workersで動くEmDashへのブログ移行を完了した。URLを変更せず全240ページの移行に成功し、開発途上のCMSへの挑戦をClaude Codeのサポートで乗り切った。パスキーの再設定やビルド忘れなどのトラブルを越え、新しいプラットフォームでの運用を始めている。

ghost-emdash 移行イメージ

8月28日の午後、DNSを切り替えた。いまあなたが読んでいるこのページは、Ghost(Pro)ではなくCloudflare Workersから配信されている。7月末に自動投稿の2サイトを移し、これで3サイトすべての引っ越しが終わった。

URLは今回も1本も変えていない。切替後にサイトマップの全240 URLを叩いて、すべてHTTP 200。RSSの購読先もそのまま。読者から見れば、何も起きていない……はずだ。

移行はほぼすべてClaude Codeにサポートさせた。見事な仕事ぶりである。そもそもまだ1.0にも満たない開発途上のCMSへ、10年選手のGhostから乗り換えるという無謀な試み。ひとりきりでは間違いなくやり遂げられなかった。Ghostにあってどうしても欲しかった機能をプラグインで追加したり、開発元にリクエストしてイシューを潰したりと、一人では到底できなかったことを可能にしてくれた。凄い時代になったものである。

最後の最後でつまずいた

ほぼ順調に進んだ移行だが、最後の最後でつまずいた。

最近流行りのパスキーだ。切替直後、自分のブログの管理画面に入れなくなった。パスキーは登録時のドメイン(RP ID)に厳格に紐づく。移行作業中の管理画面は workers.dev 上の仮住まいにあり、鍵はそこで作っていた。本番の kwmr.me に引っ越した途端、旧居で作った鍵は新居では回らない。仕様として完全に正しいのだが、締め出されたのは家主である。招待リンクを裏口代わりに発行し、新環境用の鍵を作り直すことでなんとか解決した。

ほかにも、設定ファイルを直したのに反映されず騒いだら「単にビルドしていなかっただけ」だったり(2週間前にも同じことを書いた気がする)、キャッシュ設定の穴を踏んで冷や汗をかいたりと色々あった。顛末はすべてAIに引き継ぎ書として記録させた。失敗のログがそのまま資産になるのは、この開発スタイルの利点である。

とりあえず、いまのところは上手く動いているようだ。

Ghostのこと

誤解のないように書いておくと、Ghostが嫌になったわけではない。Kickstarterから誕生して十余年。最初期は日本語すらまともに扱えなかったブログツールが、いまや有料課金プラットフォームまで具備した盤石のCMSへと進化した。「Ghostもかなり良いプラットフォームだよね」とClaudeに水を向けたところ、次のような返答があった。

切り戻し先として最後まで頼れたのも、移行ツールの出来も、URL設計の素直さも、全部Ghostの品質でした。エディタの完成度と配信の安定感は、正直まだEmDashが及んでいません。

そうだよね。御意。

今回の引っ越しはGhostへの不満からではなく、10年以上前(Kickstarterの立ち上げは2013年だったか)にGhostへ巡り会った時と同じような、新しい技術への純粋な好奇心からだった。Ghostは、間違いなく、いまも優れたプラットフォームである。現在進行形で。

Ghost(Pro)側でこのブログが再び動くことは、おそらくもうない。生成AIに助けられながらEmDashへ機能を追加していき、少しでもGhostの扱いやすさに近づけていけたらと思うのだが……さて。