PHPのデバッグツール「XDebug」をVisual Studio Code + MAMPに導入する方法

## 環境
Windows 10 
Visual Studio Code 1.40.2 (以下、VSCode)
(PHP Debug 1.13.0, PHP IntelliSense 2.3.1)
PHP 7.1.5
MAMP 3.3.1
Chrome 78～

## Xdebugはインストールできたのに動かない方へ
Visual Studio Code上にXdebugをインストールして使用する方法は、すでに様々なところで紹介されていますが、私の環境ではインストールはできても、いくつか設定を追加・変更しないと機能しなかったので、同様の環境の方々の参考になるようにメモとして残します。サーバーはMAMPを利用して、ローカルホストで実行します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/0caaca77-db7a-c014-edc3-6c86328b15b3.png" width=50%>

## 手順
1. VSCode上で必要な拡張機能をインストール
2. Xdebugの公式サイトより、自身の環境に合ったdllライブラリを入手してインストール
3. XdebugとVSCodeを連携させる
4. デバックを実行したいフォルダで、環境の設定を行う

以上で完了です！各手順を詳しく見ていきましょう。

## 手順(1) VSCode上で必要な拡張機能をインストール
VSCodeの拡張機能で”PHP debug”と検索し、「PHP Debug」と「PHP IntelliSense」をそれぞれインストールします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/e241cc27-98cf-91ca-ea2a-9882187f724f.png" width=70%> 
※ 上のスクリーンショットではインストール済みです。

## 手順(2) Xdebugの公式サイトより、自身の環境に合ったdllライブラリを入手してインストール
Xdebugには様々なバージョンがあるようですが、Xdebugの公式サイトにアクセスすれば、自身の環境に合った最適なdllライブラリを教えてくれます。

まずはMAMP > htdocs内の任意のフォルダにtest.phpを作成しphpinfo(); を記述します。

![2019-12-09_00h04_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/49064fc8-886d-9ac1-4a96-2967036ee4fd.png)

※ この例では MAMP\htdocs\test\test.phpを作成

ブラウザでtest.phpを開きます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/11f6664e-ffb7-c6cf-007a-1a2609130a4a.png" width=60%>

ブラウザでhtmlのソースを開き、コードをすべてコピーします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/8a438fac-2273-d352-b983-999760b90f53.png" width=60%>

[Xdebug公式サイト](https://xdebug.org/wizard)のインスタレーションウィザード画面に、さきほどのhtmlをペーストし、”Analyse my phpinfo() output”ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/5bb7f79a-f235-59c2-fc1f-4e3e586bad2b.png" width=60%>

すると、この環境にあったXdebugのバージョン、インストール先、設定ファイルのパスが表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/e719add8-2e41-e331-22cb-ae2d6579c3ed.png" width=60%>

私の場合ですと、ダウンロードすべきXdebugのdllライブラリのバージョンは"php_xdebug-2.8.1-7.1-vc14.dll"で、インストール先は"C:\MAMP\bin\php\php7.1.5\ext"、設定を追記するphp.iniのパス名が"C:\MAMP\conf\php7.1.5\php.ini"であることがわかります。

dllライブラリ名をクリックすると、該当ファイルが自動的にダウンロードされます。ダウンロードしたファイルを、指定されたインストール先フォルダに移動するだけで、インストールは完了です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/76e71140-b572-470f-137c-1771fdcc48c6.png" width=80%>

## 手順(3) XdebugとVSCodeを連携させる
php.iniを開き、以下の設定をファイルの一番下に追記します。私の場合、MAMP上でPHP 7.1.5を使用しているので、編集するphp.iniは"C:\MAMP\conf\php7.1.5"内にあります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/abc642d5-4e18-2e49-63e4-9737864d3db8.png" width=80%>

追加した設定

```js
[xdebug]
zend_extension = C:\MAMP\bin\php\php7.1.5\ext\php_xdebug-2.8.1-7.1-vc14.dll
xdebug.remote_host = “localhost”
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
```
zend_extension = 以降のパスは、手順(2)でダウンロードしたdllファイルを入れたフォルダのパスを記述します。

php.iniを保存し、MAMPでサーバーを再起動します。

再度、phpinfo()を実行するtest.phpにアクセスしPHPの設定内容を見てみると、xdebugの項目が表示され、phpに認識されていることがわかります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/e0969f19-8e04-ff3b-e96f-278724a6bdf0.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/e45c3ef2-ed4b-4b69-5e2d-110f645e71fa.png" width="75%">

## 手順(4) デバックを実行したいフォルダで、環境の設定を行う
ここでは例として、MAMP/htdocs/testフォルダ内のphpファイルに対して、Xdebugを利用したデバッグが行えるように設定します。

まず、VSCode > ファイル > フォルダーを開く > testフォルダを開きます。

![2019-12-09_01h12_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/0e014192-57c1-0b98-2191-67cd9ef71055.png)

左端のナビゲーションメニューより(1) デバッグをクリック、次に(2) 歯車アイコンをクリック、そして(3) プルダウンメニューより"PHP"を選択します。

![2019-12-09_01h17_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/a891f44c-0386-eadf-12e3-d72178fdecc0.png)

Xdebugの構成ファイルであるlaunch.jsonが表示されます。

![2019-12-09_01h25_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/95f5afa0-63fc-21a1-1834-717ef590b477.png)

私の環境では、この構成のままデバッグが動作しましたが、もしうまくいかない場合は、次の設定を加えてみてください。"PathMapping"にはデバッグ先のphpファイルがあるフォルダの絶対パスもしくは${workspaceroot}を、"runtimmeExeutable"には、PHPの実行ファイルであるphp.exeのパスを指定します。

![2019-12-09_02h19_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/6868caf7-763b-163f-bdd0-c86cdeea8cce.png)


このlaunch.jsonファイルが入った.vscodeというフォルダが自動的に作成されます。削除してしまった場合は、この手順(4)を再度行ってください。

![2019-12-09_01h28_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/8533a679-53fb-8b03-2a65-7bd5dbd3687b.png)

これで基本的な設定は完了です。さっそくデバッグしてみましょう。

簡単なサンプルコードを書いてtest.phpを保存しました。適当な行数で左クリックするとブレークポイントが作成でき、赤色の丸印が表示されます。
![2019-12-09_01h40_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/451a8a34-29fd-bc04-1fe6-bef28266da10.png)

ナビゲーションメニューより(1)デバッグを選択し、(2) ”Listen for XDebug”左の三角アイコンをクリックすると**デバッグが開始**されます。デバッグが始まったらVSCode下部のインフォメーションバーが(3) オレンジ色に変わります。

![2019-12-09_01h41_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/f6ab60fb-dfc8-7402-eee6-de53024a91b3.png)

この状態でブラウザよりtest.phpを開くと、デバッグ中で設置したブレークポイントで処理が中断されているため、結果が表示されないのがわかります。

![2019-12-09_01h47_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/a830c802-05ab-a4f0-7d70-8c22f654c810.png)

コントロールバーの中の(1) ステップオーバーボタンをクリックすると、処理が一行ずつ進みます。(2)の変数メニューを見ると、変数の値の移り変わりがわかります。echoまで進めると、処理の結果がブラウザ上にも表示されました。

![2019-12-09_01h51_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532389/5e42956c-ca4e-f421-d495-964418d7b8ef.png)

ブラウザでデバッグしたいファイルを先に開いてからVSCode上でデバッグを開始すると、デバッグコントロールバーの”ステップオーバー”、"ステップイン"、"ステップアウト"ボタンが動作せずにデバッグできないので、必ずVSCode上で先にデバッグの開始をクリック後にブラウザで対象ファイルを開くようにしてください。

参考記事  [Visual Studio CodeでPHPをデバッグする方法](https://qiita.com/deux222/items/af75319ece05653c4bb5)

以上です！