目次

目次

CakePHP3系のデバッグに役立つ関数の紹介

アバター画像
福治菜摘美
アバター画像
福治菜摘美
最終更新日2018/04/27 投稿日2018/04/27

CakePHP3系のデバッグ時に役立つ関数

今回は、デバッグに役立つ関数を5つ紹介したいと思います。

デバッグする際に用意したデータは、こちら。

$test = ['a'=>'1', 'b'=>'2', 'c'=>'3', 'd'=>['e'=>'5', 'f'=>'6']];

デバッグをする際は見やすさも大事だと思ったのでサンプルデータとして配列を用意しました。

紹介する関数は以下の5つです。

CakePHP3系の関数

  • pr()
  • debug()
  • dd()

PHPの関数

  • var_dump()
  • var_export()

■ pr()

出力を <pre> タグで周りを囲む機能を追加した print_r() のラッパー。 debugモードがoffの時は出力されない。 以下、 pr($test);を実行。 ブラウザの表示


Array (   [a] => 1   [b] => 2   [c] => 3   [d] => Array     (       [e] => 5       [f] => 6     ) )


HTMLソース

<pre class="pr">Array
(
    [a] => 1
    [b] => 2
    [c] => 3
    [d] => Array
        (
            [e] => 5
            [f] => 6
        )

)</pre>

ログへの出力

// 例 Log::info(pr($test));の実行結果
2018-02-23 11:54:42 Info: Array
(
    [a] => 1
    [b] => 2
    [c] => 3
    [d] => Array
        (
            [e] => 5
            [f] => 6
        )

)

基本的に思った通りの動きをしてくれる関数かなと思います。 改行しインデントをつけた状態で表示してくれるので見やすくなります。

■ debug()

デバッグ時に必要な実行ファイル名や行数を表示してくれる。 debugモードがoffの時は出力されない。 以下、 debug($test);を実行。 ブラウザの表示


/src/Controller/TestController.php (line 19)

[     'a' => '1',     'b' => '2',     'c' => '3',     'd' => [         'e' => '5',         'f' => '6'     ] ]


HTMLソース

/src/Controller/TestController.php (line 19)
[
    'a' => '1',
    'b' => '2',
    'c' => '3',
    'd' => [
        'e ' => '5',
        'f ' => '6'
    ]
]
 

ログへの出力

// 例 Log::info(debug($test));の実行結果
2018-02-23 12:34:15 Info: Array
(
    [a] => 1
    [b] => 2
    [c] => 3
    [d] => Array
        (
            [e] => 5
            [f] => 6
        )

)

debug()の場合、どのファイルの何行目の出力であるかがわかるので、便利です。しかし、ログに出力する際は他の関数と大きな違いは見当たりませんでした。

■ dd()

debug()実行後にdie()を実行して、終了する関数。 debugモードがoffの時は出力されない。 以下、 dd($test);を実行。 ブラウザの表示


/src/Controller/TestController.php (line 23)

[     'a' => '1',     'b' => '2',     'c' => '3',     'd' => [         'e' => '5',         'f' => '6'     ] ]


HTMLソース

/src/Controller/TestController.php (line 23)
[
    'a' => '1',
    'b' => '2',
    'c' => '3',
    'd' => [
        'e' => '5',
        'f' => '6'
    ]
]
 

ログへの出力

// 例 Log::info(dd($test));の実行結果

基本的にdebug()と変わらないですが画面に出力後プログラム自体を終了するので、ログに出力を行う前に終了してしまうので、注意が必要です。

■ var_dump()

以下、 var_dump($test);を実行。 ブラウザの表示


array(4) { [“a”]=> string(1) “1” [“b”]=> string(1) “2” [“c”]=> string(1) “3” [“d”]=> array(2) { [“e”]=> string(1) “5” [“f”]=> string(1) “6” } }


HTMLソース

array(4) {
  ["a"]=>
  string(1) "1"
  ["b"]=>
  string(1) "2"
  ["c"]=>
  string(1) "3"
  ["d"]=>
  array(2) {
    ["e"]=>
    string(1) "5"
    ["f"]=>
    string(1) "6"
  }
}

ログへの出力

// 例 Log::info(var_dump($test));の実行結果
2018-02-23 12:23:33 Info:

変数の型まで出力されるので、ブラウザを見ながらデバッグする際は便利です。 しかしログでは中身が出力されないので、注意が必要です。

■ var_export()

以下、 var_export($test);を実行。 ブラウザの表示


array(4) { [“a”]=> string(1) “1” [“b”]=> string(1) “2” [“c”]=> string(1) “3” [“d”]=> array(2) { [“e”]=> string(1) “5” [“f”]=> string(1) “6” } } array ( ‘a’ => ‘1’, ‘b’ => ‘2’, ‘c’ => ‘3’, ‘d’ => array ( ‘e’ => ‘5’, ‘f’ => ‘6’, ), )


HTMLソース

array(4) {
  ["a"]=>
  string(1) "1"
  ["b"]=>
  string(1) "2"
  ["c"]=>
  string(1) "3"
  ["d"]=>
  array(2) {
    ["e"]=>
    string(1) "5"
    ["f"]=>
    string(1) "6"
  }
}

ログへの出力

// 例 Log::info(var_export($test));の実行結果
2018-02-23 12:31:09 Info:

第二引数に「true」を渡すと、ブラウザには出力されなくて、ログには出力されます。 以下、 var_export($test, true);を実行。 ブラウザの表示(何も表示されません。)




HTMLソース(もちろん何も表示されません。)

 

ログへの出力

// 例 Log::info(var_export($test, true));の実行結果
2018-02-23 12:32:23 Info: array (
  'a' => '1',
  'b' => '2',
  'c' => '3',
  'd' => 
  array (
    'e' => '5',
    'f' => '6',
  ),
)

var_export()の場合、用途によって引数を指定し実行する必要があります。

まとめ

ブラウザを見ながらデバッグを行う際に役立つ関数

  • シンプルに変数内の構造を見たい場合、pr()
  • 変数の型を見たければ、var_dump()、var_export()
  • 実行された行を確認したければ、debug()
  • 実行された行を確認したい、なおかつその行でプログラムを終了させたければ、dd()

ログファイルを見ながらデバッグを行う際に役立つ関数

  • ログファイルを見ながらデバッグできる関数はブラウザをどの関数も特に違いは見当たらなかったです。 pr() var_export()(ただし第二引数にtrueを指定する必要あり) debug()

debugモードのみで表示される関数

  • CakePHP3系独自の関数は、ブラウザにはdebugモードがonの時のみ表示されるようでした。ちなみに、ログに出す時はdebugモードがon/offに関わらず出力されているようでした。 pr() debug()

おまけ REPLについて

CakePHPもREPL(インターラクティブコンソール)が装備されています。 (REPLはリプルと読むらしいです。) 以下のコマンドを実行することで、起動可能。

bin/cake console

仕様を確認したい場合などに使ってみてください。

アバター画像

福治菜摘美

新米エンジニアです。

目次