PCOV の使い方
PHPUnit のコードカバレッジ解析処理を高速化する方法として、phpdbg を使用するという方法がありましたが、 PHPUnit 10 からは phpdbg は非対応になり、使用することができなくなりました。 PHPUnit 10 で使用できるコードカバレッジドライバーは PCOV もしくは Xdebug のどちらかです。
PCOV とは?
PCOV はコードカバレッジ解析専用の PHP の拡張(エクステンション)です。 Xdebug でもコードカバレッジ解析はできますが、Xdebug はあくまでもデバッガーです。 デバッガーとして作られているがゆえに、無駄なオーバーヘッドが発生したりします。 例えば、CI などでコードカバレッジ解析を行いたいといった場合、 ステップ実行や関数ヘルパーなどのデバッガーとしての機能は必要なかったりしますが、 Xdebug を使用しているというだけでオーバーヘッドが発生し処理速度の低下を招いてしまいます。 PCOV はコードカバレッジ解析専用に作られているため、無駄なオーバーヘッドが無く処理速度が高速です。 Xdebug のコードカバレッジ解析が遅くて困っているといった場合には、PCOV が役に立つのではないでしょうか。 ちなみにですが、PCOV と Xdebug では実装方法が異なるため、コードカバレッジ解析の結果がほんの少しだけ異なってしまう可能性があるので注意してください。
PHP に PCOV をインストールする
PCOV のインストール方法は環境によって異なりますが、 この記事では XAMPP にインストールする方法を紹介します。 他の環境にインストールしたい場合は公式のドキュメントを参考にしてください。
XAMPP にインストールする場合
PCOV は PHP の拡張(エクステンション)なので、XAMPP の場合は DLL ファイルです。 PECL のサイトからダウンロードできます。
https://pecl.php.net/package/pcov
ダウンロードする DLL ファイルは、インストールする環境の PHP によって異なりますので、環境に合わせて選択してください。
phpinfo()
で確認しましょう。「Architecture」欄や「PHP Extension Build」欄を見れば、どの DLL ファイルをダウンロードすれば良いかわかると思います。



ダウンロードしたら解凍して、その中にある "php_pcov.dll" ファイルを、XAMPP の PHP の ext ディレクトリ(例:C:/xampp/php/ext)に持っていきます。

次に、先ほど ext ディレクトリに追加した "php_pcov.dll" ファイルを PHP が読み込むように php.ini ファイル(例:C:/xampp/php/php.ini) に追記し、Apache を再起動します。
ちなみにですが、コマンドラインから php
コマンドを実行する場合は、Apache の再起動は必要ありません。
extension=pcov
インストールできたか確認する
phpinfo()
を表示し、PCOV の項目が表示されていればインストール完了です。

PCOV を使用する
PHPUnit から使用する場合、特に設定は必要ありません。 PHPUnit でコードカバレッジ解析を行うと、自動で PCOV が使用されるようになります。
.\vendor\bin\phpunit --coverage-html coverage
PCOV が使用されていれば、出力内容の Runtime
のところに with PCOV
と表示されますので確認しましょう。
PHPUnit 10.2.6 by Sebastian Bergmann and contributors.
Runtime: PHP 8.1.17 with PCOV 1.0.11
Configuration: C:\Users\Test\pcov-demo\phpunit.xml
............................................................... 63 / 108 ( 58%)
............................................. 108 / 108 (100%)
Time: 00:01.234, Memory: 44.00 MB
OK (108 tests, 1645 assertions)
Generating code coverage report in HTML format ... done [00:07.492]
PCOV の設定を変更する
PCOV の設定を変更する必要性はあまり無いとは思いますが、 もし変更したい場合は、php.ini もしくはコマンドラインから変更できます。
php.ini から変更する場合
pcov.enabled=0
コマンドラインから変更する場合
コマンドラインから変更する場合は、php
コマンド の -d
オプションが使用できます。
php -d pcov.enabled=0 .\vendor\bin\phpunit --coverage-html coverage