Magento2+Vagrant+xdebugでリモートデバッグ


#Xdebug
PHP のデバッグツールである Xdebug にはリモートデバッグという機能があります。リモートデバッグ (Remote Debugging) とは、実行中の PHP とは別の場所にデバッグを制御するものが存在する方式です。
Xdebugのリモートデバッグを使用すると、データ構造を解釈することができます。Xdebugの拡張モジュールでは、PHPスクリプトのデバッグおよびプロファイリング機能を提供します。また、Xdebugは、PHP 5.4、5.5、5.6、7.0、7.1、7.2、および7.3をサポートしています。
print_r() やvar_dump() などの組み込み(ビルトイン)関数、またはログファイルを使用してPHPコーディングをデバッグできますが、開発中に速度が低下します。しかし、Magento2 + xdebugを使用することで開発中の速度が向上し、楽になります

#Xdebugの設定 
##前提条件
Preconditions
1.Magento2+Vagrant環境構築済み。
※ Magento2+Vagrant 環境がまだできていない場合は、このチュートリアル magento2：[magento2：開発環境構築 Vagrant](https://qiita.com/kumanizm/items/67de430dda5c80088906)
2.	PHPバージョン7.1以上。
3.	PHPSTORMインストール済み。

##Xdebugのインストール（vagrant中）
```bash:vagrant中
sudo pecl install xdebug
```

サーバー側では、次のoutputが得られました。

```bash:vagrant中
Build process completed successfully
Installing '/usr/lib/php/20151012/xdebug.so'
install ok: channel://pecl.php.net/xdebug-2.6.1
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/lib/php/20151012/xdebug.so" to php.ini
```

次に、`php.ini`構成ファイルを編集して、xdebugモジュールを有効にする必要があります。
`/etc/php/7.1/fpm/php.ini` または `/etc/php/7.1/fpm/conf.d/20-xdebug.ini`


```bash:vagrant中
sudo vim /etc/php/7.1/fpm/php.ini
```

```ini:/etc/php/7.1/fpm/php.ini
zend_extension=/usr/lib/php/20151012/xdebug.so
xdebug.remote_host=192.168.33.10
xdebug.remote_enable=1
xdebug.remote_port=9900
xdebug.idekey="PHPSTORM"
xdebug.remote_log="/tmp/xdebug.log"
```

**xdebug.remote_host**： 特定のドメインまたはIPアドレスに設定できます。この場合は`192.168.33.10`  に設定します（私のvagrantプライベートネットワークIP）。
**xdebug.remote_port**： デフォルトで特定のポート`9000`に設定できます。
**xdebug.idekey**： `PHPSTORM` IDを使用しているため`PHPSTORM`に設定しました。
**xdebug.remote_log**：すべてのリモートデバッガー通信が記録されるファイル名として使用されます。


**設定が終わった後、Webサーバーを再起動します。**
Apacheの場合 

```bash:vagrant中
sudo /etc/init.d/apache2 restart
```

Nginxの場合 

```bash:vagrant中
sudo /etc/init.d/nginx restart
```
xdebugが正常に有効化されるかどうかを確認するために、`phpinfo()` を[magento-folder]/pub/index.phpに追加します。私の場合、それは`/var/www/html/pub/index.php`でした。このようなoutputが得られるはずです。


![xdebug-enabled-successfully.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/d36d2b30-ad11-d08c-02b6-e2d663bc1496.png)

##XDebugクライアントの構成

私の場合、PHPStorm IDEAを構成します。phpstormでプロジェクトを開きます。
`php.ini`で設定したとおりに`xdebug.remote_port`のポートを設定します。

```phpstorm:phpstorm
PHPSTORM -> Preference -> Languages & Frameworks -> PHP -> Debug
```
![phpstorm-preferance-xdebug.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/56faeb13-49c9-f4ac-f05f-b6e6c2e17c63.png)

###PHPstorm 構成

#### Deployment （デプロイ）構成
```phpstorm:phpstorm
phpstorm -> Preference -> Build, Execution, Deployment -> Deployment
```

 [+]アイコンをクリックして、新しいリモートサーバーを追加します。
![phpstorm-preferences-Deployment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/5796e4de-0572-e7a4-339c-439719c5f876.png)

**host** 特定のドメインまたはIPアドレスに設定できます。
**username**リモートサーバーのユーザー名です。vagrantを使用しているため、ユーザー名は`vagrant`になります。
**password** リモートサーバーのパスワードです。`vagrant`を使用しているため、パスワードは`vagrant` になります。
**root path**  vagrant Magentoフォルダーの絶対場所`/var/www/html/`に設定します。


#### サーバー構成

```phpstorm:phpstorm
PHPSTORM -> Preference -> Languages & Frameworks -> PHP -> Servers
```
[+]アイコンをクリックして新しいサーバーを追加します。

![phpstorm-preferences-Servers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/bb0a7082-fc93-66ad-6ea0-adb770de2492.png)


**host** 特定のドメインまたはIPアドレスに設定できます。
**Use path mapping** チェックボックスにチェックを入れます。
**under project files** vagrant Magentoフォルダーの絶対場所`/var/www/html/`に設定します。

#### Run/debug 構成
```phpstorm:phpstorm
PHPSTORM ->Toolbar ->Edit Configurations
```
1. [+]アイコンをクリックして、新しいデバッグを追加します。
2. **PHP Remote Debug**を選択します 。

![phpstorm-run:debug-edit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/98c54dcf-ca05-396d-8d90-45836c700e25.png)

![phpstorm-run:debug.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/5f161971-45e1-c000-05f9-03105dd6db66.png)

**Server** 上の手順で既に作成したサーバーを選択します。
**IDE key** `xdebug.idekey`の`php.ini` で設定したとおりにIDE key を設定します

##ブラウザ構成
1. xdebug chrome拡張機能 [Xdebug helper](https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc?utm_source=chrome-ntp-icon)をインストールします。
2. 拡張機能をインストール後、IDE keyを設定します。 
    1. `chrome -> toolbar-> xdebug chrome extension icon` を右クリック。

    ![cheome-Xdebug-helper-options.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/c1c0a2be-de68-1a5e-cf03-5bf43a99e640.png)
    2.Phpstormを選択します。`xdebug.idekey`の`php.ini` で設定したとおりにIDE keyを設定します
![chrome-Xdebug-helper-idekey.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/5167f6ab-afe9-fa4d-1d50-eab3a058390f.png)
    3.保存ボタンをクリック

2. xdebug chrome拡張機能を有効にします。
  1. `chrome -> toolbar-> xdebug chrome extension icon` を左クリック。
  
    ![cheome-Xdebug-helper-enable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/3e4fc3ed-9106-c5a7-2ed3-3dd674506234.png)
   2. `debug`をクリックします。
   
#デバッグの時間！

```phpstorm:phpstorm
PHPSTORM -> toolbar 
```
1. PhpStormツールバーで ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/11bf7e7e-37eb-871a-f667-48c9df60384d.png)
を切り替えて受信PHPデバッグ接続の待機を開始するか、メインメニューからRun| PHP デバッグ接続のリッスンを開始を選択します。
 

![phpstorm-toolbar-listen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/a2b721dc-bd56-8aa1-3bca-a1f8a20607a1.png)

2.コードにブレークポイントを設定します。ブレークポイントは、Magentoの `pub/index.php` に設定したPHPコンテキス内トに設定できます。
![phpstorm-breakpoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275433/ae4c8a20-c9b0-1c91-8190-501a1fdf6f70.png)
3. ブラウザでWebサイトをリフレッシュしたら、自動的にPHPstormにリダイレクトされます。
https://gyazo.com/c11de6afa9e6b666a5ff3ef7b983a37d