Xdebugはパフォーマンスにインパクトを与えます。本来、Xdebugが必要なのはテストカバレッジやプロファイル取得、トレースなどを行うデバック実行の時のみです。この記事では必要な時にのみXdebugをオンにして、普段はオフにする方法を紹介します。Composer と単体テストを含むコマンドラインスクリプトをはるかに高速に実行できます。
Xdebugをオフ
普段はオフにします。php --ini
でphp.ini(またはxdebug.ini)の場所を調べコメントアウト。
;zend_extension = "xdebug.so"
コンソールで実行
php -dzend_extension=xdebug.so
xdebug付きで実行するときはこのようにxdebugでを読み込んで実行します。しかし実際にはテストカバレッジで後述するようにcomposerコマンドにすると実行も便利です、プロジェクトで必要なコマンドとして記録できます。
テストカバレッジ
カバレッジの計測はXdebugよりPhpdbgが、Phpdbgよりpcovが高速です。
- https://dev.to/swashata/setup-php-pcov-for-5-times-faster-phpunit-code-coverage-3d9c
- https://y-ahiru.hatenadiary.jp/entry/2019/08/07/020039
pcov
pcovインストール
pecl install pcov
詳しくはpcov installを参照。
テストカバレッジを取るときのcomposerコマンドをcomposer.json
に追記。pcovとxdebugでの実行を併記することで異なる環境でカバレッジ取得方法が選べます。
scriptsに記述
{
"scripts" :{
"pcov": ["php -d pcov.enabled=1 ./vendor/bin/phpunit --coverage-text --coverage-html=build/coverage --coverage-clover=coverage.xml"],
"coverage": ["php -dzend_extension=xdebug.so ./vendor/bin/phpunit --coverage-text --coverage-html=build/coverage --coverage-clover=coverage.xml"],
}
}
実行はcomposerコマンドで行います。
pcovの場合
composer pcov
xdebugの場合
composer coverage
PhpStorm
PhpStormのオンデマンドモードを有効にするための設定を行います。このモードでは、グローバルPHPインストールの Xdebug を無効にし、コマンドラインスクリプトをデバッグしているとき、またはコードカバレッジレポートが必要な場合にのみ、オンデマンドで自動的にXDebugを有効にします。
PhpStormでデバッガーを使ってブレイクやステップトレースにするためにxdebug.soを読み込む設定にします。
Language & Frameworks > ... > PHP > CLI Interpreter > "..." でCLI Interpreter画面を表示してDebugger extensionに xdebug.so (必要ならフルパスで)を入力します。
Debuggerにバージョン番号が出れば認識されています。