coverage について
未ステージのコード変更に対するテストカバレッジを調べるスキルです。テストとカバレッジレポートを実行し、LCOV データを変更行に対応付けて未カバー箇所を報告します。
主な機能
- 01未ステージファイルと変更行の取得
- 02CI テストとカバレッジコマンドの実行
- 03LCOV カバレッジと変更行の対応付け
- 04未カバーのコード行を報告
活用シーン
- 01コミット前に変更のテストカバレッジを確認
- 02カバレッジのない変更行を特定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ helderberto/ agent-skills --skill coverageインストール後、Claude Code で/coverageを入力して読み込まれたか確認します。
同梱ファイルscripts/parse-lcov.py
詳細
カバレッジチェック
コンテキスト
並行して実行します:
git diff --name-only— ステージされていないファイルを取得しますgit diff -U0 --no-color— 変更された行番号を取得します
コマンド
順番に実行します:
npm run test:ci— カバレッジ付きで vitest を実行しますnpm run coverage:report— lcov/テキスト形式のレポートを生成します
ワークフロー
- ステージされていないファイルと行範囲を取得します(並行して実行):
git diff --name-onlygit diff -U0 --no-color
- カバレッジを実行します:
npm run test:cinpm run coverage:report
- diff を一時ファイルに保存してから、次を実行します:
git diff -U0 --no-color > /tmp/changes.diff python3 scripts/parse-lcov.py --lcov coverage/lcov.info --diff /tmp/changes.diff - 標準出力から未カバーの行を報告します:
file.ts:42 - 標準エラー出力から概要を報告します:変更行のうち X/Y 行がカバーされています
LCOV 形式
coverage/lcov.info を解析します:
SF:src/utils/helper.ts
DA:10,1 # line 10, covered (hit 1 time)
DA:11,0 # line 11, NOT covered
DA:12,5 # line 12, covered (hit 5 times)
end_of_record
主なフィールド:
SF:— ソースファイルのパスDA:line,hits—0は未カバー、>0はカバー済みend_of_record— ファイルセクションの終端
SF: のパスを git diff のファイルと照合します。変更された各行について、DA: エントリーを確認します。hits が 0 の場合は、未カバーとして報告します。
正当化の禁止
| 言い訳 | 反論 |
|---|---|
| 「カバレッジは品質を保証しません」 | そのとおりです。しかし、未カバーのコードは自動検証がまったく行われていないことを意味します。 |
| 「設定の変更にすぎません」 | 設定の変更でも本番環境に問題を起こすことがあります。ロジックが含まれるなら、カバレッジを確認してください。 |
| 「100%はやりすぎです」 | 100%は求めていません。変更した行がカバーされているか確認してください。 |
| 「テストスイートはすでに成功しています」 | 変更箇所が未カバーのままテストスイートが成功していても、誤った安心感につながります。 |
ルール
- ステージされていない変更のみを分析します(
git diff) - コマンドは順番に実行します:
test:ciの後にcoverage:report - lcov データを解析し、変更行と対応付けるには
scripts/parse-lcov.pyを使用します - 未カバーの行を報告します:
file.ts:42 - カバレッジデータがないファイル(コード以外のファイル)は無視します
エラー処理
npm run test:ciが失敗した場合 — テストの失敗を報告して停止しますcoverage/lcov.infoが見つからない場合 — テストランナーの設定でcoverage.reporterにlcovが含まれていることを確認しますgit diffが変更なしを返した場合 — チェック対象となるステージされていない変更がないことを報告します
コメント
Markdown 対応