Hyper-V上のLaravel HomesteadをIntelliJ IDEAからデバッグ


Hyper-V上のLaravel HomesteadをIntelliJ IDEAからxdebugでデバッグする方法です。特にネットワークの設定にHyper-V環境特有の注意が必要でしたので記しておきます。

筆者の環境

  • Windows 10 Pro (1903)
  • IntelliJ IDEA 2019.2.3
  • Chrome 77
  • Vagrant 2.2.5
  • PHP 7.3
  • Vagrant Box laravel/homestead (hyperv, 8.2.0)
  • PHP Package laravel/homestead v9.2.2

仮想スイッチの設定

仮想マシンが接続する仮想スイッチが、既定で用意されているDefault Switchになっていると、xdebugからWindows側への接続が妨げられるため、新たに作成した仮想スイッチに接続するようにしてください。Hyper-Vマネージャーの仮想スイッチマネージャーより、以下のように外部ネットワークに接続する仮想スイッチを作成します。

Windowsの設定のネットワークの設定より以下のように、追加した仮想スイッチのIPv6を無効にします。なお、従来のイーサネット接続のIPv4, IPv6は無効になっていますが、仮想スイッチの作成によるものであり、異常ではありません。

初回のvagrant upで仮想マシンを作成する際に接続先スイッチを問われますので、上記で作成した仮想スイッチを選択してください。既に仮想マシンを作成していた場合は、vagrant destroyで一旦削除してください。

> vagrant up
Bringing machine 'YOURPROJECT' up with 'hyperv' provider...
==> YOURPROJECT: Verifying Hyper-V is enabled...
==> YOURPROJECT: Verifying Hyper-V is accessible...
==> YOURPROJECT: Importing a Hyper-V instance
    YOURPROJECT: Creating and registering the VM...
    YOURPROJECT: Successfully imported VM
    YOURPROJECT: Please choose a switch to attach to your Hyper-V instance.
    YOURPROJECT: If none of these are appropriate, please open the Hyper-V manager
    YOURPROJECT: to create a new virtual switch.
    YOURPROJECT:
    YOURPROJECT: 1) DockerNAT
    YOURPROJECT: 2) External Switch
    YOURPROJECT: 3) Default Switch
    YOURPROJECT:
    YOURPROJECT: What switch would you like to use? 2

Bonjourの設定

WindowsからのBonjourによる仮想マシンの検索を有効にするため、Bonjour Print Servicesをインストールしてください。

これにより、例えばHomestead.yamlの記載が、

hostname:example

であったとき、Windows側でexample.localのホスト名を解決できるようになります。Windows側でping example.localなどのコマンドを実行してホスト名が解決できることを確認できます。

Homesteadの設定

Homestead内にて、PHPのバージョンを確認します。

php -v

該当バージョンのPHPについて、設定を変更します。

sudo vi /etc/php/7.3/fpm/conf.d/20-xdebug.ini

20-xdebug.iniに、所望のIDE Key(PHPSTORM等)を設定します。

xdebug.idekey = PHPSTORM

再起動します。

sudo service php7.3-fpm restart

InteliJ IDEAの設定

[File]-[Settings] の [Languages & Frameworks]-[PHP]-[Servers] にて以下を設定します。

  • Hostに、Homesteadのホスト名(example.localhomestead.test)を設定。
  • DebuggerにXdebugを選択。
  • Project filesのルートのAbsolute path on the serverに、Homestead上のパス(通常/home/vagrant/code)を設定。

[Run]-[Edit Configurations]にて以下を設定します。

  • PHP Remote Debugを追加。(Filter debug connection by IDE keyは設定しなくても構いません)

[Run]-[Debug]より上記で追加したConfigurationを実行します。

なお、IntelliJ IDEAは、xdebugからの接続をListenする側になります。

Chromeの設定

Xdebug helperをインストールします。

Xdebug helperのオプションより、Homesteadに設定したIDE key(PHPSTORM等)を設定します。

Xdebug helperのメニューより、Debugを開始します。

以上で、Chromeよりデバッグ対象のページにアクセスすれば、xdebugからIntelliJ IDEAに接続されます。