Featured image of post WordPressからHugo+Cloudflare Pagesへ ─ ブログ移行の進捗まとめ

WordPressからHugo+Cloudflare Pagesへ ─ ブログ移行の進捗まとめ

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.tomldisableKinds = ["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)と対話しながら進めている。進捗があれば随時報告する予定だ。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。