[EC-CUBE4]VSCode+PHP Debug(xdebug)でEC-CUBE4をデバッグする（ブレークポイント、ステップ実行とか）

# 環境

| # | バージョン |
|:--|:--|
| OS  | Ubuntu 18.04(LTS)  |
| EC-CUBE  | 4.0.2  |
| PHP  | 7.2.18  |
| PHPライブラリ・拡張  | [システム要件（公式）を参照](http://doc4.ec-cube.net/quickstart_requirement)  |
| xdebug  | 2.7.2 stable  |
| VSCode  | 1.33.1  |
| PHP DEBUG<br>※VSCodeのxdebug拡張  | 1.13.0  |
| HTTPサーバ  | 簡易サーバ<br>EC-CUBE(の開発フレームワークSymfony)に同梱されている。<br>bin/console server:run で起動 |

# やりたいこと

- ローカル開発環境にセットアップしたEC-CUBE4のデバッグ
- VSCode + PHP Debug拡張を利用

例のごとく整理された情報~~が皆無~~を発見できない。。微妙に近い情報を徘徊しながら直感を頼りに試行錯誤してなんとかできました。
普段、EC-CUBEはもちろんPHPも使わない身としては苦行すぎる。(T_T)
（`VSCode`凄い！というのがわかったのは収穫！）

# 手順

以下のような手順を踏みます。肝となる`起動スクリプトの作成`と`launch.json`以外はごく一般的な手順です。

- PHP + ECCUBEセットアップ
- XDEBUGのインストール
- VSCODEのインストール
- PHP DEBUG拡張のインストール
- 起動スクリプトの作成
- PHP DEBUG(launch.json)の設定
- 実行

## PHP + ECCUBEセットアップ

[インストール手順(公式サイト)](http://doc4.ec-cube.net/quickstart_install)に従いします。
PHP環境構築は以下の記事を参考にして頂くとはやいかもです。

[[EC-CUBE4]ワンライナー/必要なPHP拡張ライブラリのインストール - Qiita](https://qiita.com/s-katsumata/items/caea6821cb1f7bbd975e)


## XDEBUGのインストール

以下の記事を参考にさせて頂きました。php.iniやphp,xdebug.soのバージョンは異なります。

[Xdebugのインストール – ABC Blog](https://linuxserver.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/php/xdebug-install/)

### Developper Packageのインストール

```
sudo apt install php7.2-dev
```

### XDebugのインストール

```
sudo pecl install xdebug
```

### PHP.ini設定

php.iniに以下を追記します。centosだと `/etc/php.ini`ですが、ubuntuは`/etc/php/7.2/cli/php.ini`にあります。

```php:/etc/php/7.2/cli/php.ini 
zend_extension="/usr/lib/php/20170718/xdebug.so"   ← locate xdebug.so

; see http://xdebug.org/docs/all_settings
html_errors=on
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
```

### 確認

```
$ php -i | grep xdebug 
xdebug
xdebug support => enabled
xdebug.auto_trace => Off => Off
～以下、省略～
```

### VSCODEのインストール

[公式サイト](https://code.visualstudio.com/)からダウンロードしてインストールします。

- PHP DEBUG拡張のインストール

![](https://i.gyazo.com/a901d644f32e5e87cc5f4a4904ce0e95.png)

### 起動スクリプトの作成

以下のサーバ起動用のPHPスクリプトを作成します。
場所は任意でが以下はEC-CUBEを配置したルートディレクトリ直下に作成した例です。
スクリプト名（後述する`launch.json`で指定）も任意ですが、`runserver.php`としました。

```php:<root_directory>/runserver.php
<?php
$cwd = getcwd();
$output = shell_exec( $cwd . '/bin/console server:run');
echo "<pre>$output</pre>";
?>
```

### PHP DEBUG(launch.json)の設定

VSCodeのデバッグタブをクリックすると左上に歯車アイコンがあるのでクリックします。すると`launch.json`が開くので編集します。

![](https://i.gyazo.com/91754465b14043eb58665f27513948b0.png)

```json:launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Custom Xdebug setting",
      "type": "php",
      "request": "launch",
      "port": 9000,
      "program": "${workspaceRoot}/runserver.php",
      "cwd": "${workspaceRoot}"
    }
  ]
}
```

### 実行

以上で設定は完了です。

VSCodeのデバッグタブの構成リストに`launch.json`の`name`に指定した名前が表示されるので、選択して、実行アイコンををクリックするとサーバが起動します。

![](https://i.gyazo.com/2996ca1f4498df4090efdfc7248b628d.png)

起動中に何度かDeprecated例外が発生して不安になりますが、無視して問題ない（？）ようです。操作パネルで「続行」します。
**例外の例**
![](https://i.gyazo.com/a25b83ae482ed62bdeb6185dc657fe33.png)
**操作パネル**
![](https://i.gyazo.com/ce53a7910fc4ebc416a93e97c73c7cb0.png)
**無視する方法**
デフォルトだとEverythingにチェックが入っているので外します。
![](https://i.gyazo.com/22a87c427bd4787b0df030c3d68b2058.png)

以下の表示がでれば無事に待ち受け状態になりました。

![](https://i.gyazo.com/516bed335bdea4e4eb2ffce70d1400b1.png)

任意の行にブレークポイントを設定して変数など確認できます。（ルーティング処理でも例外発生します）
おつかれさまでした。m(_ _)m

![](https://i.gyazo.com/44b8faac914154d02e7750cda82250bc.png)