PHPUnit - テストカバレッジをHTMLレポートで出力 / phpdbg + php-code-coverage + PHPUnit

# はじめに

PHPUnit をコマンド実行すると結果が質素なテキストで出力されます。
それはそれで問題ないのですが、ビジュアルでインパクトある出力ができると、チーム内で結果を共有する時に会話がしやすかったりなど、役立つことも多いと多いはずです。

そんな訳で、PHPUnit の実行結果を HTML で確認することができる手法はないかと調べていたら **php-code-coverage** なるものを見つけたので、以前構築したローカル開発環境に導入する手順をまとめてみました。

# 想定環境

本記事は以下の環境にて動作確認を行っています。

- OS : Windows / macOS
- 仮想環境 : VirtualBox + Vagrant
- コンテナ : Docker Container by docker-compose [^1]
- PHP
 - PHP 7.2.11
 - php-code-coverage 6.1.3
 - PHPDBG 7.2.11
 - PHPUnit 7.4.3 

[^1]: 構築手順は 「[docker - ローカル開発環境の構築 / Laravel on Vagrant + VirtualBox with Docker - Qiita](https://qiita.com/anfangd/items/8c57f3d753117ea288b9)」 を参照ください。

# 構築手順

## 概要

今回構築する環境は、 CentOS/7 の上に、 Docker をインストールし、その上で **PHPUnit + phpdbg + php-code-coverage** を使用してレポートを出力します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/79222/60bfc7ce-b715-9d0d-c5cc-0b46b0cdf41e.png)


## 手順

これから行う手順は、以下の記事で紹介した手順で構築した ローカル開発環境 をベースとして操作を行ってゆきます。
Windows / Mac を問わず簡単に構築が可能ですので、動作の再現を行いたい場合はそちらの記事を参照してください。

- [docker - ローカル開発環境の構築 / Laravel on Vagrant + VirtualBox with Docker - Qiita](https://qiita.com/anfangd/items/8c57f3d753117ea288b9)

なお、上記の手順の中で **PHPUnit** と **phpdbg** はインストール済みの為、Composerインストールが必要な **php-code-coverage** のインストールから操作を進めます。

### 1. CodeCoverage を Composer でインストール

**php-code-coverage** をインストールします。

```bash:@VirtualHost
// SebastianBergmann\CodeCoverage のインストール
$ docker-compose exec php composer require --dev phpunit/php-code-coverage
```

### 2. phpdbg をテスト実行

phpdbg を使用してテスト実行し、テストカバレッジを任意のフォルダに出力します。

```bash:@VirtualHost
// レポート出力
$ docker-compose exec phpdbg -qrr sample/vendor/phpunit/phpunit/phpunit --coverage-html sample/coverage-by-phpdbg
```

### 3. 出力結果の確認

出力されたフォルダ内の HTML ファイルを Webブラウザで確認することで、テストカバレッジを確認することが出来ます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/79222/7853e841-5429-21da-b2f5-4c5a3ada7915.png)


# 課題

1. 導入は簡単にすることが出来ましたが、実際の開発プロジェクトで確認が出来ていません。<br>参照した記事によると、バージョンによっては、実際のカバレッジと異なる結果が出力されてしまうケースもあるようなので、結果の評価には注意が必要です。

# 終わりに

想定していたよりも簡単に出力することができました。

近頃流行りの構成でお手軽かつ充実た開発環境を作ることを目的に、先日、「[docker - ローカル開発環境の構築 / Laravel on Vagrant + VirtualBox with Docker - Qiita](https://qiita.com/anfangd/items/8c57f3d753117ea288b9)」という記事を記載しました。

この記事で導入した **Laravel + AdminLTE** を使用することで、簡単に管理画面の構築が出来たり、すぐに **PHPUnit** を実行する環境は整いました。

ここから更に、チーム開発する際に必要な **Format機能** や **CodeFix機能** 、 **Xdebugを使用したトレース** 、 **IDE(VSCode)と連携した効率的な開発プラグインの導入** などなど、チーム開発を意識して「イイ感じ」の環境を構築したいのですが、なかなかまとまった情報を掲載した記事がありません。

以下のような構成を前提に、もう少し充実した環境を構築してゆけたらと考えております。

- OS : Windows / Mac
- 仮想環境 : Vagrant + VirtualBox
- コンテナ : Docker + docker-compose
- 仮想OS : CentOS
- Web : Apache / nginx
- Application : PHP
- Web Application Framework : Laravel, CakePHP
- Database : MySQL, PostgreSQL
- IDE : VSCode
- DBManager : MySQL Workbench, A5M2, HeidiSQL

# 参考

- [Laravel5.7: テストの基本 - Qiita](https://qiita.com/sutara79/items/f8c8313c97ce4d2febc2)
- [Laravel Homestead + Visual Studio Code + Xdebugでデバッグ環境構築 - Qiita](https://qiita.com/itigoore01/items/c0e8ef5756503ef588d1)
- [Laravel5でテスト(PHPUnit) - Qiita](https://qiita.com/zaburo/items/839c81a1e166a48fe3fa)
- [Dockerで構築したPHP環境をxdebugでデバッグ（vscode） - Qiita](https://qiita.com/gigosa/items/90431be7a6a79db78480)
- [Xdebug+VSCodeで再びハマったメモ。vagrant+virtualbox+ubuntu上のdocker上のphp+nginx](https://qiita.com/hibohiboo/items/711581b3dae3c33536d5)
- [Docker で動作している php7.1 を PhpStorm からステップ実行する - Qiita](https://qiita.com/furu8ma/items/86a147f90ad6344b4cd9)
- [docker-compose を使って（なるべく）公式イメージで PHP 開発環境を作った - Qiita](https://qiita.com/hidekuro/items/46c00dec350c4a37fbb1)

## Corverage

- [PHP でカバレッジを出すなら phpdbg - Qiita](https://qiita.com/nanasess/items/f5f8483e92c76ef408ff)
- [php7 + phpdbgで高速カバレッジ出力 - MachinGood](http://blog.matchingood.com/entry/2017/03/17/193521)
- [sebastianbergmann/php-code-coverage - GitHub](https://qiita.com/nanasess/items/f5f8483e92c76ef408ff)

## metrics

- [PhpMetrics](https://www.phpmetrics.org/)