【CakePHP入門】デバッグ(debug)を使ってみよう!

こんにちは!フリーエンジニアのヤマシタです。

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について忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。