Help us understand the problem. What is going on with this article?

【laravel5】 tinkerを利用してpryのように楽にデバッグする!

More than 5 years have passed since last update.

みなさんこんにちは、youkyllです。

laravelでデバッグをする時、dd() を利用している方は多いのではないのでしょうか。

今回は rubyのpry、phpdbgと似た、
REPLであるtinkerコマンドをご紹介します。

基本的な使い方

tinkerコマンドによる対話的シェルを立ち上げるには、
プロジェクトディレクトリ内で下記のコマンドを実行します。

$ php artisan tinker

シェルが立ち上がるので helpと入力します。
利用できるコマンドが表示されます。

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

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コマンドはこのように手軽にデバッグすることができます!

それでは良いコーディングライフを!

youkyll
Laravel → Ruby on Rails → Next.js, React Native, GraphQL
https://youkyll.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away