QMACサイトの再編とWordPress化

朝は甲斐犬のキクを連れて、元宇品の森に・・かなり涼しくなった

4. 構築過程で発見・対処した問題

8件すべて、実際に動かして判明した内容

  • .htpasswd が公開ルート直下に置かれ、.htaccess は全行コメントアウト(旧サイトの重大な設定不備)
  • 管理画面でカスタムフィールドが編集できない(supports に custom-fields 欠落)
  • 中身のない年度18本もリンク表示され、空ページへ飛ぶ状態
  • 年度アーカイブが機能せず、ブログ形式・投稿日で表示
  • 一括投入で画像圧縮が効かない経路があり、原本1.71MBが残る
  • 静的アーカイブが全ページ文字化け(HTTPヘッダのcharsetがmetaより優先)
  • マニュアルの開催日入力手順が実際の画面と相違(手順どおりに操作すると失敗する)
  • 空の画像ブロック20個がすべて検証エラー

5. 旧サイト由来の誤記(原本どおり投入・訂正待ち)

行事名が空 2件 旧サイトが行事名自体をPDFリンクにしていた
日付の年が1年ずれ 3件 2008年度、曜日は正しく年だけ誤り
曜日が合わない4件 2020〜2023年度
表記の重複誤記 3件 「先進企業視察会視察会」
名簿の疑わしい記載 6件 「幹事→監事」「㈱ダイクレ㈱」等

6. 事務局向けマニュアル

780行・9章+付録2

対象を事務局に絞り、管理者向けの内容とは分けた・・・マニュアルは公開サイト上の固定ページとして設置している・・・更新経路は「ページ上で直接編集」に一本化・・・ 変換スクリプトとページ編集の二経路があると、どちらかの修正が失われる・・・スクリプトは移行用の一度きりのものとして明記のうえ保管

1. 移行前の状態と課題

構成 frameset ベースの静的HTML
規模 773ファイル / 2.74GB
制作 Dreamweaverで約15年間
スマホ対応 なし

2. 資産の棚卸し

破棄したもの

運営委員会PDF 1,534本 / 206MB パスワード運用ごと廃止
死蔵HTML 654本 トップから到達不能な滞留分
制作元データ(.mif / .pef)207MB サイト運用に不要

移行したもの

行事 192件(2008〜2025年度・18年分)
添付ファイル 368件 / 84MB(写真138・PDF230)
固定ページ 8本(協会案内5・名簿2・マニュアル1)
静的アーカイブ 16本(1992〜2007年度)

3. 設計の要点

3-1. データと見た目の分離
親テーマtwentytwentyfive(WordPress公式) 本体と同時に更新される基盤
子テーマqmac(新規作成) 配色・レイアウト・動的ブロック
プラグインqmac-core(新規作成) 投稿タイプ・分類・管理画面整理
3-2. ブロックテーマの子テーマ方式を採用

当初はクラシックテーマを検討したが撤回した・・・クラシックテーマはWordPress本体の更新に追従しにくく、ブロックエディタで書かれた投稿との整合が崩れやすい・・子テーマ方式なら親テーマが本体と一緒に更新され、独自の差分だけを自前で保守すればよい。保守性と自由度が両立する・・・・親テーマが公式テーマである点も重要で、コアチームが保守しており、第三者テーマのように開発停止で行き詰まるリスクが小さい

3-3. 事務局が壊せる箇所を構造的に減らした

「マニュアルに書いてあるから大丈夫」ではなく、そもそも触れないようにする方針

権限 編集者権限(外観・プラグイン・ツールに到達不可)
左メニュー 5項目に限定
ブロック 102種を非表示にし、17種のみ許可
パターン 挿入可能なパターンを0本に
テンプレート 編集欄を非表示にしたうえ、保存自体を拒否
3-4. 年度アーカイブの自動化

現行運用で最も手間だった作業を自動化・・・開催日を入力するだけで、年度タームの作成・付与・サイドパネルへの反映がすべて自動で行われる・・事務局の手作業はゼロ・・・・年度末の切替も、状態を「予定 → 終了」に変えるボタン1つ(取り消し可)に集約

更新の担い手事務局
行事の追加管理画面で入力
年度末の切替ボタンで切り替え
過去年度リンク完全自動
写真の掲載ドラッグで追加(自動圧縮)
スマホ対応あり

WordPress化したサイトのXserverへのデプロイ

1. 計画変更を要した前提の齟齬

1-1. qmac.jp を協会アカウントに追加できない

「既に設定されています」というエラーで追加不可・・・同一ドメインを2つのXserverアカウントに同時設定することはできないため、旧サイトが稼働している限り新アカウントに追加できない
影響: 「新旧を並行稼働させ、DNSを向け替えるだけの無停止移行」という当初方式が使えなくなった・・・切替は「旧アカウントから削除 → 新アカウントに追加」となり、1〜3時間の停止が発生する。

1-2. 初期ドメインにWordPressを設置できない

協会アカウントの初期ドメイン(xs815766.xsrv.jp)はWordPress簡単インストールの対象外で、サブドメインも作成できなかった。
対処: 検証専用の独自ドメイン(qmac.world)を新規取得し、これを構築・検証環境とした

  • 事務局がリモートで実物に触れる(本番切替前に問題を出せる)
  • SSLが即座に有効化でき、本番と同条件で検証できる
  • 移行完了後も、WordPress本体のメジャー更新を本番に当てる前の試験環境として使える

2. 環境の事前確認で潰した地雷

項目ローカル Xserver 判定・対処
WordPress7.1 7.1 一致
テーブル接頭辞 wp_ wp_ 一致(不一致なら投入直後に白画面)
DB照合順序utf8mb4_unicode_520_ci 既定 general_ci ダンプのテーブル定義が優先。対処不要
MariaDB10.11.11 10.11.18 互換
PHP(Web) 8.4.16 8.3.33 問題なし
PHP(wp-cli)8.0.30 要対処

★ wp-cli のPHPバージョン問題
サイトは8.3.33で動くが、/usr/bin/wpは8.0.30で起動していた。wp search-replaceは内部でWordPressとプラグインを読み込むため、qmac-core に8.1以降の構文があれば置換の途中で落ち、DBが中途半端に書き換わる・・・・/usr/bin/php8.3が存在したため、これを明示して実行することで解決
bash
/usr/bin/php8.3 /usr/bin/wp
エイリアス登録は避けた。 一度、存在しないパスをエイリアスに書いてしまい、次回ログイン時に wpが全滅する状態を作りかけた・・・以後は毎回フルパスで実行する方式に統一

3.実行前の防御

破壊的操作の前に、戻せる状態を作成

対策 内容
DBバックアップ backup_before_migration_20260909.sql
ファイルバックアップ wp-content_before_migration.tar.gz(20.7MB)
設定ファイル退避 .htaccess.orig/wp-config.php.orig
検索エンジン除け blog_public = 0
アクセス遮断 Basic認証(実在ドメインのため必須)
キャッシュ Xアクセラレータを無効化

blog_public = 0 は「クロールしないでください」という要請にすぎず強制力がない・・実際の防御はBasic認証だけである点を作業中も繰り返し確認した・・・・Xアクセラレータの無効化は、DB入替後も古いページが表示され続けて「移設が失敗した」と誤判断することを防ぐため

4. 実行手順と要点

4-1. 転送(5本のアーカイブ)
ファイル サイズ 内容
qmac_wp_20260909.sql 1.1MBDBダンプ(12テーブル)
themes.zip 8.0MB qmac + twentytwentyfive
plugins.zip 37KB qmac-core
languages.zip 1.4MB 日本語翻訳
uploads.zip 108MB 1,020ファイル

md5を5本すべて照合してから展開。転送破損を後段で発見する事態を避けた・・・未使用テーマ3本(twentytwentytwo / three / four)は除外・・容量削減(22MB→8MB)より、更新通知・脆弱性の対象を減らす目的が大きい。事務局に渡すサイトに不要物を持ち込まない方針を通した

4-2. ★ db resetを db cleanに変更(重要な判断)

当初指示していた wp db resetは DROP DATABASE → CREATE DATABASE を実行する・・共有サーバではDBユーザに CREATE DATABASE権限がない場合があり、DBを削除した直後に再作成で失敗すると復旧が困難になる・・・wp db clean はDB自体を残してテーブルのみ削除するため、この事故が起こり得ない・・実行前に差し替えた

4-3. ★ URL置換件数の事前算出

http://qmac.testhttps://qmac.world の置換にあたり、実行前にDBを直接集計して期待値を算出

  • wp_options.option_value  2件
  • wp_posts.post_content  12件
  • wp_posts.guid  625件
  • wp_users.user_url  1件
  • 合計 640件

ダンプ内の文字列出現「箇所」数は648だが、wp search-replaceが報告するのは「レコード×カラム数」であるため、期待値は648ではなく640となる。この差を事前に把握していなければ、正常な結果を異常と誤判断していた・・・–dry-run の結果は 640・内訳も4カラムすべて予測と完全一致・・想定外のテーブルへの波及もゼロ・・この一致を確認したうえで本実行を承認した・・期待値を持たない検証は検証ではない・・出てきた数字が正しいかどうかを判断できないからである

4-4. 文字化け対策の予防的適用

ローカル構築時に静的アーカイブが文字化けした既知の問題(HTTPヘッダのcharsetがmetaより優先される)に対し、移設時点で予防措置を入れた
wp-content/uploads/qmac-archive/.htaccess
AddDefaultCharset UTF-8
結果、39本すべてで 実ファイル・meta・HTTPヘッダの三者がUTF-8で一致。再発なし

4-5. .htaccessの保全

wp rewrite flush –hard は .htaccess を書き換える・・ここにBasic認証4行が入っているため、消えれば検証サイトが公開状態になる・・・結果的にwp-cliが書き込みをスキップし、md5・mtimeとも不変だった・・flush前後と .orig の3点でmd5を照合して確認

5.検証結果

区分 本数 ステータス Content-Type PHPエラー
トップページ1200charset=UTF-8なし
年度アーカイブ20200charset=UTF-8なし
固定ページ8200charset=UTF-8なし
event投稿(抽出)5200charset=UTF-8なし
静的アーカイブ39200charset=UTF-8なし
/wp-login.php1200charset=UTF-8なし
合計74全件2000件

ステータス200だけでは不十分なため、全74本の本文を Fatal error / Warning: / Notice: / Parse error / Deprecated: で走査し、全件ヒットなしを確認した・・・PHPエラーが出ていても200が返る場合があるためである・・・あわせてトップページに行事タイトルが実際に描画されていることを確認し、テーマとプラグインが機能していることを裏づけた・・Basic認証はサーバ内・外部の双方から401を確認・・・検証URLはDBから自動抽出して組み立てた。手書きのリストでは実在しないURLを検証したり、実在するのに漏れたりする・・実際、想定18本の年度アーカイブは20本、想定12本の静的アーカイブは39本存在した(後者は「サイドパネルからリンクされている本数」と「実ファイル数」を混同していたもの)

6.資格情報の取り扱い

Basic認証のパスワードは、コマンドライン・チャット・ログのいずれにも残さない方式を採った・・・サーバ上に ~/.netrc(chmod 600)を作成し、curl –netrc で参照・・・ファイルの内容は表示・記録しない・・・検証完了後に削除。コマンドラインに直接書くと、シェル履歴とプロセス一覧の双方に平文で残る・・共有サーバでは特に避けるべき経路

7.現況と残作業

7-1. 完了
項目 状態
検証環境 https://qmac.world稼働(Basic認証・検索エンジン非公開)
データ 行事200件・添付382件・固定ページ8本
ファイル uploads 1,020ファイル / 123MB
動作確認 74URL全件200・PHPエラー0件・目視確認済
ロールバック資材 DB・wp-content とも保持
7-2. 残作業
  • 目視確認で挙がった修正・・・ TAM
  • 2旧サイト由来の誤記18件の訂正・・・ TAM(要事実確認)
  • マニュアルへの画像貼り付け20点・・・ TAM
  • 編集者アカウントでの動作確認・・・ TAM
  • 事務局による確認・・・ 事務局
  • qmac.jp への切替・・・TAM

以降のコンテンツ修正はすべてqmac.world側で行う。 ローカル環境は参照専用とし、二重管理を避ける

7-3. ★ 本番切替時の最重要事項

旧アカウントから qmac.jp を削除すると、DNSゾーン(MXレコードを含む)が消える・・・協会のメールはXserver外で運用しているため、新アカウントに追加した際にXserverの既定値でゾーンが再作成されると、MXがXserverを向き、メールが届かなくなる
切替手順の要点:

  • 削除前に旧アカウントのDNSレコードを全項目記録(A / MX / TXT(SPF) / CNAME)
  • 旧サイト一式をバックアップ(切り戻し用)
  • 旧アカウントから qmac.jp を削除 ← ここから停止
  • 協会アカウントに追加
  • 最優先でMXレコードを元の値に再登録
  • SSL発行 → サイト移設・URL置換
  • 表示確認 → テストメール送受信
  • 検索エンジン非公開の解除・Basic認証の解除
  • サイトの表示より先にメールを復旧する順序を守る。所要1〜3時間を見込み、事務局への事前通知のうえ週末等に実施する

ブックマークする パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

  • 2026年9月
     123456
    78910111213
    14151617181920
    21222324252627
    282930