ドキュメント
circleci.com
Start Building for Free

コードカバレッジ メトリクスの生成

1 month ago3 min read
Cloud
Server v3.x
Server v2.x
On This Page

コードカバレッジは、アプリケーションがどの程度テストされたかを示します。

CircleCI は、組み込まれている CircleCI 機能をオープンソース ライブラリと組み合わせて、またはパートナーのサービスを使用して、コードカバレッジ レポートのさまざまなオプションを提供しています。

CircleCI でのカバレッジの表示

コードカバレッジ レポートを直接 CircleCI にアップロードできます。 最初に、プロジェクトにカバレッジ ライブラリを追加し、CircleCI の アーティファクト ディレクトリにカバレッジ レポートを書き込むようにビルドを設定します。 コードカバレッジ レポートはビルドアーティファクトとして、参照またはダウンロード可能な場所に保存されます。 カバレッジ レポートへのアクセス方法の詳細については、 ビルドアーティファクトに関するドキュメントを参照してください。

[Artifacts (アーティファクト)] タブのスクリーンショット

言語別にカバレッジ ライブラリを構成する例をいくつか示します。

Ruby

SimpleCov は、よく使用される Ruby コードカバレッジ ライブラリです。 まず、simplecov gem を Gemfile に追加します。

gem 'simplecov', require: false, group: :test

テスト スイートの開始時に simplecov を実行します。 SimpleCov を Rails と共に使用する場合の設定例を以下に示します。

require 'simplecov'        # << SimpleCov が必要です。
SimpleCov.start 'rails'    # << "Rails" プリセットを使用して SimpleCov を起動します。

ENV['RAILS_ENV'] ||= 'test'
require_relative '../config/environment'
require 'rails/test_help'

class ActiveSupport::TestCase
  # すべてのテストの test/fixtures/*.yml にあるすべてのフィクスチャをアルファベット順にセットアップします。
  fixtures :all
  # すべてのテストで使用されるヘルパー メソッドをここに追加します...
end

次に、カバレッジ レポートをアップロードするために .circleci/config.yaml を設定します。

詳細は、 simplecov README を参照してください。

Python

Coverage.py は、Python でコードカバレッジレポートを生成する際によく使用されるライブラリです。 最初に、以下のように Coverage.py をインストールします。

pip install coverage
# これまでは、たとえば以下のように Python プロジェクトを実行していました。
python my_program.py arg1 arg2

# ここでは、コマンドにプレフィックス "coverage" を付けます。
coverage run my_program.py arg1 arg2

この では、以下のコマンドを使用してカバレッジレポートを生成できます。

coverage run -m pytest
coverage report
coverage html  # ブラウザーで htmlcov/index.html を開きます。

生成されたファイルは htmlcov/ 下にあり、コンフィグの store_artifacts ステップでアップロードできます。

Java

JaCoCo は、Java コードカバレッジによく使用されるライブラリです。 ビルドシステムの一部に JUnit と JaCoCo を含む pom.xml の例を以下に示します。

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.foo</groupId>
    <artifactId>DemoProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>DemoProject</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.6</maven.compiler.source>
        <maven.compiler.target>1.6</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.3</version>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <!-- Sets the path to the file which contains the execution data. -->

                            <dataFile>target/jacoco.exec</dataFile>
                            <!-- Sets the output directory for the code coverage report. -->
                            <outputDirectory>target/my-reports</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <systemPropertyVariables>
                        <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

mvn test を実行するとコードカバレッジレポート (exec) ファイルが生成され、他の多くのカバレッジツールと同様に、このファイルが html ページにも変換されます。 上記の Pom ファイルは target ディレクトリに書き込みを行い、これを CircleCI config.yml ファイルでアーティファクトとして保存できます。

上記の例に対応する最小の CI 設定は以下のとおりです。

JavaScript

Istanbul は、JavaScript プロジェクトでコードカバレッジレポートの生成によく使用されるライブラリです。 人気のテスト ツールである Jest でも、Istanbul を使用してレポートを生成します。 以下のコード例を参照してください。

PHP

PHPUnit は、よく使用される PHP のテストフレームワークです。 PHP 5.6 より前のバージョンを使用している場合は、コードカバレッジ レポートを生成するには PHP Xdebug をインストールする必要があります。 PHP 5.6以降のバージョンでは、phpdbgというツールにアクセスできます。 phpdbg -qrr vendor/bin/phpunit --coverage-html build/coverage-report コマンドでレポートを生成できます。

以下に示した基本の .circleci/config.yml では、コンフィグの最後にある store_artifacts ステップでカバレッジレポートをアップロードしています。

Golang

Go には、コードカバレッジレポートを生成する機能が組み込まれています。 レポートを生成するには、-coverprofile=c.out フラグを追加します。 これでカバレッジレポートが生成され、go tool を使用して html に変換できます。

go test -cover -coverprofile=c.out
go tool cover -html=c.out -o coverage.html

.circleci/config.yml の例は以下のとおりです。

version: 2.1

jobs:
  build:
    docker:
      - image: cimg/go:1.16
        auth:
          username: mydockerhub-user
          password: $DOCKERHUB_PASSWORD  # コンテキスト/プロジェクト UI 環境変数を参照します。
    steps:
      - checkout
      - run: go build
      - run:
          name: "Create a temp directory for artifacts"
          command: |
            mkdir -p /tmp/artifacts
      - run:
          command: |
            go test -coverprofile=c.out
            go tool cover -html=c.out -o coverage.html
            mv coverage.html /tmp/artifacts
      - store_artifacts:
          path: /tmp/artifacts

コードカバレッジ サービスの使用

Codecov

Codecov には、カバレッジレポートのアップロードを簡単に行うための Orb があります。

注: **Codecov Orb は、パートナーが作成した Orb です。 使用するには、お客様ご自身または組織の管理者が、未承認 Orb の使用をオプトインする必要があります。 この設定は、CircleCI Web アプリの **Organization Settings > Security で行えます。

version: 2.1
orbs:
  codecov: codecov/codecov@1.0.2
jobs:
  build:
    steps:
      - codecov/upload:
          file: 

Codecov の Orb の詳細については、 CircleCI ブログへの寄稿記事を参照してください。

Coveralls

Coveralls のユーザーは、 カバレッジ統計の設定ガイドを参照してください。CircleCI の 環境変数COVERALLS_REPO_TOKEN を追加する必要があります。

Coveralls は、同時実行ジョブのカバレッジ統計を自動的にマージします。


ドキュメントの改善にご協力ください

このガイドは、CircleCI の他のドキュメントと同様にオープンソースであり、 GitHub でご利用いただけます。 ご協力いただき、ありがとうございます。

サポートが必要ですか

CircleCI のサポートエンジニアによる、サービスに関する問題、請求およびアカウントについての質問への対応、設定の構築に関する問題解決のサポートを行っています。 サポートチケットを送信して、CircleCI のサポートエンジニアにお問い合わせください。日本語でお問い合わせいただけます。

または、 サポートサイト から、サポート記事やコミュニティフォーラム、トレーニングリソースをご覧いただけます。