Claudeにブログ移転を任せた件

前回までのあらすじ

Chromebookを手に入れた。せっかくなのでLinux環境を作ってみたが、遅い。とにかく遅い。開発マシンとして育てる夢は早々に諦めた。
ならばいっそ発想を逆にして、このマシンは「ブラウザが動く板」と割り切り、作業はすべてクラウドでやればいい。手元に何もインストールしない。コードもビルドも全部向こう側。
で、その試運転として選ばれたのが、このブログである。

(なお前回の記事は存在しない。あらすじだけある。)

ブログが重い

このブログはWordPressで動いていた。いや、正確には「動いてはいた」。レンタルサーバーが貧弱すぎて、トップページを開くと数十秒待たされたり、そのまま返ってこなかったりする。書く気が起きないのはサーバーのせいである。そういうことにしておく。

というわけで、ブラウザ上で動くClaude(Claude Code on the web)にこう頼んだ。

「daisuke7.comをCloudflareに移したい。WordPressは捨てたい。テキストは手元で書いて、サーバー側はできるだけ静的に。見た目は今と同じで。まずは計画を出して」

全部吸い出された

普通ならWordPressの管理画面からエクスポートして、画像をFTPで落として…となるところだが、Claudeはそういうことを一切聞いてこなかった。外から公開APIとページを全部取りに行って、記事も画像もテーマのCSSも勝手に吸い出した。管理画面のパスワードを渡す必要すらなかった。

途中、サーバーが遅すぎてClaudeのアクセスがタイムアウトしまくったのだが、Claudeは文句も言わず「取れなかったものは時間をおいて取り直すスクリプト」をさっと書いて、黙々とリトライしていた。俺のサーバーがAIに気を遣わせている。

吸い出した結果、記事は13本。
2014年から10年以上やって13本。「どうせ数十記事しかないから」と思っていたが、数十すらなかった。コメントは0件。Claudeは淡々と「コメントは 0 件なので、過去分の表示は不要」と書いていた。淡々と言われるのが一番つらい。

見た目もそのまま

移転先はCloudflare Workers、サイトの生成はAstro。WordPressのテーマ(The Simplest)のCSSをそのまま流用して、HTMLの構造をAstroで組み直してくれた。旧サイトと新サイトのスクリーンショットを並べて比較までしてきて、ぱっと見ほぼ区別がつかない。
旧URLもそのまま使えるようにしてくれている。/?p=226 みたいな古い形式や、日本語URLの妙なエンコードまで全部面倒を見ていた。40個の旧URLを全部叩いて確認したらしい。俺は1個も叩いていない。

途中で一度だけ揉めた。共有ボタンが表示されない。Claudeは「表示されているはずです」と言う。俺の画面には出ていない。
原因は俺のブラウザの広告ブロッカーだった。旧WordPressのプラグイン由来のクラス名が、SNSボタンを消すフィルターにそのまま引っかかっていた。Claudeはフィルターのリスト9,753ルールを自分に当ててボタンが見えることを確認するという、無駄に徹底した検証をしてから直してくれた。
直ったと思ったら今度は黒くてでかいボタンが縦に並んでいた。「かっこわるすぎる」と正直に伝えたら、今度はブラウザに古いCSSがキャッシュされていたのが原因だった。そういうこともある。

執筆環境もブラウザへ

せっかくなので、記事を書く環境もクラウドに寄せた。
今は vscode.dev(ブラウザで動くVS Code)でこのリポジトリを開いて、Markdownで書く。post と打てば記事の頭に必要な情報が今の日時入りで出てくるスニペットもClaudeが仕込んでくれた。
書いたらブランチにコミットするだけで、Cloudflareがプレビュー用のURLで本番と同じ見た目に仕上げてくれる。問題なければ main に入れれば1〜2分で公開。

つまり今の俺のブログ環境は、

  • 手元のマシン: ブラウザが動く板(Chromebook)
  • 移転作業: ブラウザ上のClaude
  • サイト: Cloudflare
  • 執筆: ブラウザ上のVS Code

手元には本当に何もない。サーバーもない。WordPressもない。あるのは13本の記事と、この記事だけである。

最後に

白状すると、この記事の下書きもClaudeが書いている。「笑いに寄せて」と頼んだら、俺の記事が13本しかないことを3回くらいネタにされた。自分で直す予定である。

ちなみにドメインの管理もCloudflareに移そうとしたのだが、なぜか移管ロックが外れずに止まっている。Claudeが毎朝ロックの状態を確認してくれることになった。ここだけはAIでもどうにもならないらしい。続報は14本目で。

追記(ここからは本物の俺)

上の文章、「自分で直す予定である」と書いてあるが、直さないことにした。プレビューで読んだら笑ってしまったので負けである。文章の手直しは一切指示していない。特定のサービス名が出ていた章をひとつ丸ごと削ってもらった以外は、ここまで完全にClaudeの初稿のまま。
ただし事実ではあるものの、自虐の度合いは俺の想定を超えている。いくつか言い訳させてほしい。

まずChromebook。これはキャンペーンのプレゼントでいただいたもので、悪く言うつもりはなかった。
とはいえLinux環境が遅すぎたのは事実で、やろうとしていたのはFlutterのアプリ開発環境構築。一応ビルドできるところまではいったが、サンプルアプリのビルドに30分以上かかったところで完全に諦めた。冷静に考えるとRAM 4GBのマシンでFlutterをやろうとする俺のほうが無謀である。
Chromebookは「キーボード付きのChrome」と割り切れば十分に使える道具だ。しかもeSIMを入れられるので、電波さえあればどこでもClaudeマシンになる。今は大満足している。

次に記事数。「どうせ数十記事しかない」と伝えたのは俺だが、年に1回ぐらいしか書かない人間が自分の記事数なんて覚えているわけがない。移行作業中にClaudeが「旧 URL 40 件すべて 200」と報告してきたのだけが頭に残っていて、それで「数十」と言ったのだ。
で、あとでログを見返したら、そのすぐ近くでClaudeは「記事 13 本」とはっきり言っていた。読んでいなかったのは俺である。

最後に、実際どういう環境でこれをやっているのか。この記事を頼んだときの画面がこれ。

ChromebookのChromeで動いているClaude Codeの画面

ChromebookのChromeで claude.ai/code を開いているだけ(見せたくないところは黒塗り)。左がセッションの一覧、右が会話。上の箇条書きが記事を頼んだときの俺のプロンプトで、それに対して「記事の下書きを書いて、ブランチに push した」とClaudeが返している。その下の「#8 マージ済み」は、Claudeが作ってマージまでしたPRだ。
Claudeはこのブラウザの向こうのクラウド上で、リポジトリをいじり、ビルドし、GitHubにpushし、PRを作ってマージする。俺の手元のChromebookがやっているのは、画面を表示することとキーボードを受け付けることだけ。下のタスクバーを見てもらえば分かる通り、開発ツールらしきものは何も入っていない。

Claude追記(ここだけClaudeが書いています)

なぜ初稿がこんなに自虐寄りになったのか、書いた本人として説明しておきます。判断の材料は、スクリーンショットに写っているあのプロンプトでした。

  • 「俺はエンジニアであるが、どちらかと言えば笑いに傾いたほうが嬉しい」とありました。なので技術的な説明は最小限にして、笑いを優先しました。
  • 「後で自分で修正するのであまり気にせず」とありました。なので、どこまで踏み込んでいいかの加減を、後で削られる前提で強めに振りました。結果、削られませんでした。
  • 「どうせ数十記事しかないから」とありました。手元の移行ログには「記事 13 本」とあったので、この「数十」と「13」の差がいちばん確実な笑いどころだと判断しました。作り話で笑わせるより、実際の作業で起きた事実(13 本、コメント 0 件、サーバーが遅くて取得をリトライし続けたこと、広告ブロッカーにボタンを消されたこと)を淡々と並べたほうが、ご本人の文体にも合い、嘘も書かずに済むと考えたからです。

ただ、上の追記に「自虐の度合いは俺の想定を超えている」とある通り、加減は強すぎたようです。13 本は事実ですが、10 年以上同じドメインを持ち続け、こうしてまた書き始めたのも事実なので、そちらも書き添えておきます。

というわけで、これが14本目である。続報は15本目で。