Hyper-V上のLaravel HomesteadをIntelliJ IDEAからxdebugでデバッグする方法です。特にネットワークの設定にHyper-V環境特有の注意が必要でしたので記しておきます。
2022-10-31 追記
以下環境にて、新たに仮想スイッチを作成すること無く、単にvagrant up
後に接続先スイッチとしてDefault Switchを指定し、InteliJ IDEAの設定とChromeの設定のみを行えれば、デバッグ可能でした。
- Windows 11 Pro (22H2)
- IntelliJ IDEA 2022.2.3
- Chrome 106
- Vagrant 2.3.2
- PHP 7.4
- Vagrant Box laravel/homestead (hyperv, 9.6.0)
- PHP Package laravel/homestead v10.17.0
追記ここまで
筆者の環境
- 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.local
やhomestead.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に接続されます。