30
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

XAMPPのPHPをXDebugでデバッグできるようにする

Last updated at Posted at 2018-11-29

この記事は、「【連載】初めてのWindows用Laravel 5.7開発環境構築入門」の孫記事です。環境などの条件は、親記事をご覧ください。
この記事は、「XAMPPでPHP+MariaDB(MySQL互換)環境を構築する 2018年12月版」の子記事です。


 前回はVisual Studio CodeでXAMPPのPHPコーディングが気持ちよく行えるようになる状態まで環境を構築しましたので、今回はデバッガが動作して、ブレイクポイントやステップ実行が利用できる状態まで構築していきます。

XDebugを入手する

 XDebugとは、実行されているPHPアプリとソースコードエディタをつないでくれる、Apache WebサーバーのExtension(拡張機能)です。XDebugを入手して、Apacheに組み込むと、Visual Studio Codeでブレイクポイントやステップ実行が利用できるようになるわけです。

 早速XDebugをダウンロードしたいところですが、XDebugはApacheやPHPのバージョンに強く依存するので、「これをダウンロードしたらOK」とはいきません。このため、XDebugの入手は以下のように少し特殊な手順で進めます。

 まず、https://xdebug.org を開けます。
image.png

 Downloadのリンクを開けます。
image.png

 画面下にたくさんのバージョンが表示されますが、この中から選ぶのは大変なので、XDebugが準備してくれているツールを使います。custom installation instructions (カスタムインストール説明)をクリックして、ツール画面を開けます。
image.png
 この画面の説明を簡単に訳すと、「phpinfo()で表示される内容をここに貼り付けてね」と書いてあります。
 なので、前回表示したphpinfo()の出力結果画面を全選択して、コピーします。(Hello worldごとコピーしてかまいません)
image.png

 さっきのXDebugのツール画面に戻って、貼り付けします。
image.png
 最後に、「Analyse my phpinfo() output」(phpinfo()の出力を解析)ボタンを押します。
image.png

 解析が終わると以下のような解析結果が出ます。
image.png

 解析結果には、Xdebug installed: no と表示されていて、まだXdebugがインストールされていない状況であることが確認できます。インストール後にここをもう一度確認することにします。
 結果の下にInstructions(インストール方法説明)があるので、ここにあるファイルをダウンロードします。これがXDebug本体です。

 ダウンロードしたファイルを、C:\xampp\php\ext フォルダに置きます。
image.png

PHPにXDebugを組み込む

 XDebug本体をPHPのextフォルダ内に置きましたが、これだけではまだXDebugがPHPに組み込まれていません。
 XDebugをPHPに組み込むには、php.iniファイルを編集して、XDebugを使うように指示します。

 XAMPP Control Panelを開き、ApacheのConfigの「PHP (php.ini)」をクリックして、php.iniを開きます。
image.png

 php.iniの最終行まで移動して、以下のコードを追加します。

php.ini
(上部省略)

zend_extension = C:\xampp\php\ext\php_xdebug-2.6.1-7.2-vc15.dll

[xdebug]
xdebug.default_enable = 1
xdebug.idekey = "vscode"
xdebug.remote_enable = 1
xdebug.remote_port=9000
xdebug.remote_autostart=1

 ここで、dllファイルの記述部分は、ダウンロードしたファイル名にすることに注意してください。

zend_extension = C:\xampp\php\ext\php_xdebug-2.6.1-7.2-vc15.dll

この記述によって、PHPはextフォルダに置いたXDebug本体を読み込みます。
その下の**[xdebug]**からの数行は、XDebugを「有効にする」ための設定です。この記述を追加しないと、Apache+PHPで動作させたときにXDebugを使ってくれません。
 記述後は以下のようになります。

image.png

 この状態までできたら、このファイルを保存し、メモ帳を閉じます。

 ここで必ずApacheを再起動してください。([Stop]して[Start]する。)
 再起動しないと、php.iniの変更が反映されません。
image.png

 これで設定は完了なので、動作していることを確認しましょう。先ほどと同じようにphpinfo()の出力結果画面を表示し、表示内容を再読み込みして、全選択してコピーし、XDebugツール画面に貼り付けて「Analyse my phpinfo() output」ボタンを押します。
 以下のように、Xdebug installed: 2.6.1 などとバージョン情報が表示されていたら成功です。
image.png

Visual Studio CodeにXDebugを設定(PHP Debugをインストール)

 Apache+PHP側にはXDebugが入ったので、次はVisual Studio Code側でデバッグ情報を受信できるようにします。デバッグ情報受信には、PHP DebugというExtensionを使います。

 Visual Studio Codeを開いて、Extensionsボタンを押します。
image.png

 検索条件にxdebugと打ち込んで、PHP Debugをインストールします。
image.png

 ここで一度Visual Studio Codeを再起動してください。

 次にデバッグボタンを押してデバッグ画面を開きますが、以下のように「No Configurations」と出ます。
image.png

 ここにデバッグConfiguration(デバッグ設定)を作ることで、Apache+PHPからの受信ができるようになります。「No Configurations」のすぐ右の歯車ボタンを押します。
 どの環境のConfigurationを作りたいか選択肢で聞かれるので、PHPを選択します。
image.png

 ここでPHPが出ない場合は、Visual Studio Codeを再起動してください。

 すると自動的にlaunch.jsonというファイルが生成されます。
image.png

 このファイルの場所は、プロジェクトの.vscodeフォルダの下です。
 このファイルではXDebugからの情報を受信するための設定が書かれますが、特に変更しなくて大丈夫です。8行目に「Listen for XDebug」とありますが、この部分がXDebug用のデバッグConfiguration部分になります。

 デバッグ画面に戻ると、今作ったConfigurationがちゃんと出てくるはずです。
image.png

 デバッグ実行ボタン(緑の右三角ボタン)を押すと、デバッグモードが開始されます。
image.png

 初回はファイアウォールの警告が出るので、「アクセスを許可する」してください。

 これでデバッグの準備は完了です。

デバッグしてみよう

 早速デバッグしてみます。ここでは、デバッグの機能でよく使うブレークポイントとウォッチを使ってみます。

ブレークポイント

 前回までに作成したinfo.phpの2行目に、以下のように行の左をクリックしてブレークポイントを設置します。
image.png

 動作をわかりやすくするため、まずはブラウザーで http://localhost/ を開きます。特にこの時点では何も起こらないはずです。

image.png

 次に、http://localhost/info.php を開きます。すると、ブラウザの表示は変わらずに、Visual Studio Codeがアクティブになります。
image.png

 Visual Studio Codeを見ると、先ほどのブレークポイントで処理が停止しています。
image.png

 ここでステップボタンを押すと、次の行に処理が進みます。
image.png

 あとはContinueボタンを押して残りの処理を進めましょう。
image.png

image.png

ウォッチ

 ウォッチでは、ブレークポイントで止めた時に、変数の中身などを観察することができます。
 info.phpのコードを以下のように書き換えてください。

info.php
<?php 
echo "Hello world";
$test = 123;
echo "$test points get!";
phpinfo();

書き換えたら保存を忘れないでください。 私はよく忘れてパニックになります。

 ブラウザーに戻って、再読み込みします。そうするとまたブレークポイントで止まります。
image.png

 今回は$testという変数の中身を確認したいので、WATCHの「+」をクリックし、$testを登録します。入力したらエンターキーで確定です。
 中身はもちろんまだ入ってないので、nullになります。
image.png

 ステップ実行して2行進めると、$testに123が入ります。
image.png
image.png

 また、WATCHに登録していなくても、マウスカーソルをソースコードの変数の上に持っていくと、内容がポップアップします。
image.png

 便利ですね!

30
38
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?