もうすぐリリースされるWordPress 5.2だが、新しくリカバリーモードが採用されるようだ。以前お伝えした「死のホワイトスクリーン回避」だが、追記にあるように、5.1での採用を見送っていた。
その理由としては、セキュリティに対する懸念が挙げられる。以前の提案では、「プラグインがエラーを起こしたら一時的にプラグインをオフにする」というものだったが、リリースも間近という頃になり「悪意のある攻撃によって任意のプラグインを停止させることができてしまうのでは」という懸念が持ち上がった。このため、5.1での実装を見送り、新たな「リカバリーモード」を採用することになったという次第である。
リカバリーモードとは?
ブログの説明によると、WordPressが致命的なエラーを起こした場合……
- ユーザーは「このサイトは現在技術的な問題が発生しています」という画面を見ることになる。twitterのクジラ画面のようなもの。
- 管理者に対し、エラーが起きた旨を報告するメールが送信される。
- メールにはシークレットリンクが添付されており、そのリンクから「リカバリーモード」でWordPressの管理画面に入ることができる。そのユーザーに対してだけ、問題のあるプラグインなりテーマなりが停止されている。
- サイトの修正なり、問題の報告なりをした上で、プラグイン・テーマを停止するか使用するかを決定する。
開発者向け情報
- リカバリーモードを判別する関数
wp_is_recovery_mode
が追加されたので、プラグイン・テーマからリカバリーモードでの挙動を変更することができる。サポートページ向けのリンクを出したり。 - リカバリーモードのオン・オフも
WP_RECOVERY_MODE_SESSION_ID
などで上書きできるようだ。ただし、このロジックでミスるとずっとリカバリーモードになってしまうかも……。 - 普通のユーザーが見るエラー画面はドロップイン
php-error.php
でカスタマイズできるらしい。db-error.php
などと同じ仕組みだ。 - 同じくドロップイン
fatal-error-handler.php
によって致命的なエラーが発生した時の挙動をハンドリングできる。 - このリカバリーモード(致命的エラーをキャッチし、ユーザーにエラーを表示しつつ管理者に連絡する)をオフにすることもできる。
上記の通り、できることはけっこう多そうだ。エラーが発生したときの対応によって二次被害が防げるので、活用の仕方としては色々あるだろう。幸い、いまはFacebookやtwitterなどのSNSでマルチチャネル配信をしているWebサイトが多いと思うので、そちらにユーザーを誘導するのが賢いやり方ではないだろうか。
なんにせよ、5.1で楽しみにされていた機能が形を変えて5.2で実装されることになった。リリースは4/30を予定している。