Laravel5.6でPHPUnitのコードカバレッジを出力する

## 概要
MacOS上のLaravelのプロジェクトのコードカバレッジをHTML形式で出力します。
Laravelでプロジェクトが作成されており、PHPUnitが実行可能な状態を前提としています。
Xdebugのインストールについても手順を記載しています。

手順自体は簡単ですが、Xdebugのインストールで迷うことがあったので、メモとして記事にしています。

## 環境
- Mac OS X Sierra 10.12.6
- Laravel5.6
- PHPUnit7.0

## 手順
### composer.jsonのscript

カバレッジを出力するためのコマンドをcomposer.jsonのscriptに追加します。
カバレッジの結果がHTML形式で`coverage`ディレクトリに出力されるように修正しています。

```:composer.json
"scripts": {
　　　　　　　　・・・
    "test:coverage": "phpunit --coverage-html coverage"
}
```
### phpunit.xml
Laravelにより作成された初期状態の`phpunit.xml`では、`/app`以下が全てテストの対象となっています。
テスト対象の絞り込みを行いたい場合、`phpunit.xml`の以下の部分を修正する必要があります。

```xml
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
```

例えば、`/app/models`の配下のみテストしたい場合は、以下のようになります。
設定の詳細は、[公式ガイド](https://phpunit.de/manual/6.5/ja/appendixes.configuration.html#appendixes.configuration.whitelisting-files)を確認してください。

```xml
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app/models</directory> ここを変更！
        </whitelist>
    </filter>
```


### カバレッジの出力
以下のコマンドを実行すると、`coverage`にカバレッジの結果が出力されていることを確認できます。

```
$ composer test:coverage
```

もし以下の通り`Xdebug`がないとエラーが表示された場合は、`Xdebug`をインストールする必要があります。

```
Error: No code coverage driver is available
```

ここから下は、`Xdebug`をインストールする手順となります。
### Xdebugをインストールする

`Xdebug`は、`PHPUnit`に組み込まれているのではなく、PHPのエクステンションとして公開されているデバッグ支援ツールです。
https://xdebug.org/download.php から`Xdebug`のインストールが可能です。
以下のXdebugのサイトに必要な情報を入力することで、インストールするバージョンと手順について表示されるので、
以降はこれに従ってインストールを進めていきます。

[Tailored Installation Instructions](https://xdebug.org/wizard.php)

上記のページを表示して、以下のコマンドで表示された内容を貼り付け、`Analyse my phpinfo output`ボタンをクリックします。

```
$ php -i
```

すると、インストールの手順が表示されるので、手順にしたがってインストール作業を進めます。
今回は、xdebug-2.6.1.tgzをインストールします。

ダウンロードしたファイルを適当なディレクトリで解凍します。以下のコマンドで解凍できます。

```
$ tar -xvzf xdebug-2.6.1.tgz
```

解凍したディレクトリに移動します。

```
$ cd xdebug-2.6.1
```

以下のコマンドを実行し、`configure`スクリプトを生成します。

```
$ phpize
```

以下のエラーが表示された場合は、 `autoconf`のインストールが必要です。

```
Cannot find autoconf. 
Please check your autoconf installationand the $PHP_AUTOCONF environment variable is set correctly and then rerun this script.
```

brewで`autoconf`をインストールして、エラーメッセージに表示されている通りに、環境変数を設定します。

```
$ brew install autoconf
$ export PHP_AUTOCONF=/usr/local/Cellar/autoconf/2.69/bin/autoconf
```

再び、以下のコマンドを実行します。

```
$ phpize
```

`configure`が作成されたので、以下を実行します。

```
$ ./configure
```

以下のコマンドを実行すると、`modules`ディレクトリに`xdebug.so`が作成されます。

```
$ make
```

作成された`xdebug.so` をPHPのextensionsディレクトリに移動します。
extensionsディレクトリは、Tailored Installation Instructionsの手順に表示されているので
環境に合わせて変更してください。

```
$ cp modules/xdebug.so /usr/lib/php/extensions/no-debug-non-zts-20160303
```

`/etc/php.ini` に以下を追加します。

xdebug.soのパスは、環境に合わせて変更してください。

```
zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
``` 


確認のために、以下のコマンドを実行します。

```
$ php -v
PHP 7.1.16 (cli) (built: Mar 31 2018 02:59:59) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
```

Xdebugがインストールされていることが確認できました！


以下のコマンドを実行すると、`coverage`にカバレッジの結果が出力されていることを確認できます。

```
$ composer test:coverage
```

## 参考
[ PHPUnit公式ドキュメント:コードカバレッジ解析](https://phpunit.de/manual/6.5/ja/code-coverage-analysis.html)