お久しぶりでございます。

突然のことで驚かれた方もいらっしゃるかもしれませんが、このたび、当ブログをWordPressからHugoに移設しました。

きっかけ

WordPressはその基盤言語としてPHPを使っています。ご存じのとおり、昨今は生成AIの急激な発達のためか、次々と脆弱性が発見されており、私もここ数週間はセキュリティパッチなどの対応に追われていました。

また、当ブログは営利目的ではないのですが、それでもAmazon Lightsail上にインスタンスを立てて運営していたものですから、月10ドル未満ではありましたが、それでもそこそこのランニングコストがかかっている状況でした。

以上の理由から「もはやWordPressに頼らず、スタティックなサイトとしてホスティングしてしまってはどうか」という発想に至り、Claudeくんとコネコネした結果、この度Hugoというツール?静的サイトジェネレータを活用するに至ったのです。

構成

移行前移行後
ホスティングAmazon LightsailCloudflare Pages
生成方法WordPress(PHP + DB)Hugo(静的サイト)
テーマ-Techly
デプロイ-GitHubへのpush → GitHub Actions

記事はMarkdownでGitHubのリポジトリに置き、masterにpushするとGitHub ActionsがビルドしてCloudflare Pagesにデプロイしてくれます。

やったこと

記事の移行

WordPressのエクスポート機能で出力したXMLを、AIに作ってもらったスクリプトでMarkdownに変換しました。記事346件、固定ページ23件、画像は約280MBでした。

Hugoのテーマはそのまま使うと日付表記が英語だったりするので、必要な箇所だけレイアウトを上書きして日本語に直しています。

投稿IDの紐付け

旧サイトのパーマリンクは「基本」設定で、記事のURLは ?p=2512 のようなクエリ文字列でした。これをそのままHugoで再現することはできないので、

  • 新しいURLは /posts/<WordPressの投稿ID>/ にする
  • 旧URL(?p=ID、?page_id=ID)へのアクセスは、Cloudflare Pages Functionsで新URLに301リダイレクトする

としました。

ただし、検索(?s=)やカテゴリ(?cat=)、日付アーカイブ(?m=)の旧URLには対応していません。

記事の見た目の調整

移行した記事を眺めつつ、WordPressのプラグインやブロックエディタで入れていたものなど、表示崩れが起きていたものがいくつかあったので、以下のあたりを個別に直しています。

  • YouTubeのURLを貼ると埋め込み動画にする
  • サイト内の別記事へのリンクと、GitHubのリポジトリURLをカード表示にする
  • 外部リンクは別タブで開く
  • 記事中の<table>タグをMarkdownの表に変換
  • Amazonアフィリエイトリンクのウィジェットを廃止

廃止した機能

スタティックサイトにした絡みで、下記の機能は廃止としました。

  • コメント欄
  • 問い合わせフォーム

所感

ともかくこれで少なくともPHPの脆弱性対応から追われる心配はなくなりました。コスト的にも、Cloudflare Pagesの無料枠にほぼ収まるとみられるので、費用負担も軽減されたのは単純にありがたいですね。

今回も移行計画から何から何までCloude Codeにおんぶにだっこでした。エンジニアとしてそれでいいのかという気もしますが、方針策定やUI改善、バグ修正の指示などに人間が注力できるようになったというのは、何事にも代えがたい革新かなと思いますね。