Communityコーディング&開発github.com

photoeven2-netizen/astronusa

coverage パッケージを使用してカバレッジを収集し、LCOV レポートを作成します。

astronusa とは?

このスキルは、Dart および Flutter プロジェクト向けに、coverage パッケージを用いてテストカバレッジを自動収集し、LCOV 形式のレポートを生成するためのワークフローを提供します。テストの基本(ユニットテスト、ウィジェットテスト、結合テスト)から、カバレッジ除外ディレクティブ、自動スクリプトによるシンプルな収集方法、VM サービスを利用した高度な手動収集方法までを網羅しています。主に Claude Code, Cursor, Codex などの AI エージェントがタスクとして実行することを想定して設計されており、開発者が最小限の手間でカバレッジ計測を CI/CD パイプラインに統合できるように支援します。ワークフローはチェックリスト形式で段階的に記述され、依存関係の追加、テスト実行、LCOV 出力の検証を順番に実施します。

対応~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/photoeven2-netizen/astronusa/tree/HEAD/.agents/skills/dart-collect-coverage

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Dart および Flutter テストカバレッジの実装

目次

テストの基礎

標準の Dart テストパラダイムを使用してテストスイートを構成します。Dart プロジェクトでは package:test を、Flutter プロジェクトでは flutter_test を使用します。

  • 単体テスト: 個々の関数、メソッド、またはクラスを検証します。
  • コンポーネント/ウィジェットテスト: モックオブジェクト(package:mockito)を使用して、コンポーネントの動作、レイアウト、および相互作用を検証します。
  • 統合テスト: シミュレートされたデバイスまたは実機でのアプリ全体のフローを検証します。

カバレッジディレクティブ

インラインコメントを使用して、特定の行、ブロック、またはファイル全体をカバレッジメトリクスから除外します。フォーマット時に --check-ignore フラグを渡すと、これらのディレクティブを強制できます。

  • 1 行を無視:// coverage:ignore-line
  • コードブロックを無視:// coverage:ignore-start と // coverage:ignore-end
  • ファイル全体を無視:// coverage:ignore-file

ワークフロー:カバレッジレポートの設定と生成

以下の順次ワークフローに従って、coverage パッケージを追加し、テストを実行し、LCOV レポートを生成します。

タスク進行チェックリスト:

  • 1. coverage を dev_dependency として追加します。
  • 2. 自動化されたカバレッジスクリプトを実行します。
  • 3. LCOV 出力を検証します。

1. 依存関係の追加

プロジェクトに coverage パッケージを dev_dependency として追加します。標準の依存関係には追加しないでください。

標準の Dart プロジェクトの場合:

dart pub add dev:coverage

Flutter プロジェクトの場合:

flutter pub add dev:coverage

2. カバレッジの収集と LCOV の生成

バンドルされている test_with_coverage スクリプトを使用します。このスクリプトは、すべてのテストを自動的に実行し、Dart VM から JSON カバレッジデータを収集し、LCOV レポートにフォーマットします。

dart run coverage:test_with_coverage

注:Dart ワークスペース(monorepo)内で作業する場合は、テストディレクトリを明示的に指定します(例:dart run coverage:test_with_coverage -- pkgs/foo/test pkgs/bar/test)。

3. フィードバックループ:出力の検証

バリデーターを実行 -> エラーを確認 -> 修正:

  1. プロジェクトルートに coverage/ ディレクトリが作成されたことを確認します。
  2. coverage/coverage.json(生データ)と coverage/lcov.info(フォーマットされたレポート)が存在することを確認します。
  3. 特定のファイルのカバレッジが不足している場合は、それらのファイルがテストファイルによってインポートされ実行されていることを確認するか、意図的に除外する場合は // coverage:ignore-file を追加します。

ワークフロー:高度な手動カバレッジ収集

VM サービスを詳細に制御したり、アイソレートを一時停止したり、ブランチ/関数レベルのカバレッジが必要な場合は、手動収集ワークフローを使用します。

タスク進行チェックリスト:

  • 1. VM サービスを有効にしてテストを実行します。
  • 2. 生の JSON カバレッジを収集します。
  • 3. JSON を LCOV にフォーマットします。

1. VM サービスを使用したテストの実行

終了時にアイソレートを一時停止し、特定のポート(例:8181)で VM サービスを公開してテストを実行します。

dart run --pause-isolates-on-exit --disable-service-auth-codes --enable-vm-service=8181 test &

2. 生のカバレッジの収集

実行中の VM サービスからカバレッジデータを抽出し、JSON ファイルに出力します。

dart run coverage:collect_coverage --wait-paused --uri=http://127.0.0.1:8181/ -o coverage/coverage.json --resume-isolates

オプション:より詳細なメトリクスを収集するには --function-coverage と --branch-coverage を追加します(Dart VM 2.17.0+ が必要)。

3. LCOV へのフォーマット

生の JSON データを標準の LCOV 形式に変換します。

dart run coverage:format_coverage --packages=.dart_tool/package_config.json --lcov -i coverage/coverage.json -o coverage/lcov.info --check-ignore

例

例:pubspec.yaml の設定

pubspec.yaml で coverage パッケージが dev_dependencies の下にのみ含まれていることを確認します。

name: my_dart_app
environment:
  sdk: ^3.0.0

dependencies:
  path: ^1.8.0

dev_dependencies:
  test: ^1.24.0
  coverage: ^1.15.0

例:無視ディレクティブの適用

無視ディレクティブを使用して、生成されたコードやテスト不可能なエッジケースがカバレッジスコアを低下させるのを防ぎます。

// coverage:ignore-file
import 'package:meta/meta.dart';

class SystemConfig {
  final String env;

  SystemConfig(this.env);

  // coverage:ignore-start
  void legacyInit() {
    print('Deprecated initialization');
  }
  // coverage:ignore-end

  bool isProduction() {
    if (env == 'prod') return true;
    return false; // coverage:ignore-line
  }
}

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

関連スキル