> For the complete documentation index, see [llms.txt](https://help.aikido.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.aikido.dev/docs/docs-ja/kdo/code-coverage.md).

# コードカバレッジ

GitHub ActionsまたはGitLab CIからテストカバレッジをアップロードし、Aikidoで追跡します。

Code Coverage は、テストが実際にコードのどれだけを実行しているかを示します。CI でテストスイートを実行し、レポートをアップロードして、Aikido でリポジトリ、ファイル、行ごとのカバレッジを確認します。

{% hint style="info" %}
カバレッジに対する PR ガードは近日公開予定です。現在、Aikido はダッシュボードでカバレッジを表示します。カバレッジが下がっても、プルリクエストやマージリクエストを失敗させることはありません。
{% endhint %}

## 仕組み

1. CI ジョブは、カバレッジを有効にしてテストを実行し、1 つ以上のカバレッジレポートを書き出します。
2. その [Aikido Code Coverage GitHub Action](https://github.com/AikidoSec/code-coverage-github-action) または [GitLab CI コンポーネント](https://gitlab.com/aikido-security/code-coverage-gitlab-action) レポートを Aikido にアップロードします。
3. Aikido はレポートをリポジトリ、コミット SHA、ブランチに紐づけて保存します。
4. その **Code Coverage** タブには、各リポジトリの最新アップロードが、そのレポートに含まれるファイルのみを使って表示されます。

## Aikido が測定するもの

Aikido は、アップロードされたレポートをリポジトリ内のすべてのファイルと比較しません。CI がアップロードした LCOV レポートに含まれるファイルだけを採点し、一覧表示します。

つまり:

* その **コードツリー** および **ファイル一覧** のファイルを表示します `lcov.info`、ではなく、リポジトリ全体の一覧ではありません。
* リポジトリのカバレッジ率は、カバーされた行数を総行数で割ったものです **そのレポート内の**.
* テストランナーで一度も計測対象にしなかったファイルは、0% の未カバーとしては表示されません。単に存在しないだけです。

Aikido は接続されたリポジトリを使って、アップロードを正しいリポジトリに紐づけ、すでにレポートに含まれているファイルの行レベルのプレビュー用にソースを取得します。レポートに含まれていないファイルを埋めるためにリポジトリ全体を走査することはありません。

{% hint style="info" %}
ダッシュボードに `/src` （または別のフォルダ）しか表示されない場合、アップロードされたレポートにはそれらのファイルしか含まれていません。それは想定どおりです。Aikido がリポジトリの残りを隠しているわけではありません。
{% endhint %}

### なぜよく `/src`

カバレッジツールは、収集対象として設定したファイルだけを含めます。Jest のような一般的なデフォルト、 `collectCoverageFrom`、pytest の `--cov=src`、または Istanbul の `include`、instrument `src/` はテスト済み、生成済みファイル、その他すべてをスキップします。

レポートに `src/`含まれるパスしか `src/`.

リポジトリのより多くを含めるには、テストランナーの collect または include パスを広げて、それらのファイルが `lcov.info`に表示されるようにしてから、そのレポートをアップロードします。

カバレッジがパッケージや CI ジョブに分割されている場合、それぞれが独自の `lcov.info`を出力できます。すべてのパスを渡して 1 つのアップロードにまとめてください。については、複数レポートのアップロードを参照してください [GitHub](https://github.com/AikidoSec/code-coverage-github-action#uploading-multiple-reports) または [GitLab](https://gitlab.com/aikido-security/code-coverage-gitlab-action#uploading-multiple-reports).

## ユースケース

* **どのリポジトリのテストが不足しているかを確認する:** Aikido に接続されているリポジトリ全体のカバレッジを比較します。
* **コードベースの抜けを見つける:** リポジトリを開き、コードツリーまたはファイル一覧で未カバーのファイルを確認します。
* **変更する前にファイルを確認する:** ソースに対する行レベルのカバレッジを開いて、既存のテストで何がカバーされているかを確認します。
* **カバレッジが改善しているかを追跡する:** テストを追加したり不要なコードを整理したりしながら、時間の経過によるカバレッジを確認します。
* **カバレッジを品質作業と組み合わせる:** ある [リポジトリスキャン](/docs/docs-ja/kdo/repository-scans.md) または [PR チェック](/docs/docs-ja/kdo/code-quality-setup.md) でファイルが指摘されたら、そのファイルがテストされているか確認します。

## 前提条件

始める前に、以下を確認してください:

* あなたは **ベーシック**, **Pro**, **Advanced**、または **エンタープライズ** プランを利用しています。Code Coverage は Developer プランでは利用できません。
* リポジトリは [Aikido に接続されています](/docs/docs-ja/kdosukyan/connect-your-source-code.md).
* テストはカバレッジレポートを生成します。Aikido が現在受け付けるのは [LCOV](https://github.com/linux-test-project/lcov) (`lcov.info` です。Jest と pytest-cov はこれをネイティブに書き出せます。ほかのランナーでも LCOV を出力できれば動作します。

{% hint style="info" %}
Code Coverage のアップロードは現在 GitHub と GitLab で利用できます。Azure DevOps や Bitbucket を含む他の SCM への対応も近日公開予定です。
{% endhint %}

## カバレッジアップロードを設定

どちらの統合も OIDC（キー不要）で認証します。API トークンやリポジトリシークレットは不要です。

{% tabs %}
{% tab title="GitHub Actions" %}
次を使用してください [Aikido Code Coverage GitHub Action](https://github.com/AikidoSec/code-coverage-github-action)。テストがカバレッジレポートを書き出したら、次のようなステップを追加します:

```yaml
- name: Upload coverage to Aikido
  uses: AikidoSec/code-coverage-github-action@v1.1.0
  with:
    lcov-file-paths: coverage/lcov.info
```

このアクションを実行するジョブは `id-token: write`.

複数のレポート（別々のパッケージや CI シャード）をアップロードするには、すべてのパスを渡します。アクションはそれらを 1 つのアップロードにまとめます:

```yaml
- name: Upload coverage to Aikido
  uses: AikidoSec/code-coverage-github-action@v1.1.0
  with:
    lcov-file-paths: |
      packages/a/coverage/lcov.info
      packages/b/coverage/lcov.info
```

完全なワークフロー、モノレポ、マトリクスジョブ、およびすべての入力については、 [GitHub Action README](https://github.com/AikidoSec/code-coverage-github-action).
{% endtab %}

{% tab title="GitLab CI" %}
次を使用してください [Aikido Code Coverage GitLab CI コンポーネント](https://gitlab.com/aikido-security/code-coverage-gitlab-action)。テストがカバレッジレポートを書き出したら、次のようにコンポーネントを含めます:

```yaml
include:
  - component: gitlab.com/aikido-security/code-coverage-gitlab-action/upload-coverage@1.0.0
    inputs:
      lcov_file_paths: coverage/lcov.info
```

このコンポーネントが GitLab OIDC を自動設定します（`id_tokens.AIKIDO_OIDC_TOKEN`).

複数のレポート（別々のパッケージや CI シャード）をアップロードするには、すべてのパスを渡します。コンポーネントはそれらを 1 つのアップロードにまとめます:

```yaml
include:
  - component: gitlab.com/aikido-security/code-coverage-gitlab-action/upload-coverage@1.0.0
    inputs:
      lcov_file_paths: |
        packages/a/coverage/lcov.info
        packages/b/coverage/lcov.info
```

完全なパイプライン、並列のマトリクスジョブ、およびすべての入力については、 [GitLab CI component README](https://gitlab.com/aikido-security/code-coverage-gitlab-action).
{% endtab %}
{% endtabs %}

## Aikido でカバレッジを表示

次回のアップロードが成功したら:

1. 開く [**コード品質** > **Code Coverage**](https://app.aikido.dev/code-quality/code-coverage).
2. リポジトリ一覧を検索します。各行には全体のカバレッジと最終更新日時が表示されます。
3. リポジトリを開いて次を表示します:
   * **カバレッジの概要**: カバー済み、部分的、未カバーの行数
   * **時間経過によるカバレッジ**: アップロードごとに割合がどう変化するか
   * **ファイル**: **コードツリー** またはフラットな **ファイル一覧**
4. ファイルを開いて、ソースに対する行レベルのカバレッジを確認します。

ソースのプレビューは、Aikido がそのファイルを取り込んでいることに依存します。まだソースが利用できない場合でも、カバレッジ率はファイル一覧に表示されます。

<div data-with-frame="true"><figure><img src="https://715870456-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyKbzcQGrx7UtrG0nPZZ7%2Fuploads%2Fgit-blob-e3acc8b546fc8ce0854c28ab0cec04985c5c2fff%2Fcode-coverage-overview.png?alt=media" alt=""><figcaption><p>Code Coverage は、リポジトリ全体の傾向とファイルごとのカバレッジを 1 画面で表示します。</p></figcaption></figure></div>

## トラブルシューティング

* **Aikido に何も表示されない**: リポジトリが Aikido に接続されていること、カバレッジレポートに解析可能なソースファイルが少なくとも 1 つ含まれていること、そしてアップロードステップが実行されたことを確認してください。
* **あなただけが `/src` （または別のフォルダ）**: Aikido はアップロードされたレポート内のファイルを表示します。そのレポートをリポジトリの残りと比較することはありません。参照: [Aikido が測定するもの](#what-aikido-measures).
* **カバレッジが不完全に見える**: テストをシャード分割したりマトリクスを使ったりする場合は、コミットごとにすべてのレポートを 1 回のアップロードにまとめてください。複数レポートのアップロードで示されているように複数のパスを渡すか、 [GitHub](https://github.com/AikidoSec/code-coverage-github-action#uploading-multiple-reports) または [GitLab](https://gitlab.com/aikido-security/code-coverage-gitlab-action#uploading-multiple-reports)、または最初にアーティファクトを収集します。 [GitHub のマトリクスジョブを使うモノレポ](https://github.com/AikidoSec/code-coverage-github-action#monorepo-with-matrix-jobs) または [GitLab の並列マトリクスジョブ](https://gitlab.com/aikido-security/code-coverage-gitlab-action#parallel-matrix-jobs).
* **レポートが大きすぎるため拒否されました**: Aikido は 10 MB までのカバレッジペイロードを受け付けます。アップロード前にカバレッジ出力を絞るか、生成ファイルを除外してください。
* **アップロードステップが失敗する**: 必要な権限と入力について [GitHub Action README](https://github.com/AikidoSec/code-coverage-github-action) または [GitLab CI component README](https://gitlab.com/aikido-security/code-coverage-gitlab-action) 確認してください。

## ヘルプが必要ですか？

レポートの行で **Intercomチャット** を開いてください。私たちのチームがお手伝いします。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.aikido.dev/docs/docs-ja/kdo/code-coverage.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
