PhpStorm によるデバッグ

PhpStorm のデバッグ環境に関する知識を深めるために必要な基礎をしっかりと固めましょう。このエピソードでは、Xdebug を使用したデバッグセッションの開始、ブレークポイントの設定、コードのステップオーバー/ステップイン実行について学習します。

トランスクリプト

PhpStorm の最も強力な機能の 1 つにはデバッガーがあります。「デバッガー」という名称の起源は 1940 年代にあり、文字通り「プログラムからバグまたは不具合を除去するもの」を意味します。デバッガーではコードを実行しながら一時停止できるため、プログラムのメモリを調査したり、コードの流れを追ったり、多くのことができます。デバッガーは問題の発生箇所をより容易に特定し、コードからバグを除去することを目的としています。

PhpStorm には軽量の組み込みデバッガーが備わっていますが、圧倒的に人気のある PHP のデバッガーは Xdebug です。このデバッガーは個別にインストールする必要があります。しかし、幸いにも PhpStorm はこのデバッガーのインストールをユーザーに代わって実行してくれます。では、PhpStorm での Xdebug のセットアップ方法とデバッグの開始手順を見てみましょう。

Xdebug がインストールされていないと想定しましょう。たとえば、test という PHP スクリプトのデバッグを開始する場合はどうなるでしょう?通常の手順でテストを実行する代わりに、デバッグ(デバッグ)ボタンを押すことができます。ご覧のように、PhpStorm はデバッガーがインストールされていないことを通知するだけでなく、修正も行ってくれます。Update Interpreter Info(インタープリター情報の更新)と Download and install Xdebug extension(Xdebug 拡張機能のダウンロードとインストール)を続けて押し、IDE が Xdebug をセットアップするのを待つだけです。

インストールが完了したら、PhpStorm は有効化されたデバッガーを使用して自動的にテストを再実行します。しかし、これといって何も起こりません。デバッガーに一時停止すべき場所をまだ伝えていないからです。これを行うには、「ブレークポイント」と呼ばれるものを使用する必要があります。

ブレークポイントはユーザーがコードの動作を調査できるようにするため、デバッガーが実行を一時的に停止するコード内の位置です。

たとえば、ここのこの行にブレークポイントを追加しましょう。ガターにある行番号をクリックするだけで操作は完了です。では、テストを再実行しましょう。

今回は何かが変わったことに気付くはずです。プログラムは一時停止され、PhpStorm が多くの情報を表示しています。

左側には、このブレークポイントに到達する前に発生したすべてのイベントが表示されます。これらのメソッド呼び出しを経由してここに到達しました。これらのメソッドはクリック可能で、PhpStorm はファイル全体のパスを表示します。

右側には、ブレークポイントの位置で現在有効なすべての変数が表示されます。test クラスを参照している $this 変数があります。この変数を開くと、その内容を確認できます。また、グローバル $_ENV 変数のような他の変数もあります。PhpStorm は変数の内容を表示します。また、前のメソッド呼び出しのいずれかに移動すると、変数のリストも変更されることが分かります。

現在、デバッガーはプログラムのフローを逆方向に移動しています。これは、他のイベントが発生する前に発生したイベントを知る必要がある場合に大いに役立つ可能性があります。しかし、先に進むことはできるのでしょうか?

Resume(再開)ボタンを押すとデバッガーの一時停止を解除できますが、そうするとテストが終了してしまいます。

では、ブレークポイントに戻りましょう。Resume(再開)を押す代わりに Step over(ステップオーバー)または Step into(ステップイン)ボタンを押すことができます。これら 2 つは非常に強力です。

「ステップオーバー」を押すとデバッガーが次のステートメントに移動し、再び一時停止します。「ステップイン」を押すとデバッガーが 1 つ下のレベルに移動し、関数呼び出し内の動作がデバッグされます。

また、これら 2 つのボタンを組み合わせて使用すると、さらに強力です。これらのボタンを使用することで、変数の変化を監視し、条件への一致/不一致の理由やループの回数などを把握しながら、プログラムのフローを本質的に追うことができます。

しかし、デバッグは強力なだけではなく、億劫に感じられるものでもあります。デバッグは複雑なプロセスなので、非常に多くの細かな要素や側面を考慮する必要があります。楽器の演奏と同じように、慣れるまで練習が必要なものでもあります。

そのため、皆さんが練習できるようなアプローチを使用するつもりです。デバッグセッションの開始方法、ブレークポイント、コードのステップオーバー/ステップイン実行の方法、デバッガーの初歩的な基礎知識について説明しました。皆さんにはデバッガーに慣れていただく必要があり、慣れるには練習するしかありません。次に var_dump ステートメントまたは dd ステートメントを書く際には、デバッガーを代わりに使用してみてください。最初は慣れないでしょうが、いずれは簡単に感じるようになり、長い目で見れば利益をもたらすでしょう。