先月の7月14日にWordPress 6.6「Dorsey」がリリースされました。デザインセットの追加、サイトエディターで作られたページのプレビュー強化などがありますが、個人的にはプラグインが自動更新されたあとにエラーが発生した際に以前のバージョンに戻ってくれるロールバック機能が一番でした。
このロールバック機能がちゃんと動くのが気になったため、開発環境で問題なく動くのか検証しました。結論から言うとちゃんと動いてくれました。その過程と裏側の動きなどをご紹介します。
目次
WordPress 6.6 で追加された新機能、自動更新のロールバック機能
2024年7月14日、WordPress 6.6がリリースされました。
6.6で追加された内容を見ていると、ブロックテーマの改良が多いイメージですが、ロールバック機能が一際気になりました。
6.6で追加されたロールバック機能とは、プラグインやテーマを自動更新に設定している場合、自動更新が実施されたあとにエラーなどがありウェブサイトが見られなくなってしまった場合、自動で以前利用していたバージョンに戻ってくれるというスグレモノ。
「自動更新したいが、更新後にエラーでサイトにアクセスできない状態になるのが懸念」
こういった理由で自動更新を利用できなかったケースにおいて、今回のロールバック機能があることでもし問題があってエラーになってしまった場合でも、以前のバージョンに戻ってくれるのはありがたいですね。
検証用のプラグインを用意し、自動更新を発生させ確認
「本当にロールバック機能は問題なく動くのか?」が真っ先に感じた懸念でした。そこで開発環境でプラグインを作成し、自動更新を実行させ、更新後のバージョンに致命的エラーを発生させることで、正しくロールバック機能が動作しているのか検証しました。
ロールバック確認の概要
- 開発環境: ローカル(Localで作成)に開発環境を用意。
- プラグイン: 検証用のプラグイン「Custom Test Plugin」を作成し、更新後のバージョンにはFatalエラーを発生させるコードを記述した。
- 自動更新: Githubにリポジトリを作成し、Git updaterを使って自動更新をできる仕組みを構築。(Git Updaterは、GitHub等のリポジトリにホスティングされているプラグインやテーマを自動的に更新するためのWordPressプラグイン。ここでは設定方法は割愛します)
- WP-cronで自動更新を発生させる: WordPressのcronジョブである WP-cron が自動更新を制御しているため、確認するにはWP-cronを操作して実行時間を調整する必要があります。(待てないので)操作にはWP Crontrolプラグインを利用)
検証用プラグインはバージョンを示し、更新後はわざとエラーを発生させる内容
プラグインはバージョン情報を表示するだけの簡単なコードとし、
■Ver 1.0.0
function basic_functionality() {
if (is_admin()) {
echo "This is version 1.0.0";
}
}
add_action('init', 'basic_functionality');
■Ver 1.0.1
自動更新後のバージョンでは意図的にFatalエラーが発生するように設定しました。
function basic_functionality() {
if (is_admin()) {
echo "This is version 1.0.1";
}
// Intentional error to trigger rollback on both admin and frontend
trigger_error("This is a test error for rollback functionality in version 1.0.1.", E_USER_ERROR);
}
add_action('init', 'basic_functionality');
Githubのリポジトリにエラーが発生するVer1.0.1をアップする
このVer 1.0.1をGithubのリポジトリに上げておき、自動更新後にプラグインが置き換わるように設定しました。自動更新の仕組みはGit updaterを利用します。最初、管理画面だけエラーを発生させるコードにしていたのですが、それだとロールバックされなかったため、フロントエンド側でもエラーが発生されるように変更しました。
WP-cronを操作して自動更新がすぐ実行されるように変更する
wp_version_check
フックが実行されることで、WordPressのプラグインやテーマに新しいバージョンがあるかどうか確認されます。このフックは1日2回実行されることとなっていたため、一度実行すると次は12時間後。検証時にはそんな時間当然待てないため、WP crontrolプラグインを利用し、WP-cronの時間をすぐに実行されるように変更しました。
今すぐ実行することも可能ですが、自動更新が有効となるかどうかを確かめる必要があるため、2-3分後に実行するようにWP-cronジョブ実行時間を変更しました。
これで準備は整いました。果たして結果は……?
ロールバック機能が正しく動作し、エラー後以前のプラグインに戻っていることを確認
設定した時間になると自動更新が動作します。直後、デバッグログを確認しました。ちょっと長いですが全体を掲載します。
[07-Aug-2024 07:12:18 UTC] Automatic updates starting...
[07-Aug-2024 07:12:18 UTC] Automatic plugin updates starting...
[07-Aug-2024 07:12:18 UTC] Upgrading plugin 'wordpress6.6-rollback-test'...
[07-Aug-2024 07:12:20 UTC] Plugin 'wordpress6.6-rollback-test' has been upgraded.
[07-Aug-2024 07:12:22 UTC] Scraping home page...
[07-Aug-2024 07:12:22 UTC] PHP Fatal error: This is a test error for rollback functionality in version 1.0.1. in /Users/yutaro/Local Sites/development/app/public/wp-content/plugins/wordpress6.6-rollback-test/custom-plugin.php on line 19
[07-Aug-2024 07:12:22 UTC] PHP Stack trace:
[07-Aug-2024 07:12:22 UTC] PHP 1. {main}() /Users/yutaro/Local Sites/development/app/public/index.php:0
[07-Aug-2024 07:12:22 UTC] PHP 2. require() /Users/yutaro/Local Sites/development/app/public/index.php:17
[07-Aug-2024 07:12:22 UTC] PHP 3. require_once() /Users/yutaro/Local Sites/development/app/public/wp-blog-header.php:13
[07-Aug-2024 07:12:22 UTC] PHP 4. require_once() /Users/yutaro/Local Sites/development/app/public/wp-load.php:50
[07-Aug-2024 07:12:22 UTC] PHP 5. require_once() /Users/yutaro/Local Sites/development/app/public/wp-config.php:120
[07-Aug-2024 07:12:22 UTC] PHP 6. do_action($hook_name = 'init') /Users/yutaro/Local Sites/development/app/public/wp-settings.php:700
[07-Aug-2024 07:12:22 UTC] PHP 7. WP_Hook->do_action($args = [0 => '']) /Users/yutaro/Local Sites/development/app/public/wp-includes/plugin.php:517
[07-Aug-2024 07:12:22 UTC] PHP 8. WP_Hook->apply_filters($value = '', $args = [0 => '']) /Users/yutaro/Local Sites/development/app/public/wp-includes/class-wp-hook.php:348
[07-Aug-2024 07:12:22 UTC] PHP 9. basic_functionality('') /Users/yutaro/Local Sites/development/app/public/wp-includes/class-wp-hook.php:324
[07-Aug-2024 07:12:22 UTC] PHP 10. trigger_error($message = 'This is a test error for rollback functionality in version 1.0.1.', $error_level = 256) /Users/yutaro/Local Sites/development/app/public/wp-content/plugins/wordpress6.6-rollback-test/custom-plugin.php:19
[07-Aug-2024 07:12:22 UTC] '###### wp_scraping_result_start:cd2ebe28c190573c672288b815495d23 ######
{"type":"256","message":"This is a test error for rollback functionality in version 1.0.1.","file":"wp-content\\/plugins\\/wordpress6.6-rollback-test\\/custom-plugin.php","line":"19"}
###### wp_scraping_result_end:cd2ebe28c190573c672288b815495d23 ######
'
[07-Aug-2024 07:12:23 UTC] 「wordpress6.6-rollback-test」の更新で致命的なエラーが発生しました。以前インストールしていたバージョンに復元されました。
[07-Aug-2024 07:12:23 UTC] Automatic plugin updates complete.
[07-Aug-2024 07:12:23 UTC] Automatic theme updates starting...
[07-Aug-2024 07:12:23 UTC] Automatic theme updates complete.
[07-Aug-2024 07:12:23 UTC] Automatic updates complete.
ざっと解説すると、
- 1-4行目: 自動更新がスタートし、対象のプラグインが正しく更新されたことがわかる
- 5行目
Scraping home page...
:更新後のウェブサイトを確認中 - 6行目
PHP Fatal error: This is a test error for rollback functionality in version 1.0.1.
: 致命的エラーが発生 - 22行目: 致命的エラーが発生し、以前のバージョンに復元されたことがわかる
- 23-26行目: 自動更新が終了
というような感じで、正しく自動更新が開始し、エラーが発生するバージョン1.0.1に更新後致命的エラーが発生したため、以前のバージョン1.0.0にロールバックしたことが書かれていました。
メールでも自動更新が失敗したことが通知される
同じタイミングでメールも届いてました。
デバッグログを確認しなくても通知してくれるため安心です。送信先はWordPressの管理者メールアドレスに届きます。
ロールバック成功のため、エラーは発生していない
ブラウザでアクセスし、エラーが発生していないことを確認しました。
- 管理画面: エラー無く、バージョン1.0.0を確認
- フロントエンド: エラー無く、通常の画面なことを確認
よって、WordPress 6.6のロールバック機能は正しく動作することが確認できました!素晴らしい機能です。
手動更新は失敗するため、自動更新の方が安全
エラーが発生するバージョン1.0.1に手動で更新した場合はロールバック機能は動作するのでしょうか?確認しました。
プラグイン画面から手動でバージョン1.0.1に更新します。すると……。
このように、更新失敗した上、エラーとなっているために管理画面もフロントエンド側もアクセスができない状態でした。復旧するには手動でプラグインを修正してあげる必要があります。今回は以前のバージョン1.0.0に手動で戻して解消しました。
自動更新だとロールバックしてくれますが、手動更新はロールバックされず。ということで自動更新の方が安全そうです。
Warningエラーだとロールバックされない
致命的エラーであるFatalエラーだとロールバック機能が正しく動作していることを確認しました。一方、エラーレベルの下がる Warningエラーだとロールバックされるのでしょうか?これも確認しました。
結論としてロールバックされず、新しいバージョンとなります。デバッグログにはWarningエラーは記録されるものの、ウェブサイトにアクセスはできているためロールバックしないということなんでしょう。
WordPress 6.6の新機能、ロールバック機能を使ってより安全にWordPressを管理する
以上、ロールバック機能についての動作検証でした。実際には、他のプラグインとの連携やテーマとの影響等でエラーが発生したりするため、一概に今回の検証結果通りにはいかないケースもあると思いますが、プラグイン単独でエラーとなる場合は正しくロールバックして以前の状態に復元してくれることが確認できました。
「古いWordPressを使っているからロールバック機能を使えない……」
「WordPress6.6にしたいが、バージョンアップすると不具合が発生する」
という場合は、WordPressをバージョンアップできるよう、テーマを修正したり、利用プラグインを見直すことが必要です。
弊社ではWordPressの構築・保守を通して、今まで多くのWordPressを取り扱ってきました。将来的にも安心して使っていけるようにメンテナンスして利用することが可能ですので、お困りの際はお気軽にご相談ください。
コメントを残す