デバッグモードは特別なプラグインなどを使わずとも、サイトの不具合によるエラー、カスタマイズなどの問題特定に利用できます。とくに中級以上のユーザーなら技術的なステップアップを目指して、使いこなしたい機能です。
WordPress のデバッグ機能
基本的なデバッグ機能設定は WordPress ルートディレクトリにあるwp-config.php
で行います。 つぎのように基本的には、デフォルトでは無効になっています。 必要に応じて設定を追記、値を調整します。
/**
* 開発者へ: WordPress デバッグモード
*
* この値を true にすると、開発中に注意 (notice) を表示します。
* テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
*
* その他のデバッグに利用できる定数についてはドキュメンテーションをご覧ください。
*
* @link https://ja.wordpress.org/support/article/debugging-in-wordpress/
*/
define( 'WP_DEBUG', false );
/* 編集が必要なのはここまでです ! WordPress でのパブリッシングをお楽しみください。 */
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
WP_DEBUG
デバッグモードの有効化
設定値
define('WP_DEBUG_LOG', true); // 有効
define('WP_DEBUG_LOG', false); // 無効
WP_DEBUG_LOG
デバッグ情報を wp-content/debug.log
に記録
設定値
define('WP_DEBUG_LOG', true); // 有効
define('WP_DEBUG_LOG', false); // 無効
※デバッグログファイルの所有者がサーバーユーザー(Apache など)である必要があります。 ファイルのパーミッションは通常 644 です。
WP_DEBUG_DISPLAY
WordPress のデバッグエラーを画面上に表示
設定値
define('WP_DEBUG_DISPLAY', true); // 有効
define('WP_DEBUG_DISPLAY', false); // 無効
SCRIPT_DEBUG
WordPress コアの CSS および JavaScript ファイルの未圧縮版を読み込む
設定値
define('SCRIPT_DEBUG', true); // 未圧縮版を読み込む
define('SCRIPT_DEBUG', false); // 圧縮版を読み込む
※基本的に開発環境で WordPress コアのバグや問題を調査する際に使用します。テーマやプラグインで読み込まれるカスタムスクリプトには影響しません。
設定箇所
これらの設定はrequire_once(ABSPATH . 'wp-settings.php');
より前に記述する必要があります。これは、 wp-settings.php 内でデバッグに関する設定が定義されることから、その後に書かれたカスタム設定は期待通りに動作しない可能性があるためです。
基本的なデバッグ設定
define('WP_DEBUG', true); // デバッグモードを有効化
define('WP_DEBUG_LOG', true); // デバッグ情報をログファイルに記録
define('WP_DEBUG_DISPLAY', false); // デバッグ情報を画面に表示しない
@ini_set('display_errors', 0); // サーバーの PHP エラーの画面表示を無効化
WordPress のデバッグモードは有効だが、デバッグ情報は画面には出力せず、wp-content/debug.log
に保存します。@ini_set はサーバーに対する PHP エラーログの画面表示を抑制する設定です。
実際の本番環境でのデバッグは以下のセキュリティ対処を徹底してください。
デバッグ情報の取り扱い
デバッグ情報には、プラグインやテーマの脆弱性、サーバーの構成情報、エラーメッセージなどが含まれており、これらが外部に漏洩すると重大なセキュリティリスクを引き起こします。
そのため、本番環境ではデバッグ情報を出力しないことが推奨されますが、以下のような理由で本番環境でのデバッグ情報が必要になる場合があるでしょう。
- 本番環境でしか再現しない問題の調査が必要な場合
- サイト運用中に発生するエラーの原因を特定するため
ログファイルへのアクセスを禁止する
標準仕様のとおり、公開ディレクトリにログを保存する場合は、 Web サーバーの設定でアクセスを制限します。
wp-content ディレクトリ内に .htaccess ファイルを作成します。
ファイルパス:wp-content/.htaccess
<Files "debug.log">
Require all denied
</Files>
あるいは、ルートの .htaccess ファイルで配下すべての*.log
に対するアクセスを制限してもよいでしょう。基本的にログファイルは公開するものではありません。これなら、サブディレクトリに複数の WordPress が存在していてもすべて対象になります。
<FilesMatch "\.log$">
Require all denied
</FilesMatch>
※プラグインなどの構成によっては、*.log
すべてにアクセス制限を掛けると、不具合が生じる可能性があるので、注意してください。
nginx の場合は下記のような *.conf の server ブロック内 に記述します。
/etc/nginx/nginx.conf
(グローバル設定)
/etc/nginx/sites-available/example.conf
(サイトごとの設定)
server {
# 他の設定
location ~* /wp-content/debug.log {
deny all;
}
}
公開ディレクトリへのデバッグログ出力を避ける
デフォルトでデバッグログはwp-content/debug.log
に保存されますが、 wp-content は公開ディレクトリであり、 Web から直接アクセス可能です。
この状態を放置すると、攻撃者がデバッグ情報を取得する危険性があります。
デバッグログの保存場所やファイル名を変更するには、 WP_DEBUG_LOG にカスタムパスを指定します。
define('WP_DEBUG_LOG', '/var/log/wordpress/error-debug.log');
相対パスも可能ですが、絶対パスでの指定が推奨されます。
保存先ディレクトリおよびファイルには、書き込み権限が必要です。
- ファイル:644
- ディレクトリ:755
ここで問題なのが、どこにログを保存するか?です。
推奨される保存先は公開ディレクトリ外のサーバーのログ専用ディレクトリなどです。
例:/var/log/wordpress/error-debug.log
レンタルサーバーなどの共有ホスティング環境では /var/log/ などにアクセス権限がない場合があります。その場合は公開ディレクトリの外に保存します。
例:/home/example/error-debug.log
これらが難しい場合は上記のアクセス制限を徹底しましょう。
ログファイルの管理
ログファイルを長期間放置したり、定期的なエラーが頻発している場合、デバッグログがサイトの表示に影響を与えるレベルに肥大化する可能性があります。
そのため、デバッグ終了後はログファイルを削除する、あるいは定期的にローテーションする仕組みを導入することを推奨します。
この記事が役に立ったら「いいね」!