- 実践 WordPress ホーム
- デバッグ・問題解決
WordPress サイトのデバッグ方法
WordPress サイトの基礎的なデバッグ方法を紹介します。
対象読者
本ページでは「プログラミングの基礎知識がある方」を対象としています。
WordPress のデバッグ設定を有効にする
WordPress ではデバッグ用のフラグ定数 WP_DEBUG
が用意されています。
この値を true
にセットすると WordPress のデバッグ設定が有効になります。
設定ファイル wp-config.php
の先頭付近に次の行を追加します。
wp-config.php
はデフォルトでは WordPress インストールディレクトリ直下に置かれています。
define()
の代わりに const
キーワードを使って定義しても OK です。
WP_DEBUG
の注意点
WP_DEBUG
でデバッグ設定を有効にすると、 PHP の設定次第では発生したエラーの情報がブラウザで閲覧した画面に出力されてしまいます。
これが本番環境で起こるのはセキュリティ上望ましくありません。
そのため、本番環境で WP_DEBUG
を true
に設定する必要があるときはエラーの詳細が出力されないよう WP_DEBUG_DISPLAY
を false
にセットしておくのがよい習慣です。
WP_DEBUG_DISPLAY
が false
の場合にエラーが発生したときの画面:
ただし注意をしても事故が起こるリスクはあるので、本番環境では原則デバッグ作業を行わないようにする方がベターです。
WordPress のデバッグログを出力する
デバッグログを出力するには定数 WP_DEBUG_LOG
を使います。
WP_DEBUG_LOG
が機能するには WP_DEBUG
が true
にセットされている必要があります。
設定ファイル wp-config.php
の先頭付近に次の行を追加します。
このようにすると、 WordPress インストールディレクトリの下の wp-content/debug.log
ファイルにログが出力されます。
試しにアクティブなテーマの functions.php
に次のように記述するとログが出力されることが確認できます。
WP_DEBUG_LOG
の値にファイルパスをセットするとログの出力先を変更できます。
WP_DEBUG_LOG
を true
にセットときの出力先 wp-content/debug.log
はサイトの訪問者がブラウザでアクセスすると閲覧できてしまう可能性がありこれはセキュリティ上リスクがあります。
本番環境でログ出力が必要な場合は極力 WP_DEBUG_LOG
にファイルパスをセットして WordPress インストールディレクトリの外にログを出力すべきです。
Note
ウェブサーバーで拡張子が .log
のファイルをあらかじめ閲覧不可に設定しておくと、万が一 WordPress インストールディレクトリ以下にログが出力されたときの被害の発生を防げます。
Apache 2.4 で .log
ファイルを閲覧不可にする設定:
関連ページ:
プリントデバッグをする
単純に変数の値などを出力するプリントデバッグには大きく 2 通りの方法があります。
- A. デバッグ設定を有効にした上で
error_log()
関数を使う - B.
file_put_contents()
でファイルに出力する
A. デバッグ設定を有効にした上で error_log()
関数を使う
こちらの方法では上の「デバッグログを出力する」の設定をした上で error_log()
関数を使います。
ただし、 error_log()
関数は引数に文字列のみを受け付けるので、配列やオブジェクトは直接渡すことができません。
次のように事前に文字列にしておく必要があります。
複雑なデバッグ作業などで error_log()
を多用する場合は毎回文字列に変えるのが煩わしくなるのでヘルパー関数を書いておくと便利です。
WordPress Developer Resources の Debugging in WordPress のページではそんなヘルパー関数の例として次のヘルパー関数が紹介されています:
function write_log( $data ) {
if ( true === WP_DEBUG ) {
if ( is_array( $data ) || is_object( $data ) ) {
error_log( print_r( $data, true ) );
} else {
error_log( $data );
}
}
}
B. file_put_contents()
でファイルに出力する
B の方法は単純に file_put_contents()
でファイルに出力する方法です。
特定の値を他のログと区別して見たい場合などはこちらの方法を選ぶとよいと思います。
書き込み時に既存の内容を上書きするか末尾に追加するかは第 3 引数のフラグで制御できます。
上書きする場合 → 複数回呼ばれたときは最後の出力だけが残る:
末尾に追加する場合:
PHP のログを確認する
WordPress のログとは別に PHP のエラーログもあります。
WordPress のレイヤーで補足できたエラーや例外は WordPress のログに出力されますが、できなかったものは PHP のエラーログの方に出力されます。
出力先は PHP のランタイム設定 error_log
で制御されています。
error_log の値 |
出力先 |
---|---|
なし | なし |
syslog |
syslog |
ファイルパス | そのパスのファイル |
この error_log
の値は PHP の設定ファイル php.ini
で設定できます。
環境によっては wp-config.php
内で ini_set()
を使って設定することもできます。
実際に出力されるエラーの種類については error_reporting
で設定されているので、エラーが出力されない場合はこの値を調整すると解決できることがあります。
Apache のログを確認する
WordPress サイトではウェブサーバーに Apache を使っている場合が多いですが、 Apache サーバーを使っている場合は Apache のログもデバッグに有用です。
サイトにアクセスしているのに WordPress が反応しない場合などは Apache のアクセスログやエラーログを確認するとよいです。
Apache のログの出力先は Apache の設定ファイルの CustomLog
や ErrorLog
ディレクティブで制御されています。
CSS や JavaScript のデバッグ
CSS や JavaScript のデバッグについてはここでは紹介しませんが、 minify されたコードではなく可読性の高いオリジナルのコードを使う設定などデバッグに有用な定数がいくつか用意されています。 WordPress 公式の Debugging in WordPress ページに説明があるので興味がある方はそちらをご覧ください。