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 ファイルをダウンロードすれば良いかわかると思います。

phpinfo1.png
pecl1.png
pecl2.png

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

explorer.png

次に、先ほど ext ディレクトリに追加した "php_pcov.dll" ファイルを PHP が読み込むように php.ini ファイル(例:C:/xampp/php/php.ini) に追記し、Apache を再起動します。 ちなみにですが、コマンドラインから php コマンドを実行する場合は、Apache の再起動は必要ありません。

php.ini
extension=pcov

インストールできたか確認する

phpinfo() を表示し、PCOV の項目が表示されていればインストール完了です。

phpinfo2.png

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 を無効(pcov.enabled=0)にする場合
php.ini
pcov.enabled=0

コマンドラインから変更する場合

コマンドラインから変更する場合は、php コマンド の -d オプションが使用できます。

例:PCOV を無効(pcov.enabled=0)にする場合
php -d pcov.enabled=0 .\vendor\bin\phpunit --coverage-html coverage

参考サイト

関連記事

PHP での開発効率を向上させるために、PHP 自体に機能を追加するという方法があります。Xdebug とは?Xdebug は、PHP での開発効率を向上させるためのさまざまな機能を提供してくれる PHP の拡張機能(エクステンション)です。Xdebug でできることは下記の6つです。ステップ実行:スクリプトの実行中に ...
PHP_CodeSniffer や PHPStan などで、コードの文法的な正しさは確認できますが、そのコードが本当に正しい動作を行っているかどうかを確認するためには、やはり最終的には動作させてみるしかありません。PHPUnit とは?PHPUnit は、PHP のテストフレームワークです。その名前からわかる通り、基本 ...
PHP のコードを実行する前に、バグがあるかどうか調べられると便利だとは思いませんか?PHP はスクリプト言語ですので、いくら文法的に正しいコードであっても、実際に実行させるまでバグか発生するかどうかわからないという、スクリプト言語であるが故の本質的な問題を抱えています。C や Java など他のコンパイル言語ではコン ...
プログラムを書いていると気になるのがコードの読みやすさです。複数人で開発している場合などは特にコードの読みやすさは重要です。PHP_CodeSniffer とは?PHP_CodeSniffer は、PHP のコードがちゃんとコーディング規約に沿って記述されているか検査したり、コーディング規約に違反している個所を自動的に ...

記事検索

最新記事

人気記事

RSSフィード

お知らせ

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(Twitter) もしくは、お問い合わせより、お願いします。

  • フィードバックの送信が完了しました。