PhpStormでXdebugを使えるようにしよう！


## この記事でできること
PhpStormを使ってXdebugを使うことができる。
ところまで設定ができる。

所要時間はだいたい半日かければうまく設定できるはずと言われ、僕は1日かかりました…
なので、環境を整えるために時間に余裕がある時にやってみてください。

※この記事では使い方までは詳しく説明しません。

## Xdebugとは？
> Xdebugとは高機能なPHPのデバッグツールです。 PHPのデバッグでおなじみの「var_dump」を見やすくしてくれたり、ボトムネックになっている処理を見つけたり、ステップ実行できたりします。 その他のデバッグツールとしてはZendDebuggerがあります。
[Xdebugを使い倒す5つのTIPS | スマホサイト・アプリをつくろう。](http://www.plusmb.jp/2009/06/26/3923.html)
より。

## 想定環境
```
vagrant -v
> Vagrant 1.8.6
``` 

```
php -v
> PHP 7.1.5 (cli) (built: May  9 2017 18:30:17) ( NTS )
```

```
nginx -V
> nginx version: nginx/1.10.2
```

PhpStorm　
![D807DD9F-BFE6-4C8F-85E6-E6F2A57ECF7C.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/dcc5f781-1102-14e2-2bef-5bb2baec18de.png "D807DD9F-BFE6-4C8F-85E6-E6F2A57ECF7C.png.png")



# やること
- vagrant側での設定
- 設定の確認
- PhpStormの設定

ではここから、設定を行っていきます。

## vagrant環境内の設定
- vagrantにアクセス

```	
$ vagrant up
$ vagrant ssh
``` 

- Xdebugのインストール
自分のvagrantにインストールされているPHPのバージョンと、インストール先のリポジトリに合わせるために、yumのパッケージを確認します。
![17ABDFF7-3388-49A8-ADB8-858C76BB0C8F.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/7ccec377-cbea-a59c-cf40-abe4de256b72.png "17ABDFF7-3388-49A8-ADB8-858C76BB0C8F.png.png")


自分の場合は、PHPのバージョン7.1で@remiからなので、`--enablerepo`オプションをつけて実行しました。

```
yum list installed #yumのインストールパッケージを確認できる
yum install --enablerepo=remi-php71 php-xdebug
```

- Xdebugの設定ファイルを変更する
Xdebugの設定ファイルは、`/etc/php.d` のディレクトリ直下にあるので、ここを編集します。
（もしここにファイルが無ければ、`yum install` がコケているか、うまく行ってない可能性があるので再インストールをするか、`/etc/php.ini`ファイルを編集しましょう。）

```
sudo vim /etc/php.d/15-xdebug.ini
```

設定項目は以下の通りです。ファイルが結構膨大なので、vim内で検索を上手に使ってください。

※vimは、`/{word}`でファイル内検索ができ、キーボードのNを押すと次の検索結果に遷移できます。

```
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=10.0.2.2 
xdebug.remote_port=9001 # 9000だとたまにエラーが出るようなので、9000番以外の設定がおすすめ
xdebug.remote_log=/tmp/xdebug.log
```
こんな感じで、必要最低限

- zend_extension
Xdebugの拡張モジュールファイルです。これを指定してあげないと行けないので、もし動かなければこのファイルの存在確認を行いましょう。

- xdebug.remote～
リモート実行用の設定。「xdebug.remote_host」で接続するホストを設定。今回はlocalhostなので127.0.0.1。
remote_hostとは、VBから見たmacのIPアドレスのことです。ここの設定が結構迷うところなんですが、上記のような設定で試してみてください。もし駄目なら`ip a` `ip r`とかで調べてみてください。

以上設定が終わったら、php-fpmのリスタートをしましょう。念のため、nginxもリスタートさせると良いかもしれないです。

```
sudo systemctl restart php-fpm
sudo systemctl restart nginx #もし、読み込まれない場合
```


### 設定の確認
- `phpinfo();`で確認
	
そもそも先程作成したiniファイルがちゃんと読み込まれいてるか確認しましょう。`phpinfo`とかを使ってうまく出力してください。
もし、ここにファイルが無ければ、`php-fpm`でリスタートさせましょう。
![98BFD83B-25C9-4EF3-8D85-8264FFD65976.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/d1ad1ba7-7fcd-3166-3429-40aff58f8eac.png "98BFD83B-25C9-4EF3-8D85-8264FFD65976.png.png")


うまく読み込まれていると下の方にXdebugの設定内容が確認できます。
もし、うまくいかないときは、ここを確認してきちんと設定した項目が適応されているか、見ましょう。
![D7FC94E0-3964-4142-98E9-5F5F192972FC.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/9d226ca4-0d9c-0a63-5073-34a7856bcf9c.png "D7FC94E0-3964-4142-98E9-5F5F192972FC.png.png")

### PhpStormの設定
ここから、PhpStormの設定を行っていきます。まずは、PhpStorm側で実行するserverの環境を登録します。

Preferences ＞ Servers ＞ 
![8298F148-333A-433A-A1BB-D00752F26E45.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/3ca75c7e-6753-d26b-dc20-9579383a1135.png "8298F148-333A-433A-A1BB-D00752F26E45.png.png")


![FDA76EB9-750B-485D-9FF8-F1BA0151E4B3.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/b1abe80b-d4b4-c1e0-fa71-3fb8897616ba.png "FDA76EB9-750B-485D-9FF8-F1BA0151E4B3.png.png")


serversのところを選択すると、下のような設定画面が表示されるはずです。
設定項目は以下のように設定してください。

![2D067882-80E9-466F-9A72-F453D871ACA4のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/184666/de7b5d97-984f-cc07-1dd0-509bb6947b87.png "2D067882-80E9-466F-9A72-F453D871ACA4のコピー.png")

- name : 特になければHost名と一緒で大丈夫です。
-  Host : アクセスするホスト名が入ります。
	{ localhost }のように文字で設定しても、IPアドレスで指定しても大丈夫です。macでホスト名を変更していなければ、192.168.33.~になっているはずです。
もしわからなければ、`vagrantfile`の設定を確認してください。
- パスマッピング
	もし、vagrant上とローカル環境でフォルダをシンクさせている場合は、Use path ~ にチェックを入れて、パスマッピングをします。

- debugの設定
![CA6B410E-67E7-47BE-9A81-5E12FB648BD9.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/0cb98144-e4eb-1493-9996-5c8bdb27a77d.png "CA6B410E-67E7-47BE-9A81-5E12FB648BD9.png.png")
![0B861C85-BAD6-4FE1-BF65-9FFC022D81E2のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/184666/ba98ea20-535c-4490-9e86-1104ef0bf5a8.png "0B861C85-BAD6-4FE1-BF65-9FFC022D81E2のコピー.png")



＋マークから、PHP Remote Debugを選択して、作成します。
nameは自分の好きな名前で、serverは先程追加した項目が選択できるようになっているはずなので、選択。
Ide key はなくてもいいのですが、空ではエラーが出てしまうので、今回は`PhpStorm`と入力しましょう。

ここまでで設定は終了です。お疲れ様でした。
しかし、これで動くかは別の問題なので、最後気合を入れましょう。

タブから、
Run > Break at ~
![60CA9F60-0F54-42E3-AEB9-53BB2E1B29DF.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/50fc9033-85fc-a420-87f7-b3bb657e6f70.png "60CA9F60-0F54-42E3-AEB9-53BB2E1B29DF.png.png")

にチェックを入れます。
これは、ページが読み込まれたタイミングでデバッグが実行されるというようなものです。とりあえず、これを押して動作確認をしましょう。

いかにもな虫のボタンを押すと下に、Debuggerが開きます。
そして、右の電話マークをクリックしてアクティブにしましょう。



![25B30795-0A5E-4B35-B88F-23C5489FE264.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/ac4dd3e9-f8ad-800c-a843-a4f5c387679a.png "25B30795-0A5E-4B35-B88F-23C5489FE264.png.png")

押すとこんな感じに
![C5906BB2-A779-4C93-94D0-7F16C948457E.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/b7e35792-a16b-d3c3-46e3-26737f64a844.png "C5906BB2-A779-4C93-94D0-7F16C948457E.png.png")

そして、実行環境のリロードを行って、デバッガーに表示されれば成功です。
動作確認ができたら、先程のBreak at first ~をチェックを外して、
ソースコードの隣の列にチェックを付けます。
![36994DAE-2057-4E93-ACC8-B747C342EAA1.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/fa403083-edd9-6451-872f-2f5781a29c29.png "36994DAE-2057-4E93-ACC8-B747C342EAA1.png.png")


これでこの処理がなされるページをリロードすると、
ここまですべてうまく成功していれば、こんな感じでデバッグができると思います。
![09768855-1BBF-4497-8C14-06B198AE7C0D.png.png](https://qiita-image-store.s3.amazonaws.com/0/184666/3dde6222-964a-7f96-ce35-bc1f0d6f4cff.png "09768855-1BBF-4497-8C14-06B198AE7C0D.png.png")


お疲れ様でした。以上が設定になります。
おそらく個人の実行環境や、設定ファイルによってうまくいかないこともあるかもしれないですが、トラブルシューティングの項目を見てうまく対処してみてください。（後日充実させていきます。）

詳しい使い方に関しては、ここの記事を参考にすると良いかもです。
[PhpStormのデバッグを使いこなす - Qiita](http://qiita.com/Vexus2/items/333dbb0faf2d62777c9e)

# トラブルシューティング

[PHP - phpstormとmampの環境でphpのデバッグができない(45756)｜teratail](https://teratail.com/questions/45756)

https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html

このあたりの記事を参考にしました。

## 参考資料
[PhpStormを使う。XAMPPのPHPでXdebug設定 | TECH Projin](http://tech.pjin.jp/blog/2016/06/30/phpstorm-xampp-xdebug-setting/)
[PhpStormでデバッグしてみる - yk5656 diary](http://d.hatena.ne.jp/yk5656/20160320/1461167256)