Claude Codeに手伝ってもらって作りました。
WordPressで管理していた古いブログがあります。2019年から更新は止まっていたのですが、WordPressは動かし続けていました。更新しないサイトでも、WordPress本体やPHP、プラグインの更新はやめられません。かといって消してしまうと、よそから貼ってもらったリンクも切れてしまいます。
そこで、WordPressのDBとアップロード済みの画像から、同じ見た目のHTMLを作り直すツール(wordpress-archiver)を作って、PHPもMySQLも使わない静的なサイトに置き換えました。上の画像が切り替え後のトップページです。見た目はもとのまま、中身はただのHTMLと画像です。
更新しなくなったWordPressを静的に残す方法は、大きく2つあると思います。
wget --mirrorや、WordPressの静的化プラグインなど)最初は1.の方法で試しました。手軽ですが、CSSに付く?ver=…や、/?p=123のような短縮URL、/wp-json/などのWordPressらしいURLを一つずつ手当てする必要があります。DBに直接さわれるなら、2.のほうが確実です。巡回で取りこぼす心配がなく、何をどのURLに出すかを自分で決められます。
Rubyの標準ライブラリだけで書いていて、DBはmysqlコマンドで読みます。WordPress本体は一切動かしません。
<p>化、引用符の変換、ブロックエディタの記事の描画、「続きを読む」など)は、WordPressのthe_contentと同じ順番で同じ処理をするように、PHPのソースから移植しました/…/embed/)も作るので、ブログ内で記事を貼っていた部分もそのまま表示されます/?p=123や/?page_id=45の短縮URLは、.htaccessで元のURLへリダイレクトしますいちばん気を使ったのは「同じ見た目」です。次の3段階で確かめました。
formatting.phpをPHPで動かした結果と、全297件の本文・タイトルで完全に一致もとのサイトで切れていた画像(旧ステージング環境の証明書切れ)が、逆に表示されるようになったのはおまけです。
wp-content/uploadsとテーマ、wp-includesの静的なファイルを手元にコピーするssh サーバ mysql DB名)と出力先を書いて、ruby wordpress_archiver.rb 設定.ymlを実行するhtdocs/をサーバに置き、VirtualHostのDocumentRootを切り替えるこのブログの場合、ビルドは数秒、HTMLは687ファイル、画像を含めて670MBほどでした。切り替え前のWordPressはディレクトリもDBも残してあるので、DocumentRootを戻せばいつでも元に戻せます。
ついでに、左のサイドバーの「Recent Posts」を「About」(ブログの説明と、伊藤製作所への案内)に置き換え、フッターにこのブログについてへのリンクを足しました。DBには手を入れず、ツールの設定ファイルで差し替えています。
もう更新しないWordPressサイトがあって、DBとファイルにアクセスできるなら、消してしまう前に静的化を検討してみてください。
今回は自分のブログ(Twenty Fifteen)に合わせて作ったので、ほかのテーマではテンプレートを書き足す必要があります。似たようなサイトを抱えている方がいたら、お気軽にご用命ください(仕事依頼受付)。