リハーサルの鬼――城攻め前夜に見つかった落とし穴

戦国風のアイキャッチ。兜をかぶった人物が軍配を前に掲げ、左に「環境準備・動作確認・本番手順」のチェック表と「バックアップ→復元訓練」の巻物、画面を比べるノートパソコンと「検証済」の印。「第五話 リハーサルの鬼 本番前に落とし穴」の文字

決戦の前夜、陣中に灯がともる。
出城もWATABOKORIでそろえる。方針は決まり、試作の兵器もできあがった。あとは本番を待つばかり――のはずだった。
「殿、念のため、もう一度だけ予行演習をば」
その「念のため」が、思わぬ落とし穴を次々と掘り当てることになる。

※ 時代劇風の語りは演出です。この回はすべてローカル検証(このPCの中)で、本番への変更は0件。数字・日付・結果は作業記録に基づきます。

試作品を見直したら、本番に持ち込めない点が2つあった

対象は、旧テーマで動いているuberとinvestorです。記事の本文・URL・SEO設定を守ったままWATABOKORIへ移すための道具(子テーマと互換プラグイン)を、本番に持ち込む前に予行演習で合格させておく、というのがこの回のテーマでした。

予行演習の準備として、前回の試作品を見直したところ、本番にそのまま持ち込むと困る点が2つ見つかりました。AIが自分で気づいて、作り直しています。

ひとつ目は、本体用のタグがサブドメインにも出てしまう点です。本体用の互換プラグインには、本体のGA4とAdSenseのIDが初期値として入っていました。これをサブドメインに入れると、本体のタグがそのサブドメインにも出てしまいます。前回のローカル検証ではIDを空にして試していたので、問題が表に出ていなかったんです。そこで、サブドメイン専用の互換プラグインに分けて、タグは出さないことにしました。

ふたつ目は、本番の設定ファイルを書き換える前提になっていた点です。特定ページを検索結果に載せない指定が、本番のwp-config.phpに定数を書く方式でした。これを、プラグインの中にサイト名とページの対応表を持たせる形に変え、本番の設定ファイルには触らないことにしました。

予行演習のやり方も、本番に寄せた

前回は、テーマやプラグインの状態をローカルで「差し替える」形で試していました。今回は、本番のデータベースのダンプ(MySQL 5.7、本番と同じ文字コード)を復元し、WordPress自身の更新処理で実際に更新する形に改めています。

「こんな方におすすめ」の箇条書きの囲みと導入文が表示された記事画面の一部
図1:investorサイトの記事を、WATABOKORIの簡易版テーマで表示した予行演習の画面(PHP 8.5、ローカル。本番ではありません)。旧テーマの装飾ボックスが、見た目を保って再現されています

uberとinvestorの結果は、こうでした(すべてローカル)。

  • WordPressの更新とデータベースの更新:成功
  • 記事・メタ情報・カテゴリーの内容の照合:変更なし(uber 16項目、investor 62項目)
  • PHP 7.4/8.4/8.5:全ページ表示OK。FatalもWarningも0
  • 本番と同じphp.ini設定での画面エラー:出ない
  • 公開記事の本文の欠落:0(investorのトップ用ページの装飾見出し1か所のみ別扱い)
  • PC・スマホ表示:横スクロール、画像切れ、JSエラー、生のショートコードのいずれも0。目次あり

全URLを比べたら、3つ欠けていた

ここからが、予行演習の本領です。「現行(PHP 7.4+旧テーマ)」と「移行後(PHP 8.5)」を全URLで比べたところ、次の3つが欠けていました。

欠けていたもの対策
記事のAMP用URL(/記事名/amp/)が、移行後は404になっていた通常の記事URLへ301転送する形に修正
OGP(SNSで共有したときのカード表示用の情報)が消えていた互換プラグインで出力。旧テーマの代替画像と、ログイン名が見えていた投稿者情報は出力しない
investorのトップページで、動画つきの紹介ページが消えていた記事一覧の前に、同じ内容を表示する

予行演習をせずに本番へ持ち込んでいたら、この3つは本番で初めて見つかっていたはずです。ここは、リハーサルの価値がそのまま数字に出た場面でした。

前回の検証条件にも、訂正があった

前回の報告では、gadgetサイトのPHP互換の検証を、本番と違う文字コード(utf8)で行っていました。本番と同じutf8mb4で検証し直し、本体・gadget・otokuの3サイトとも、PHP 8.5で合格しています。前回の記載は、この点を訂正しました。

戻せることの確認

机の上に外付けハードディスク、ノートパソコン、スマートフォン、ノートが置かれたデータ保存のイメージ
図2:外付けハードディスクとパソコンのイメージ写真(写真AC素材)。実際の機器の写真ではありません

11月3日に取ったバックアップは、改ざんチェック値(SHA-256)が8ファイルすべて一致しました。そこからuber(4,234ファイル)とinvestor(4,681ファイル)を取り出して戻したところ、ハッシュの不一致は0件。データベースから戻した内容も、移行前と一致しています。戻したサイトは、PHP 7.4で、旧WordPressと旧テーマのまま表示されました。失敗しても、ちゃんと元に戻れることが確認できたわけです。

chucosとstgの扱い

chucosは、公開されているのが初期記事だけで、実質的な下書きは1件。それも未完成の記事でした。念のため別の場所に退避し、サーバーパネルのアクセス制限で公開を止め、ファイルとデータベースは残す案にしました。stgは検証用の複製で、役目は終わっていますが、外からは見えない状態(Basic認証)なので、今回は触らないことにしています。

見落としが、ひとつ残っていた

予行演習の過程で、第三話の本番反映の見落としも見つかりました。本体サイト(www)のOGPが、11月2日の移行で消えたままになっていたんです。現在の本番にはOGPが0件で、旧テーマは出力していたものでした。第三話の本番反映では、この確認が漏れていました。SNSで共有したときのカード表示に影響します。今回の作業範囲外なので、別の工程として提案されています。

この回で解決したのは、uberとinvestorの移行の道具が予行演習に合格したことです。移行後に「変わる点」も明確になりました。サイドバーの旧テーマ専用ウィジェットは表示されなくなり、404ページと検索結果のタイトルがWordPress標準の表記になって、404はnoindexになります。許容範囲と判断されています。

この回の記録

  • 作業日:2026年11月3日の午前。時刻の記録はなく、報告書の更新時刻から昼前(日本時間)と推定しています(概算)
  • 環境:すべてローカル。本番への変更は0件
  • 進捗:12マイルストーンのうち 8/12(M8 旧サイト用の試作・予行演習の合格が加わった)。WordPress最新版に到達したサイトは 3/7(変化なし)、PHPを最新にしたサイトは 0
  • 残った課題:本体サイトのOGPの復旧(別工程)、Windows版PHPによる検証の限界、uber・investor・chucosの管理画面の実画面は未確認(未ログイン)、未暗号化のバックアップが2組このPCだけにある(検証環境は本番完了の7日後に削除、バックアップは30日後に暗号化するか削除するかを本人が選ぶ計画)
  • PHP 8.5.12への切り替えは、uberとinvestorの本番移行が済み、PHP 7.4のまま24時間問題がないことが条件
  • 原稿の執筆時点:2026年11月3日

第一章 AI時代・PHPの乱 第5話

戦果発表

第5話が終わった時点(この数字は固定です)

  1. 達成試作の設計の穴2件(本体タグの漏れ・設定ファイル書換え前提)を作り直し
  2. 達成全URL比較で欠落3件(AMP用URL・OGP・investorトップ動画)を発見・修正(ローカル)
  3. 達成gadgetの検証条件(文字コード)を訂正し再検証
  4. 達成復元リハーサル(SHA-256 8ファイル一致、uber/investor復元でハッシュ不一致0)
  5. 未解決本体wwwのOGP消失(11/2の移行で発生)別工程として提案

全12工程中の達成

66.7%

8/12 工程を達成

12工程の内訳を見る
  1. 達成 現状調査(本番変更なし)(本番は読み取りのみ)
  2. 達成 ローカルの復元・検証環境の構築(ローカル)
  3. 達成 WATABOKORIのローカル検証に合格(PHP 7.4〜8.5・SEO主要項目・AMP転送)(ローカル)
  4. 達成 本体をWordPress 7.1.4へ更新(本番)
  5. 達成 本体をWATABOKORIへ切替(本番)
  6. 達成 本体のGA4・AdSenseの本番確認(本番)
  7. 達成 旧サブドメインの方針決定と本人承認(WATABOKORI統一)(判断)
  8. 達成 旧サブドメイン用の試作・予行演習に合格(ローカル)
  9. これから chucosの公開停止(アクセス制限)(本番)
  10. これから uber・investorをWordPress 7.1.4+WATABOKORI簡易版へ移行(本番)
  11. これから PHP 8.5.12へ本番切替(本番)
  12. これから 切替後1週間のエラーログ監視(本番)

達成率は「全12工程のうち、達成した工程の数」を12で割ったものです。作業時間や難しさによる重みづけはしていません。上の戦果の項目は各話の出来事の記録で、工程の数とは別に数えています。

現在のプロジェクト全体(随時更新)

83.3%(10/12 工程)

2026-11-03 13:17 JST(本番実施記録の判定時点。原稿作成時点で確認できた最新の記録)

次回へ続く――

決行。段階ごとのGOで出城攻め

次回予告

準備は整った。いよいよ出城攻めの決行である。段階0から段階5まで、ひとつずつGOを確かめながらの慎重な進軍。ところが、戦が終わっても、総大将は勝ち鬨を上げなかった。

――第六話『出城攻め、決行――されど刀は納めず』


連載「AI時代・PHPの乱」