PHP
xdebug

必要な時にのみxdebugをオン

More than 1 year has passed since last update.

xdebug使用したPHPの実行はとても遅く、本来xdebugが必要なのはテストカバレッジやプロファイル取得、トレースなどを行うデバック実行の時のみです。

必要な時にのみxdebugをオンにして、その他のカバレッジなしのphpunit実行やcomposer, php-cs-fixer, phpstanなどのツールコマンドはxdedug無しで実行する方法を紹介します。


xdebugをオフ

普段はオフにします。php --iniでxdebug.iniの場所を調べコメントアウト。


xdebug.ini

;zend_extension = "/path/to/my/xdebug.so"



テストカバレッジ

テストカバレッジを取るときのcomposerコマンドをcomposer.jsonに追記

{

"scripts" :{
"coverage": ["php -dzend_extension=xdebug.so ./vendor/bin/phpunit --coverage-text --coverage-html=build/coverage"],
}
}

phpunit.xml.distの<logging>の項目はphpunitのみ実行した時にxdebugが読み込まれてないという警告が出るので(実害はないですが)削除します。

実行はcomposerコマンドで行います。

composer coverage


PhpStorm

PhpStormでデバッガーを使ってブレイクやステップトレースにするためにxdebug.soを読み込む設定にします。

Language & Frameworks > ... > Advanced > Configuration optionsでdirectiveにzend_extension、値をxdebug.soと設定するとxdebug付きでPHP実行されるようになります。

424e3d89-f2a0-1db9-0de1-e4dd8f993285.png


Travis CI

特定のPHPバージョンのテストだけカバレッジを取得するにはbefore_scriptscriptを以下のようにします。

before_script:

- if [[ $TRAVIS_PHP_VERSION = '7.1' ]]; then COVERAGE="--coverage-clover=coverage.clover"; else phpenv config-rm xdebug.ini; fi
script:
- ./vendor/bin/phpunit $COVERAGE;

scrutinizer-ci.comでカバレッジを取得してる場合にはafter_scriptを以下のように変更します。

after_script:

- if [[ $TRAVIS_PHP_VERSION = '7.1' ]]; then wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi

パフォーマンスが大幅に向上します。

参考URL BEAR.Resource/.travis.yml