CircleCI2.0＋php-coverallsでカバレッジのバッジを表示する

CircleCI2.0+php-coverallsでカバレッジのバッジを生成しようとしたところ、Coverallsの説明が古かったりphp-coverallsの説明が微妙だったりして途中ハマったので、バッジを表示されるまでに行った手順を備忘録として残します。

## 1. coverallsに登録

カバレッジのバッジを表示するために[coveralls](https://coveralls.io/) を利用します。
ログインして [ADD REPO](https://coveralls.io/repos/new) メニューから対象とするリポジトリを有効にします。有効にしたあとDETAILSボタンよりCoverallsのセットアップ画面に遷移します。

PHPリポジトリの場合はPHPの場合のcoverallsの設定方法が記載されたページが表示されますが、TravisCIでの設定方法しかありません。
CircleCIの場合はドキュメントを読む必要があります。

![スクリーンショット 2018-04-25 21.49.51.png](https://qiita-image-store.s3.amazonaws.com/0/82249/9c6a924f-e35c-b97f-0240-c301bbf2ccee.png)

[CoverallsのPHPの設定方法のページ](https://docs.coveralls.io/php) を見るとphp-coverallsのREADMEを読めとありますので [php-coverallsのREADME](https://github.com/php-coveralls/php-coveralls) を読みましょう。

Coverallsの説明はちと不十分…

## 2. php-coverallsのインストール

READMEのとおり、まずはcomposerでphp-coverallsをインストールします。

```
$ composer require php-coveralls/php-coveralls
```

## 3. phpunit.xmlまたはphpunit.xml.distにカバレッジのためのログを取得するための記述を追加

```phpunit.xml
    <logging>
        <log type="coverage-clover" target="build/logs/clover.xml"/>
    </logging>
```

## 4. CircleCIの設定ファイルの修正を行う

READMEによると、CiecleCIの設定ファイルにカバレッジのログを追加するための記載を追加しなければいけないのだけれど、設定ファイルの例がCircleCIの1系の記載になっているので、CircleCI2.0以降の場合は以下のようにする必要があります。

```.circleci/config.yml
# PHP CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-php/ for more details
#
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/php:latest

      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      # - image: circleci/mysql:9.4

    working_directory: ~/repo

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "composer.json" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-

      - run: mkdir -p build/logs             # ★追加

      - run: composer install -n --prefer-dist

      - save_cache:
          paths:
            - ./vendor
          key: v1-dependencies-{{ checksum "composer.json" }}

      - run: vendor/bin/phpunit
      - run: php vendor/bin/php-coveralls    # ★追加
```

`- run: mkdir -p build/logs` と `- run: php vendor/bin/php-coveralls` を`.circleci/config.yml`　に追加します。
READMEには後者が載っていませんが必要ですのでしっかり記載します。

## 5. CircleCIの環境変数にcoverallsのトークンを追加

CircleCIにログインし、CIしたいプロジェクトのSettingsのEnvironment Variablesメニューより「Add Variable」ボタンから環境変数`COVERALLS_REPO_TOKEN` を追加します。
値はcoverallsのページに表示されていたrepo_tokenの値を設定しておきます。

![スクリーンショット 2018-04-25 22.23.29.png](https://qiita-image-store.s3.amazonaws.com/0/82249/edb12316-cb80-87e0-ffd4-757446d7886e.png)

## 6. .coveralls.ymlを以下のように記載

```.coveralls.yml
coverage_clover: build/logs/clover.xml
json_path: build/logs/coveralls-upload.json
```

記載した`.coveralls.yml`をリポジトリ直下に配置します。

## 7. ファイルをpushしてCircleCIでビルドを走らせる

ビルドが通れば、Coverallsのリポジトリのページが更新されます。
ページにカバレッジバッジが表示されれば、バッジの生成は正常に動作しています。

![スクリーンショット 2018-04-25 22.34.16.png](https://qiita-image-store.s3.amazonaws.com/0/82249/9f55ff09-3b2a-6655-e300-c38eae3d96cc.png)

このようにバッジが表示されればOKです。
それではバッジをあなたのREADMEに貼って快適なOSSライフを！