skills/wordpress-maintenance/references/ROLLBACK.md
Workspace snapshot · 09/04 13:33
戻し方(ROLLBACK)
更新する前にこのファイルを読み、どの手段で戻せるかを確定させる。 戻す手段が確保できていない対象は、更新しない。
前提: plugins-before.csv / themes-before.csv / core-version.txt / db-before-update.sql が
~/wp-maint/<日付>/ に保存されていること(SKILL.md Step 2・Step 4)。
目次
- プラグイン / 2. テーマ / 3. コア / 4. DB / 5. 復旧後 / 戻せないケース
判断: まず「何が壊れたか」で戻す範囲を決める
| 症状 | 戻す範囲 |
|---|---|
| 特定の機能だけ壊れた(フォーム、カート、ビルダー) | そのプラグイン1つだけ |
| 更新直後から真っ白 / 500 | 直前の束すべて。切り分けは戻してから |
| 管理画面に入れない | プラグイン全停止 → 1つずつ有効化 |
| 表示は無事だがデータが消えた(ウィジェット、設定) | DBを戻す(プラグインを戻しても直らない) |
DBを戻すと、更新後に投稿・注文・問い合わせが入っていた場合それも消える。 DBリストアの前に、必ず「更新後に新しいデータが入っていないか」を確認し、利用者へ影響を提示する。
1. プラグインを1つ前のバージョンへ戻す
plugins-before.csv から、そのプラグインの更新前バージョンを確認する。
grep '^<slug>,' ~/wp-maint/<日付>/plugins-before.csv
wordpress.org で配布されているもの
wp plugin install <slug> --version=<更新前のバージョン> --force
wp plugin activate <slug>
--force は既存を上書きするために必要。--version を省くと最新版が入り、戻したことにならない。
戻した直後に、そのプラグインが担う機能を実際に動かして確認する(フォームなら送信、カートならテスト注文)。
有料 / 独自配布のもの
wp plugin install --version= は使えない。次のどちらか。
- 更新前に退避したディレクトリを戻す(SKILL.md Step 4 で
cp -aした場合)wp plugin deactivate <slug> mv wp-content/plugins/<slug> ~/wp-maint/<日付>/<slug>-failed-$(date +%H%M%S) cp -a ~/wp-maint/<日付>/plugins-backup-<slug> wp-content/plugins/<slug> wp plugin activate <slug> - 配布元から旧バージョンのzipを取得して入れ直す
配布元が旧バージョンを提供していない場合、この手段は存在しない。 だからSKILL.md Step 4で、更新前のディレクトリ退避を必須にしている。wp plugin install /path/to/<slug>-<旧バージョン>.zip --force
WP-CLIが無い場合
- 管理画面 > プラグイン で対象を停止する。
- wordpress.org のプラグインページ > 「高度な表示」から旧バージョンのzipをダウンロードする。
- 管理画面 > プラグイン > 新規追加 > プラグインのアップロード でzipを入れ、置き換える。
- 有効化して、担当機能を実際に動かす。
FTP/ファイルマネージャが使える場合は、wp-content/plugins/<slug> を退避済みのものへ入れ替える。
入れ替え前に、現在のディレクトリも別名で残す(戻した結果さらに壊れたときのため)。
2. テーマを戻す
wp theme install <slug> --version=<更新前のバージョン> --force
wp theme activate <slug>
子テーマを使っている場合、親テーマを戻しても子テーマの改変は残る。 逆に、子テーマを使わず親テーマを直接改変していた場合、更新した時点で改変は消えている。 その場合はテーマファイルのバックアップからの復元が必要で、無ければ復旧できない。 更新前にこの点を確認する。
3. コアを戻す
wp core update --version=<更新前のバージョン> --force
wp core update-db
メジャーバージョンを戻すのはリスクが高い。 新しいコアで動作したDBスキーマを古いコアへ戻すため、
update-db で完全には戻らないことがある。
コア更新で壊れた場合は、コアだけでなくDBもセットで戻すほうが安全な場合が多い。
4. DBを戻す
最終手段。実行前に必ず影響を提示して同意を得る。
# 現状をまず退避(戻した結果が悪化したときのため)
wp db export ~/wp-maint/<日付>/db-before-rollback.sql
# 戻す
wp db import ~/wp-maint/<日付>/db-before-update.sql
実行前に必ず確認すること:
- 更新後に新しい投稿・注文・問い合わせ・会員登録が入っていないか。入っていれば、それらは消える。
- 消えるデータがある場合、先にその範囲を書き出して利用者へ提示する。
日時は実際の更新開始時刻(UTC)へ置き換える。WooCommerceのHPOSなど、投稿テーブル以外へ保存される 業務データはこのSQLでは拾えないため、各サービスの管理画面・専用テーブルでも確認する。PREFIX=$(wp db prefix) wp db query "SELECT post_type, COUNT(*) AS count FROM ${PREFIX}posts WHERE post_date_gmt > '2026-08-26 08:00:00' GROUP BY post_type;" - WooCommerce等の受注データがある場合、DBリストアは原則行わない。 個別に直す。
WP-CLIが無い場合
phpMyAdmin のインポート、または事業者のバックアップ復元機能を使う。 インポート前に現在のDBをエクスポートして残す。 上書きは取り消せない。
5. 戻したあとに必ずやること
- 戻した対象と、戻した先のバージョンを記録へ書く。
- なぜ壊れたかを、戻したあとに調べる。 戻す前の調査でサイトを止め続けない。
- 同じ更新を再度当てる前に、ステージングで再現させる。 ステージングが無いなら、その更新は保留として利用者へ理由とともに伝える。
- 自動更新が有効だと、戻したものが再び自動で上がる。 該当プラグインの自動更新を止める。
これを忘れると、翌日同じ事故が再発する。wp plugin auto-updates disable <slug>
戻せないケース(先に知っておく)
- 更新前のバージョン記録が無い → どのバージョンへ戻すか分からない。 Step 2を省略した結果。
- 独自配布プラグインで、退避もzipも無い → 配布元へ問い合わせる以外の手段が無い。
- 親テーマを直接改変していた → 改変内容のバックアップが無ければ復旧できない。
- DBバックアップが壊れている / 空 → Step 4の確認を省略した結果。
このリストは、更新前に潰せるものばかりである。 だから順序を固定している。