みなさんこんにちは、youkyllです。
laravelでデバッグをする時、dd()
を利用している方は多いのではないのでしょうか。
今回は rubyのpry、phpdbgと似た、
REPLであるtinker
コマンドをご紹介します。
基本的な使い方
tinkerコマンドによる対話的シェルを立ち上げるには、
プロジェクトディレクトリ内で下記のコマンドを実行します。
$ php artisan tinker
シェルが立ち上がるので help
と入力します。
利用できるコマンドが表示されます。
それでは手始めにグローバル変数の一覧を表示してみましょう。
>>> ls -gl
すると、グローバル変数一覧が表示されます。
$_SERVER
を見たいときは単に
>>> $_SERVER
と打ち込むだけで中身を確認できます。
また、下記のようにphpを逐一実行する事ができます。
>>> base_path()
=> "/home/youkyll/project/test_app"
tinkerでデバッグする
実は公式ドキュメントにもtinkerコマンドを利用したデバッグについては記載されていません。
tinkerコマンドはPsyPHのラッパーです。
ですので、こちらの公式ドキュメントを見ましょう。
REPLによるデバッグを行うには、デバッグを行いたい箇所で
eval(\Psy\sh());
と追記します。
続いて、servコマンドでサーバーを立ち上げましょう。
$ php artisan serv
該当のコードが通過するURLでブラウザからアクセスします。
すると、servコマンドで待機していたシェルにtinkerが起動します!
先ほどコマンドから実行した場合と同じ要領でデバッグをすることができます!
現在の自分の居場所を確認してみましょう。
>>> whereami
このように、現在のbreak pointが分かります。
便利コマンド
ここではデバッグ時に便利なコマンドを抜粋して簡単に紹介します!
ls -fl -G 関数名
現在のスコープで利用できる関数の一覧をgrep検索して表示します。
-Gはgrep、-fは関数、-lは詳細表示と言った意味です。
ヘルパーで定義した関数探すときなどに便利ですね。
doc 関数名 or オブジェクト
詳細情報(phpdoc, 引数など)が見られます。
show 関数名 or オブジェクト
なんとコードが見られます!変数にも利用できて便利!
trace
現在ストップしている場所までのtraceが確認できます。
wtf or last-exception
最後に投げられたexceptionとその詳細を表示します。
その他のコマンドについては
>>> help [command]
で参照ください。
まとめ
tinkerコマンドはこのように手軽にデバッグすることができます!
それでは良いコーディングライフを!