CakePHPでは、システムを開発する上で便利なデバッグ(debug)の機能が用意されています。
この記事では、
・デバッグ(debug)とは
・logメソッドの使い方
・debugメソッドの使い方
・Debuggerクラスのdumpメソッドの使い方
という基本的な内容から、
・Debuggerクラスのdumpメソッドの使い方
・Debuggerクラスのtraceメソッドの使い方
・DebugKitとは
などの応用的な使い方に関しても解説していきます。
ここではそんなCakePHPでデバッグする方法について、分かりやすく解説します!
デバッグ(debug)とは?
デバッグ(debug)とは、システムやシステムで使用している機器の不具合や異常状態を検出し、確認するための機能の1つです。
プログラムの仕様や意図した動作をするか確認するために、正しい処理を行っているか確認したり、不具合があった場合は、プログラム上の位置を特定して修正を行うなどの作業のこともデバッグと言います。
そのため、システムを開発する上でデバッグは欠かせない必要なものであり、CakePHPではさまざまなデバッグの機能が提供されています。
ログ出力によるデバッグ方法
デバッグを行う最も基本的な方法としては、デバッグの内容をファイルに書き込むことです。
ここで紹介するlogメソッドやdebugメソッドを使用することにより、ログファイルにデバッグ情報を書き込むことができます。
logメソッドの使い方
ここではlogメソッドを使用して、ログファイルに出力する方法を見ていきましょう。
以下にlogメソッドを使用して、変数の値を出力するサンプルを紹介します。
//変数の設定 $name = '侍エンジニア'; //ログの書き込み $this->log('変数$nameの値は:'. $name . 'です。');
このプログラムを実行すると、「logs/error.log」に日時、ログレベル、ログの内容が出力されます。
実行結果:
2017-07-31 23:33:06 Error: 変数$nameの値は:侍エンジニアです。
ファイルにログを出力する方法については、以下の記事でも詳しく解説していますので、ぜひ参考にしてくださいね!
debugメソッドの使い方
Logクラスのdebugメソッドを使用することでもログの内容を出力することができます。
debugメソッドを使用するにはuseでLogクラスを指定する必要があります。
use Cake\Log\Log;
//変数の設定 $name = '侍エンジニア'; //ログの書き込み Log::debug('変数$nameの値は:'. $name . 'です。');
debugメソッドを実行すると、「logs/debug.log」にログの内容が出力されます。
$this->logメソッド同様に日時、ログレベル、ログの内容が出力されます。
また、配列の内容を確認したいときにもlogメソッド、debugメソッドを使用すると便利です。
//配列の設定 $fruits = [ 0=>'apple', 1=>'orange', 2=>'melon', 3=>'banana', 4=>'pineapple' ]; //ログの書き込み Log::debug($fruits);
プログラムを実行すると、「logs/debug.log」にログに配列の内容が出力されます。
実行結果:
2017-07-31 23:48:36 Debug: Array ( [0] => apple [1] => orange [2] => melon [3] => banana [4] => pineapple )
Debuggerクラスの使い方
dumpメソッドでログを出力する
Debuggerクラスを使用することで、ブラウザ上にログの内容を確認することができます。
Debuggerクラスを使用するにはuseでDebuggerクラスを指定する必要があります。
use Cake\Error\Debugger;
以下のサンプルではDebuggerクラスのdumpメソッドを使用して配列の内容を出力しています。
$fruits = [ 0=>'apple', 1=>'orange', 2=>'melon', 3=>'banana', 4=>'pineapple' ]; Debugger::dump($fruits);
実行結果:
[ (int) 0 => 'apple', (int) 1 => 'orange', (int) 2 => 'melon', (int) 3 => 'banana', (int) 4 => 'pineapple' ]
traceメソッドでスタックトレースを生成する
スタックトレース(stack trace)とは、エラーが発生したときにそのエラーが発生するまでの操作履歴を表示するものです。
エラーが発生するまでの過程が分かれば、エラーの解析をスムーズに進めることができます。
スタックトレースを生成するには、Debuggerクラスのtraceメソッドを使用します。
// スタックトレースの生成 pr(Debugger::trace()); //出力内容 App\Controller\DebugSampleController::beforeFilter() - APP/Controller/DebugSampleController.php, line 83 Cake\Event\EventManager::_callListener() - CORE/src/Event/EventManager.php, line 414 Cake\Event\EventManager::dispatch() - CORE/src/Event/EventManager.php, line 391 ・・・省略・・・
DebugKitとは
DebugKitはデバッグするために便利なツールを提供しているプラグインです。
DebugKitを使用すれば、履歴情報や現在のリクエスト情報、セッション情報など、さまざまな情報を確認することが可能です。
DebugKitについては、以下の記事で詳しく解説していますので、ぜひ参考にしてくださいね!
まとめ
ここでは、デバッグ内容をファイルに出力する方法や、Debuggerクラスを使用してdumpで内容を出力する方法、スタックトレースの生成方法などについて解説しました。
デバッグ(debug)はシステムを開発するために必要なものですので、CakePHPで提供されているdebugの機能はよく理解しておきましょう。
もしdebugについて忘れてしまったら、この記事を思い出してくださいね。