Drupalでメンテナンスモードを使用する方法


Drupal本体のアップデートや、ソースコードのアップロードを行っているタイミングでウェブサイトにアクセスがあると、一時的に表示が崩れた状態で見えてしまう可能性があり、ユーザーが混乱します。
他にも表示上の不都合があってはいけないので、アップデートなどを行う場合は一時的に「メンテナンスモード」と呼ばれるモードに切り替えて、ユーザーがサイトにアクセスできないようにしてからアップデートを行います。
今回の記事では、このメンテナンスモードの使い方や、表示についてまとめます。
ウェブサイトの運営をする上で重要な機能になってくるので、ぜひ最後までご覧ください。
メンテナンスモードの設定場所
メンテナンスモードに切り替えるためには、Drupal管理画面メニューの[環境設定]→[メンテナンスモード]を選択します。
メンテナンスモードの設定画面に移動するので、ここで「サイトをメンテナンスモードにする」にチェックを入れて「構成を保存」ボタンをクリックしキャッシュをクリアすると切り替わります。
このとき、「メンテナンスモードの際に表示するメッセージ」に入力されてある文言が、メンテナンス画面に表示されます。
デフォルトだと下記のように入力されてあり、「@site」にはウェブサイトの名前が入ります(ウェブサイトの名前は[環境設定]→[サイトの基本設定]内の「サイト名」に入力されている内容です)。
@site は現在メンテナンス中です。まもなく再開しますので、しばらくお待ちください。
デフォルトの文章でも問題ありませんが、「まもなく再開しますので」だと何時にメンテナンスが終わるのか分かりません。
目安として「メンテナンスは○○時から○○時を予定しています」のように予定時間を入れておくと親切です。
メンテナンスモード中はログアウトしないように注意
メンテナンスモード時は、ログインしていないユーザーにメンテナンス画面が表示されてしまいます。
そのため、管理画面からログアウトしてしまうとメンテナンス画面が表示され続け、メンテナンスモードを解除できなくなってしまいます。
後ほど紹介する他の切り替え方法を使えばメンテナンスモードは解除できますが、管理画面へのログインのためだけに一度メンテナンスモードを解除する必要が出てくるので注意しましょう。
もし、本当にメンテナンスモードに切り替わっているのか確認したい場合は、ブラウザのシークレットモードで確認するか、もしくはログインしていない別のブラウザで確認します。
その他の切り替え方法
管理画面から切り替える以外にも、メンテナンスモードを切り替える方法はいくつかあります。
ただし、管理画面から操作する方が分かりやすいですし、操作を間違える可能性も低いため、基本的には管理画面から操作するようにしましょう。
メンテナンスモード中にログアウトしてしまったなど、どうしても他の方法で変更しなくてはいけない場合の選択肢として参考にしてください。
Drushコマンドで切り替える方法
メンテナンスモードの切り替えはDrushからでも可能です。
Drushのインストール方法や概要については過去に記事にしているので、そちらをご覧ください。
参考:ターミナルからDrupalを操作する「Drush」コマンドのインストール方法や基本的な使い方 | モチヤ株式会社
「drush sset」というコマンドがあるので、それで「maintenance_mode」を「1」にすると有効、「0」にすると無効になります。
また、切り替えたあとは「drush cr」コマンドでキャッシュをクリアします。
# Drushコマンドでメンテナンスモードに切り替え
drush sset system.maintenance_mode 1
drush cr
# Drushコマンドでメンテナンスモードを解除
drush sset system.maintenance_mode 0
drush cr
Landoを使用している場合
ローカル開発環境の構築にLandoを使用している場合は、Drushの使用時に「lando」を付ける必要があります。
# LandoのDrushコマンドでメンテナンスモードに切り替え
lando drush sset system.maintenance_mode 1
lando drush cr
# LandoのDrushコマンドでメンテナンスモードを解除
lando drush sset system.maintenance_mode 0
lando drush cr
メンテナンスモードは本番環境で使用するものなので、関係ないかもしれません。
しかし、試しにローカル開発環境で実行してみることもありそうなので、念のためLandoを使っている人は頭の片隅に入れておきましょう。
古いバージョンのDrushの場合
Drupal 8以降のバージョンのDrushでは「drush sset(State Setの略)」コマンドを使って切り替えます。
しかし、Drupal 7などに対応している古いバージョンのDrushだと「drush vset (Variable Setの略)」コマンドを使用します。
# 古いバージョンのDrushコマンドでメンテナンスモードに切り替え
drush vset maintenance_mode 1
# 古いバージョンのDrushコマンドでメンテナンスモードを解除
drush vset maintenance_mode 0
古い記事を見ると「vset」が紹介されていることもあるので、Drushのコマンドはバージョンによって変わる場合があると覚えておきましょう。
データベースを更新して切り替える方法
データベースを直接更新する形でも、メンテナンスモードは切り替えられます。
データベースへのアクセス
まず、データベース(MySQL)にアクセスするために下記コマンドを実行します。
mysql --host=127.0.0.1 --port 3306 --user=root
Landoを使用している場合は「lando mysql」コマンドでアクセスできます。
lando mysql
アクセスした後は、下記のSQLコマンドでデータベースを選択します。
USE データベース名(drupal10など);
「ホスト名」「ユーザー名」「パスワード」や「データベース名」などの情報は、Drupalの環境構築時に設定した値で「/web/sites/default/settings.php」ファイルを見ると確認できます。
「settings.php」内を「$databases['default']['default']」で検索すると、下記のように必要な情報が書かれた箇所が見つかります。
$databases['default']['default'] = array (
'database' => 'drupal10',
'username' => 'drupal10',
'password' => 'drupal10',
'prefix' => '',
'host' => 'database',
'port' => '3306',
'isolation_level' => 'READ COMMITTED',
'namespace' => 'Drupal\\mysql\\Driver\\Database\\mysql',
'driver' => 'mysql',
'autoload' => 'core/modules/mysql/src/Driver/Database/mysql/',
);
データベースの更新
データベース上で更新したい箇所は「system.maintenance_mode」のvalueです。
まずは下記SQLコマンドで現在の値を確認しましょう。
SELECT `value` FROM `key_value`
WHERE `name` = 'system.maintenance_mode';
すると、下記のような形で結果が返ってきます。
+-------+
| value |
+-------+
| i:0; |
+-------+
1 row in set (0.04 sec)
「i:0」の場合はメンテナンスモードが無効で、「i:1」だと有効です。
有効にしたい場合は、下記SQLコマンドを実行します。
UPDATE `key_value` SET `value` = 'i:1;' WHERE `name` = 'system.maintenance_mode';
「i:0」に戻して無効にしたい場合は、下記を実行します。
UPDATE `key_value` SET `value` = 'i:0;' WHERE `name` = 'system.maintenance_mode';
なお、メンテナンスモードの切り替え後はキャッシュクリアをしないと反映されないので、キャッシュ関連のデータを削除します。
TRUNCATE `cachetags`;
TRUNCATE `cache_bootstrap`;
TRUNCATE `cache_config`;
TRUNCATE `cache_container`;
TRUNCATE `cache_data`;
TRUNCATE `cache_default`;
TRUNCATE `cache_discovery`;
TRUNCATE `cache_dynamic_page_cache`;
TRUNCATE `cache_entity`;
TRUNCATE `cache_menu`;
TRUNCATE `cache_page`;
TRUNCATE `cache_render`;
TRUNCATE `cache_toolbar`;
Drushに比べるとややこしいですが、このようにデータベースを直接更新しても切り替えられます。
メンテナンスモードの表示
実際のメンテナンスモードの表示ですが、テーマごとによって異なります。
Drupal 10のデフォルトテーマである「Olivero」だと、下記のように表示されます。
もし、メンテナンスモードの見た目を変更したい場合は、下記のファイルを編集することで変更可能です。
- HTML:/templates/maintenance-page.html.twig
- CSS:/css/components/maintenance-page.css
まとめ
今回はさまざまな切り替え方を紹介しましたが、基本的には管理画面から「有効にしてからアップデート作業などを行う」「アップデートが完了したら無効にする」の操作だけで済みます。
サイトによっては年に数回使うかどうかの機能かもしれませんし、つい忘れてしまいそうになりますが、使わないでアップデートするとユーザーの不信感に繋がりかねません。
忘れないようにアップデート前に切り替えることと、ログアウトしてしまって慌てることがないように注意しましょう。

モチヤスタッフ
Drupalなど技術に関する投稿をモチヤのスタッフが行っています。