霜月七日、夜。総大将、ついに采配を振る。
「PHPを、最新へ」。
城は崩れなかった。崩れたのは、門の脇に立っていた見張り小屋が三つ。
そして翌朝、殿は古い鎧を脱ぎ捨てた。
※ 時代劇風の語りは演出です。この回の作業は、実際に公開中のサイトへの本番作業です。PHPの切り替えも、本番で行いました。
PHP 7.4.33から8.5.12へ。切り替えは一瞬だった
第六話で出城(サブドメイン)を片づけ、本丸(このサイト)は自作テーマのWATABOKORIに移っていました。残る大仕事は、PHPそのものを新しくすることです。
このサイトはXserverで動いています。PHPのバージョンはサーバーパネルから「ドメインごと」に選ぶ仕組みで、サブドメインも同じ設定を共有します。つまり、本丸を切り替えると、出城も一緒に切り替わります。
切り替える前に、殿はAI軍師(くーちゃん)に二つの方針を伝えました。
- 出城は、止まっても進める。出城は手間をかけて守るほどの城ではない。止まったら、あとで直す
- プラグインは、更新せずにそのまま切り替える。先に全部を最新にすると、何が原因で壊れたのか分からなくなる。壊れたものだけ直す
2026年11月7日の夜、PHP 7.4.33から8.5.12へ。サーバーパネルで選んで保存するだけなので、切り替え自体は一瞬です。

ちなみに、WordPressの公式資料では、今使っているWordPress 7.1はPHP 8.5に「完全対応」と書かれています。2026年5月に「ベータ対応」という表記がなくなり、PHP 8.5も正式な対応バージョンとして扱われるようになりました。問題が起きるとすれば、WordPress本体ではなく、テーマやプラグインのほうです。
壊れたのは3つ。どれも「設定画面」だった
切り替えたあと、AI軍師が管理画面のページを片っ端から開いて確かめました。公開中の記事やトップページは、何事もなかったように表示されています。
止まっていたのは、プラグインの設定画面が3つでした。開くと「重大なエラー」(PHPが止まるFatalエラー)が出ます。
- XML Sitemap Generator for Google(サイトマップを作るプラグイン)→ 最新版に更新したら直った
- Pz-LinkCard(リンクをカード表示にするプラグイン)→ 最新版に更新したら直った(このあと、使っていないので削除)
- Login Alert(ログインを通知するプラグイン)→ 更新版がない。削除して、同じ役目のプラグインを自作した
「更新せずに切り替える」方針にしておいたおかげで、壊れたのがどれかはすぐに分かりました。表の画面ではなく設定画面だけが壊れていたので、読者から見える被害はありませんでした。
自作したログイン通知は、ログインがあると管理者にメールを送り、「いつもと違う環境」からのログインなら件名に【新しい環境】と付ける、という小さなものです。ただし、通知メールが本当に届くかは、この原稿を書いた時点ではまだ確かめていません(未確認)。
使っていないプラグインを、29個捨てた
ついでに、殿はもう一つ決めました。
「もう記事はAIに書かせる。俺が直接文字を打つことは、ほとんどない。使ってないものは全部消していい」
入力を助けるプラグイン(エディターの拡張、定型文の挿入など)は、AIが書く今の運用では出番がありません。画像の処理や旧テーマ専用の道具も、もう使っていません。3回に分けて、合わせて29個のプラグインを削除しました。
ただし、残したものもあります。広告のいたずらクリック対策(AdSenseを停止させる目的で広告を連打する人への備え)、画像の自動縮小、キャッシュ、サイトマップです。残ったプラグインは、すべて最新版に更新しました。
気づきにくい落とし穴:「記号の形」が変わった
プラグインを止めるたびに、AI軍師は全記事・全固定ページの表示を「止める前」と「止めた後」で比べていました。そこで、ひとつだけ差が見つかります。
本文の中の記号の形が、変わっていたのです。まっすぐな引用符(")が丸い引用符(“ ”)に、ハイフン(-)がダッシュ(–)に置き換わっていました。WordPressには、記号を自動で「きれいな形」に変える機能(wptexturize)があります。これまでは、消したプラグインのどれかが、こっそりこの機能を止めていたようです。
見た目の小さな違いですが、コードの例を載せている記事では、記号が変わるとそのままコピーして使えなくなります。自作の互換プラグインに「記号の自動変換を止める」1行を足して、元の表示に戻しました。最終的に、記事と固定ページ108件すべてで、変更前と同じ表示になったことを確かめています。
古い鎧(AFFINGER)を脱ぐ
このサイトは長いあいだ、有料テーマのAFFINGERで作られていました。見た目はよく、機能も多い。けれど今回の乱で、殿はこう決めます。
「もうアフィンガー依存から抜け出したい。PHPが新しくなったとき、すぐに対応できるようにしたい」
有料テーマは、作者が更新してくれるのを待つしかありません。自分で直せないものが土台にあると、PHPを上げるたびに同じ不安を抱えることになります。
そこでAI軍師は、AFFINGERの販売ページを読み、このサイトで実際に使っていた機能を洗い出しました。必要なものだけを、自作のプラグインとして作り直しています。

- 目次:見出しから自動で作る。タイトルは「気になるところだけ読む」
- 記事の装飾:囲み枠、チェックリスト、ボタン、ステップ、よくある質問、吹き出しなど
- 旧記事の表示:AFFINGERの書き方(ショートコード)で書いた昔の記事が、テーマを外しても崩れないようにする互換プラグイン
- PHPの版ごとの検査:自作のテーマとプラグインが、PHP 7.4から8.5までのどの版でも動くかを、本番に触らずにPCの中で確かめる道具
最後の「検査の道具」が、今回いちばん大事な成果かもしれません。次にPHP 8.6が出たときも、この道具に新しい版を足して流せば、どこを直せばいいかが本番に触る前に分かります。自作のテーマとプラグインは、PHP 7.4から8.5まで、すべての版で合格しました。
そしてAFFINGER本体と、その子テーマを削除しました。消したのは殿です。
翌朝の後始末と、うまくいかなかったこと
11月8日の朝は、後始末から始めました。
- エラーを画面に出さない設定にした:PHPのエラーが読者の画面に表示されないよう、サーバーの設定(display_errors)をOffに
- データベースのバックアップを取った:記事や設定が入ったデータベースを丸ごとダウンロードして保存
- ファイル全体のバックアップは、失敗した:画像などを含めた全ファイルのZIPは約3.4GBあり、ブラウザでのダウンロードが最後まで終わらなかった。今回は、サーバー側の自動バックアップ(7日分)に頼ることにした
3つ目は、正直に書いておきます。「大きな作業の前に、手元にバックアップを持っておく」という基本が、ファイル側は守れていません。ファイル全体の取り方(サイズを分けて取る、サーバー上で圧縮してから取るなど)は、次の課題です。
まだ刀は納めない。1週間の見張り
PHPは最新になりました。それでも、この乱はまだ終わっていません。最後の工程は「切り替え後1週間の見張り」です。普段は開かない画面、たまにしか動かない処理、週に一度だけ走る予約処理。そういう場所のエラーは、切り替えた直後には出てきません。
見張りは11月14日まで続けます。その結果が出たら、この連載の第一章は本当の終わりを迎えます。
この回の記録
- 作業日:2026年11月7日(夜にPHPを切り替え)〜11月8日(午前に後始末)
- 環境:本番(実際に公開中のサイトへの変更あり)。PHPの切り替え、テーマの削除は殿が実行
- PHP:7.4.33 → 8.5.12(Xserverのドメイン単位の設定。サブドメインも同時に切り替わる)。WordPressは7.1.4
- 切り替え直後に止まった設定画面:3つ(XML Sitemap Generator for Google、Pz-LinkCard=更新で解決、Login Alert=削除して自作に置き換え)。公開中のページに被害なし
- 削除したプラグイン:29個。残したプラグインはすべて最新版へ更新
- 表示の比較:記事・固定ページ108件で、変更前と同じ表示を確認(記号の自動変換の差を1件見つけて修正)
- 自作のテーマ・プラグイン:PHP 7.4〜8.5のすべての版で検査に合格
- 進捗:12工程のうち 11/12(M11 PHP 8.5.12への本番切り替え)。残りはM12 切り替え後1週間の見張り(11月14日まで)
- 未確認:自作ログイン通知のメールが届くか/ファイル全体のバックアップ(失敗、サーバーの自動バックアップに依存)
- 進捗率は「工程の数」で数えたもので、作業量や難しさは重みづけしていません
- 原稿の執筆時点:2026年11月8日
次回予告
新しい城に移り、古い鎧も脱いだ。残るは、静かな1週間の見張りだけ。何も起きなければ、それがいちばんの戦果になる。だが、城というものは、見張りの最中に限って何かが起きる。
――最終話は、見張りの結果が出たあとに公開します。
連載「AI時代・PHPの乱」