WordPressのメンテナンスモードをシンプルすぎるくらいシンプルにしたPlugin
WordPressのメンテナンスモード、既存プラグインが多機能すぎたので自作した話

WordPressでメンテナンスモードをかけたいとき、定番のプラグインはいくつもあります。
実際、有名どころを入れればだいたいのことはできます。
ただ、使ってみると毎回ちょっと思うんですよね。
「そこまで要るか?」と。
背景画像、ロゴ、カウントダウン、SNSリンク、メール登録、Coming Soonとの切り替え、デザインテーマの選択……挙げ句の果ては有料化ですよ?
便利なのは分かるんですが、メンテナンスモードにそこまで求めていないことも多いです。
やりたいことはかなり単純で、
「いま作業中なので一時的にサイトを閉じます」
と表示したいだけなんですよね。
余計な設定が多いと、たまにしか使わない機能ほど逆に邪魔になります。
設定画面も散らかるし、見なくていい項目まで目に入る。
それなら最初から、本当に必要なものだけのプラグインを作ったほうが早いと思って、自分で作りました。
その名も Simple Maintenance Mode です。
【作ったもの】
名前のとおり、かなりシンプルなメンテナンスモード用プラグインです。

ボタンを押すだけで上記画面に切り替わります。(管理者はアクセス可能)
ファイル構成はこれだけです。
simple-maintenance-mode/
└── simple-maintenance-mode.php
1ファイルだけです。
includes も assets もありません。
入れた機能も、必要最低限に絞っています。
・管理画面でON/OFFを切り替えられる
・開始日時と終了日時を任意で設定できる
・表示メッセージを変更できる
・終了日時を入れた場合は復旧予定を表示できる
・管理者は通常どおりサイトを見られる
・HTTP 503 を返す
以上です。
カウントダウンも、ロゴ設定も、背景画像もありません。
本当にそれだけです。
【なぜここまで削ったのか】
メンテナンスモードって、そもそも一時的なものです。
数時間から半日、長くても数日。
その短い期間のために、やたら凝った設定画面や演出を用意する必要はあまりないと思っています。
むしろ大事なのは、次の3つです。
・すぐONにできること
・管理者はそのまま作業できること
・訪問者と検索エンジンに正しい状態を返せること
この3つさえ押さえていれば、実用上はほとんど困りません。
だから逆に、それ以外はかなり意識して削りました。
【使い方】
使い方もかなり単純です。
まず、simple-maintenance-mode フォルダを wp-content/plugins/ に入れて、管理画面から有効化します。
ここでひとつ安心なのが、有効化しただけではメンテナンスモードは始まらないことです。
有効化した瞬間にサイトが閉じる、ということはありません。
有効化すると、管理画面の左メニューに「メンテナンスモード」が追加されます。
そこを開くと、現在の状態が分かるシンプルな設定画面が出ます。
あとは、スイッチをONにして「設定を保存」を押すだけです。
これでメンテナンスモード開始です。
画面上では状態表示もその場で切り替わるようにしてあるので、
「ちゃんとONになったのか分かりにくい」
という感じもありません。
・表示の色が変わる
・OFF表示がON表示に変わる
・説明文も状態に合わせて切り替わる
このくらい分かりやすくしておけば、十分だと思っています。
【訪問者にはどう見えるのか】
メンテナンス中にアクセスした一般訪問者には、非常にシンプルな画面だけを表示します。
表示する内容は以下です。
・サイト名
・「メンテナンス中」の見出し
・設定したメッセージ
・終了日時を設定している場合は復旧予定
デザインはかなり素朴です。
白背景、中央寄せ、テキスト中心。
装飾はほぼありません。
でも、こういう画面って妙に飾るより、必要なことだけはっきり出ているほうがむしろ安心感があります。
変に演出されたメンテナンスページより、よほど自然です。
【スケジュール設定について】
このプラグインでは、開始日時と終了日時を任意で設定できます。
ただし、これは必須ではありません。
基本は、今から作業するからON、終わったらOFF、で十分です。
日時設定は使いたい人だけ使えばいい、という位置づけにしています。
動作パターンはこうです。
・日時を何も設定しない
ONにした瞬間に開始し、OFFにするまで継続
・開始日時だけ設定
指定した時刻から開始し、OFFにするまで継続
・終了日時だけ設定
すぐ開始し、その時刻で自動終了
・開始日時と終了日時の両方を設定
その期間だけメンテナンスモードになる
ほとんどの人は、日時なしで使うと思います。
だから設定画面でも、この部分はあくまで補助的な扱いにしています。
【管理者は通常どおり閲覧できる】
メンテナンスモードで意外と大事なのがここです。
管理者まで締め出してしまうと、自分でONにしたのに自分で確認できない、ということが起きます。
それだとかなり不便です。
このプラグインでは、manage_options 権限を持つユーザーはメンテナンス中でも通常どおりサイトを閲覧できます。
つまり、自分は表側を確認しながら作業できます。
一般訪問者だけにメンテナンス画面を出す形です。
さらに、メンテナンス中は管理バーに赤い通知も出るようにしています。
うっかりONのまま放置する事故も減らせます。
【HTTP 503 を返すようにした理由】
これは見た目以上に重要な部分です。
メンテナンス画面を出すだけなら、HTMLを表示するだけでも動きます。
でも、それだとHTTPステータスが200のままになってしまうことがあります。
200のままだと、検索エンジンから見ると
「普通のページがこの内容で表示されている」
と判断される可能性があります。
それではまずいので、このプラグインではメンテナンス表示時に HTTP 503 を返します。
503 は「一時的に利用できない」という意味なので、メンテナンス用途に合っています。
検索エンジンにも、一時的な停止状態であることを正しく伝えられます。
終了日時を設定している場合は Retry-After も返すので、
「このくらいで再訪してくれればいい」
という目安も伝えられます。
地味ですが、このあたりはちゃんとしておいたほうが安心です。
【無効化したら自動でOFFになる】
これも安全策として入れています。
プラグインを無効化したのに、メンテナンス状態だけ残るのは気持ち悪いですし、運用上も事故の原因になります。
なので、このプラグインは無効化時に自動でOFFになるようにしています。
当たり前といえば当たり前なんですが、こういうところほど雑にしないほうがいいです。
【あえて入れなかった機能】
今回、意図的に入れなかったものもあります。
・カウントダウンタイマー
復旧予定が表示できれば十分です。秒単位の演出までは不要です。
・背景画像やロゴの設定
メンテナンス画面は、見た目を凝る場所ではないと思っています。
・メール通知や購読フォーム
そもそも一時停止の管理を自分でできる人向けです。
・Coming Soon モード
メンテナンスと公開前ページは目的が別です。分けたほうがいいです。
・会員ごとの細かい表示制御
管理者か、それ以外か、で十分です。
・アクセス解析
メンテ中アクセスを細かく分析したい場面があまり思い浮かびません。
・多言語対応
表示メッセージを書き換えれば済む話なので、そこまで持たせていません。
・外部ライブラリ
jQueryも含めて不要です。WordPress標準機能とバニラJSだけで完結させています。
このへんを削るだけで、プラグイン全体はかなり軽くなりますし、コードも読みやすくなります。
【実装まわりのメモ】
中身はできるだけWordPress標準の作法に沿って実装しています。
設定値の保存は Options API を使い、
フォーム送信では nonce チェック、
権限は current_user_can(‘manage_options’) で判定しています。
入力値は sanitize_text_field や sanitize_textarea_field で処理し、
出力は esc_html、esc_attr、esc_textarea でエスケープしています。
日時については WordPress 側のタイムゾーン設定を尊重しています。
current_datetime() と wp_timezone() を使っているので、管理画面の「設定 → 一般」で設定されているタイムゾーン基準で動きます。
表示タイミングは template_redirect を使っています。
ただし、管理画面、AJAX、Cron、REST API は除外しているので、内部処理まで止めてしまうことはありません。
必要なところだけ止めて、必要なところは動かす。
このくらいの設計がちょうどいいと思っています。
【結局、こういうのでいい】
メンテナンスモードのプラグインって、探すと本当にいろいろあります。
多機能なものは多機能なもので価値がありますし、用途によってはそちらのほうが向いていることもあると思います。
ただ、
「いま少し止めたいだけ」
「訪問者に一時停止中と伝えたいだけ」
という場面なら、そこまで大げさなものは要りません。
有効化して、
設定画面を開いて、
ONにして保存する。
やることは本当にこれだけです。
終わったらOFFにして保存するだけ。
コードも1ファイルなので、あとから自分で触るのも簡単です。
必要最低限で動くメンテナンスモードがほしい人には、こういう方向のほうがむしろ使いやすいと思います。
既存プラグインがちょっと重たい、設定が多すぎて面倒、と感じていた人には、ちょうどいい選択肢になるはずです。