# コードカバレッジ測定ガイド

## 📊 現在のカバレッジ状況

**全体カバレッジ**: 68.95% (533/773 lines)
**自動テスト数**: 153個 (ユニット 120 + 統合 33)
**目標**: 60-70% ✅ 達成

### モジュール別カバレッジ

| モジュール | カバレッジ | カバー済み/全体 | 状態 |
|-----------|-----------|----------------|------|
| `cache/types.rs` | 100.00% | 15/15 | ✅ 完璧 |
| `config.rs` | 96.15% | 25/26 | ✅ 優秀 |
| `cache/content.rs` | 83.54% | 66/79 | ✅ 良好 |
| `cli.rs` | 78.16% | 161/206 | ✅ 良好 |
| `search/query.rs` | 70.59% | 48/68 | 🟡 良好 |
| `cache/update.rs` | 62.24% | 89/143 | 🟡 改善 |
| `execution/runner.rs` | 19.88% | 34/171 | 🔴 外部依存多数 |
| `github/api.rs` | 8.33% | 5/60 | 🔴 外部依存多数 |
| `error.rs` | 0.00% | 0/1 | 🟡 テスト不要 |
| `main.rs` | 0.00% | 0/4 | 🟡 E2Eで検証 |

---

## 📏 カバレッジ測定コマンド

### 基本的な測定

```bash
# 標準出力にカバレッジを表示
cargo tarpaulin --out Stdout

# HTMLレポートを生成
cargo tarpaulin --out Html --output-dir coverage

# 両方生成
cargo tarpaulin --out Html --out Stdout --output-dir coverage
```

### 詳細な測定

```bash
# 詳細出力付き（各行のカバレッジ情報）
cargo tarpaulin --out Stdout --verbose

# タイムアウト設定（大規模プロジェクト向け）
cargo tarpaulin --out Stdout --timeout 120

# 最後の100行のみ表示（長い出力を省略）
cargo tarpaulin --out Stdout 2>&1 | tail -100
```

### モジュール別の測定

```bash
# 特定のモジュールのみテスト
cargo tarpaulin --out Stdout --lib

# 特定のファイルを除外
cargo tarpaulin --out Stdout --exclude-files 'tests/*'

# 特定のテストのみ実行
cargo tarpaulin --out Stdout --test integration_test
```

### justfile経由の測定

```bash
# justfileにカバレッジタスクを追加済みの場合
just coverage

# または直接
just check  # lint + test（カバレッジなし）
```

---

## 🎯 カバレッジ設計の考え方

### 高カバレッジモジュール（70%以上）

コアビジネスロジックは高カバレッジを維持：

- **cache/types.rs (100%)**: データ構造、シリアライゼーション
- **config.rs (96%)**: 設定管理、プラットフォーム別パス
- **cache/content.rs (84%)**: コンテンツキャッシュ管理
- **cli.rs (78%)**: CLI引数処理
- **search/query.rs (71%)**: 検索ロジック

### 中カバレッジモジュール（50-70%）

外部依存の影響を受けるが、ビジネスロジックをモックでカバー：

- **cache/update.rs (62%)**: GitHubClient をモック化してテスト

### 低カバレッジモジュール（50%未満）

外部プロセス・コマンド依存が多く、統合テストで品質担保：

- **execution/runner.rs (20%)**: bash, python等の実際の実行 → 統合テストで12言語を検証
- **github/api.rs (8%)**: `gh` コマンド実行 → MockGitHubClientで代替
- **main.rs (0%)**: エントリーポイント → E2Eテストで検証
- **error.rs (0%)**: 単純な型定義 → 実行時にテスト

---

## 📝 カバレッジレポートの見方

### 標準出力の解釈

```bash
|| Uncovered Lines:
|| src/cache/content.rs: 88, 90, 116, 118, ...
```

これは、各ファイルのどの行がカバーされていないかを示しています。

### HTMLレポート

HTMLレポート（`coverage/index.html`）では:

- 緑: カバーされた行
- 赤: カバーされていない行
- グレー: 実行不可能な行（コメント、空行など）

ブラウザで開くには:

```bash
# Linuxの場合
xdg-open coverage/index.html

# macOSの場合
open coverage/index.html

# Windowsの場合
start coverage/index.html
```

---

## 🚀 CI/CDでの使用

### GitHub Actions

```yaml
- name: Run tests with coverage
  run: cargo tarpaulin --out Xml --output-dir coverage

- name: Upload coverage to Codecov
  uses: codecov/codecov-action@v3
  with:
    files: ./coverage/cobertura.xml
```

---

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

### cargo-tarpaulinがインストールされていない

```bash
cargo install cargo-tarpaulin
```

### タイムアウトエラー

```bash
# タイムアウトを延長
cargo tarpaulin --out Stdout --timeout 300
```

### メモリ不足

```bash
# 並列実行数を制限
cargo tarpaulin --out Stdout --jobs 1
```

---

## 📚 参考資料

- [cargo-tarpaulin公式ドキュメント](https://github.com/xd009642/tarpaulin)
- [TESTING.md](./TESTING.md) - テスト戦略と実行ガイド
- [TEST_INVENTORY.md](./TEST_INVENTORY.md) - 全テストの分類と概要

---

**最終更新**: 2025-11-06
**現在のカバレッジ**: 68.95%
**自動テスト数**: 153個
**カバー行数**: 533/773 lines
