VScode PHP/Laravel デバッガーを導入する

# 概要

- 「Xdebug」の導入方法をまとめる。なお、VScodeでの使用を考慮して導入する。

# 詳細

- 筆者のPCはMacである。
- Homebrewが導入され、使える状態になっている。
- MacのローカルにHomebrewを用いてPHPがインストールされている。

# 方法

1. Xdebugのインストール
    1. 下記コマンドを実行してXdebugをインストールする。

        ```shell
        pecl install xdebug
        ```

    1. 「Build process completed successfully」と表示されたことを確認する。こちらが出力されれば正常にインストールされている。
    1. ターミナルに出力されているインストールログの最後から3行目に表示されている「Installing」の後に記載されているパスをメモする。筆者の出力例を下記に記載する。↓筆者の場合

        ```
        Installing '/opt/homebrew/Cellar/php/8.1.6/pecl/20210902/xdebug.so'
        ```

1. php.iniへの記載
    1. 下記の方法でMacのローカルのphp.iniファイルの場所を特定する。
        - [php.iniファイルの場所をターミナルで確認する](https://qiita.com/miriwo/items/acb49b0a97b5d5fa47fd)
    1. ちなみに筆者の場合、php.iniファイルは下記のパスに存在した。
        - `/opt/homebrew/etc/php/8.1/php.ini`
    1. php.iniファイルを開き、下記の一行を追記する。

        ```php.ini
        zend_extension="xdebug.so"
        ```

    1. `$ php -v`コマンドを実行してXdebugのバージョンが表示されればXdebugの導入は完了

        ```
        PHP 8.1.8 (cli) (built: Jul  8 2022 10:58:31) (NTS)
        Copyright (c) The PHP Group
        Zend Engine v4.1.8, Copyright (c) Zend Technologies
            with Xdebug v3.1.5, Copyright (c) 2002-2022, by Derick Rethans
            with Zend OPcache v8.1.8, Copyright (c), by Zend Technologies
        ```

1. VScodeの拡張機能
    1. PHP Debugの拡張機能をインストールする。

        ![拡張機能__PHP_Debug.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d28c9073-84a0-19b0-f3ca-773de8c8b1fa.png)

    1. デバッグを行いたいアプリケーションのルートディレクトリをカレントディレクトリとしてVScodeを開く。（laravelアプリケーションならアプリ名ディレクトリなど）
    1. サイドバーに再生ボタンと虫のアイコンが追加されるのでこちらをクリックする。表示された「launch.jsonファイルを作成します」をクリックする。

        ![PostContractUseCaseTest_php_—_pf_backend_と_「VScode_PHP_Laravel_デバッガーを導入する」を編集_-_Qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/2aa48126-e2f3-db6e-493f-332e94ec3c02.png)

    1. 下記のようにlaunch.jsonファイルが自動生成される。基本デフォルトのままで大丈夫だが、portの部分だけ変更する必要がある。こちらは皆さんの環境に合った任意の情報を記載する。

        ```launch.json
        {
            // IntelliSense を使用して利用可能な属性を学べます。
            // 既存の属性の説明をホバーして表示します。
            // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
            "version": "0.2.0",
            "configurations": [
                {
                    "name": "Listen for Xdebug",
                    "type": "php",
                    "request": "launch",
                    "port": 9003
                },
                {
                    "name": "Launch currently open script",
                    "type": "php",
                    "request": "launch",
                    "program": "${file}",
                    "cwd": "${fileDirname}",
                    "port": 0,
                    "runtimeArgs": [
                        "-dxdebug.start_with_request=yes"
                    ],
                    "env": {
                        "XDEBUG_MODE": "debug,develop",
                        "XDEBUG_CONFIG": "client_port=${port}"
                    }
                },
                {
                    "name": "Launch Built-in web server",
                    "type": "php",
                    "request": "launch",
                    "runtimeArgs": [
                        "-dxdebug.mode=debug",
                        "-dxdebug.start_with_request=yes",
                        "-S",
                        "localhost:0"
                    ],
                    "program": "",
                    "cwd": "${workspaceRoot}",
                    "port": 9003,
                    "serverReadyAction": {
                        "pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
                        "uriFormat": "http://localhost:%s",
                        "action": "openExternally"
                    }
                }
            ]
        }
        ```

# 付録

### php -vでファイルが見つからない警告が出る

- 下記手順を実施
1. Xdebug用の設定ファイルの用意
    1. php.iniが設置されていた1階層上のPHPバージョンのディレクトリにあるconf.dディレクトリの中に`99-xdebug.ini`というファイルを作成する。
        - 筆者の場合、`/opt/homebrew/etc/php/8.1/php.ini`にphp.iniがあった。
        - そのため`99-xdebug.ini`は`/opt/homebrew/etc/php/8.1/conf.d`直下に作成する。
        - これをtouchコマンドで表すと下記の様になる。

            ```shell
            touch /opt/homebrew/etc/php/8.1/conf.d/99-xdebug.ini
            ```

    1. 作成した`99-xdebug.ini`に下記の内容を記載する。（設定内容の詳細はこちらに記載 → [https://xdebug.org/docs/all_settings](https://xdebug.org/docs/all_settings)）

        ```/opt/homebrew/etc/php/8.1/conf.d/99-xdebug.ini
        [xdebug]
        zend_extension = Xdebugのインストールの「Installing」の後に記載されているパスを記載
        xdebug.mode = debug
        xdebug.start_with_request = yes
        ```

# 参考文献

- [https://xdebug.org/](https://xdebug.org/)
- [https://xdebug.org/docs/all_settings](https://xdebug.org/docs/all_settings)
- [https://xdebug.org/docs/upgrade_guide/ja](https://xdebug.org/docs/upgrade_guide/ja)