1997年から運営してきた当ブログ(hide10.com)を、WordPressからHugo + Cloudflare Pagesの構成に移行する作業を進めている。現時点での進捗をまとめておく。
なぜ移行するのか
wpXのストレージ(30GB)が満杯になったことが直接のきっかけだ。約15,000記事・10万枚以上の画像を抱えるブログとして、以下の課題があった。
- ストレージ不足: wpXの30GBでは画像のアップロードが困難に
- 表示速度: 動的生成のWordPressは記事数が多いと重い
- コスト: 静的サイトならホスティング費用を大幅に削減できる
現在の構成
WordPress (wpX) → Hugo (静的サイト生成) → Cloudflare Pages (ホスティング)
画像 → Cloudflare R2 (images.hide10.com)
- Hugo: 静的サイトジェネレーター。15,000記事超を約2分半でビルド
- Cloudflare Pages: 静的サイトのホスティング。Free プランで運用中
- Cloudflare R2: 画像ストレージ。
images.hide10.comで配信 - テーマ: Stack
完了した作業
画像のR2移行
wpXに保存されていた約93,000ファイル(27GB)の画像をCloudflare R2に移行。オリジナル画像はjpegoptim/pngquantで圧縮してからアップロードした。images.hide10.com のカスタムドメインで配信している。
全記事エクスポート
WordPressのREST APIを使い、15,445記事をHugoのMarkdown形式にエクスポート。スクリプト(wp2hugo.py)で以下を自動処理した。
- HTML→Markdownの変換
- 内部リンクの変換(
/archives/{id}→/post/{slug}/) - 画像URLのR2パスへの変換
- Front matterの生成(タイトル、日時、タグ、カテゴリ、アイキャッチ)
Cloudflare Pagesへのデプロイ
Cloudflare Pages の Free プランには20,000ファイルの制限がある。taxonomy(タグ・カテゴリのページ)を無効化し、約18,500ファイルに収めてデプロイした。
現在のURL: new.hide10.com
X共有ボタンの修正
記事フッターのX(旧Twitter)共有ボタンを実装。x.com/intent/tweet を使い、PCではポップアップウィンドウ、モバイルではXアプリへのネイティブ遷移で動作するようにした。
残っている作業
- Workers Paid移行: $5/月のプランでファイル上限を100,000に拡大し、タグ・カテゴリページを復活させる
- アーカイブ・検索ページ: 現在404。ページの作成が必要
- RSSフィードの整備
- Google Analyticsの導入
- DNS切り替え:
www.hide10.comを新サイトに向ける(最終ステップ)
技術メモ
Cloudflare Pages Free の制限対策
20,000ファイル制限に対し、hugo.toml で disableKinds = ["taxonomy", "term"] を設定。タグは記事フッターにリンクなしラベルとして表示している。
R2画像のURL構造
R2のパスは uploads/年/月/ファイル名。Hugo側ではrender-imageフックで /uploads/... を images.hide10.com/uploads/... に自動変換している。resources.GetRemote による画像のダウンロードを防ぐため、helper/image.html もオーバーライドした。
ビルド時間
15,000記事超のフルビルドに約2分半。hugo --minify でHTMLの最適化も行っている。
移行作業はClaude Code(Anthropic)と対話しながら進めている。進捗があれば随時報告する予定だ。
