---
generated_at: 2026-03-01 10:30:00
metrics:
  claims_total: 88
  claims_with_evidence: 88
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：babel-helper-compilation-targets 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各テストケースに対して、ソースコードの該当関数・メソッドが存在するか
2. **根拠との整合性**：テストケースの内容がソースコードの実装と矛盾していないか
3. **網羅性**：publicな関数・メソッドを適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：88 / 88、根拠なし：0
- 優先レビュー（高）
  1. **なし**：すべてのテストケースはソースコードに基づいて生成されています

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `packages/babel-helper-compilation-targets/src/index.ts` - メインエントリポイント、getTargets関数、isBrowsersQueryValid関数、各種内部関数
- E-02: `packages/babel-helper-compilation-targets/src/filter-items.ts` - filterItems関数、isRequired関数、targetsSupported関数
- E-03: `packages/babel-helper-compilation-targets/src/utils.ts` - semverify関数、semverMin関数、isUnreleasedVersion関数、getLowestUnreleased関数、getHighestUnreleased関数、getLowestImplementedVersion関数
- E-04: `packages/babel-helper-compilation-targets/src/pretty.ts` - prettifyVersion関数、prettifyTargets関数
- E-05: `packages/babel-helper-compilation-targets/src/debug.ts` - getInclusionReasons関数
- E-06: `packages/babel-helper-compilation-targets/src/targets.ts` - browserNameMap定数、unreleasedLabels定数
- E-07: `packages/babel-helper-compilation-targets/src/options.ts` - TargetNames定数
- E-08: `packages/babel-helper-compilation-targets/src/types.d.ts` - Target型、Targets型、InputTargets型、Browsers型の定義

## 3) Claims と根拠の対応（レビューの主戦場）

### index.ts - getTargets関数（UT-HCT-001〜015, 081〜085）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | getTargets関数が空のtargetsでデフォルトブラウザを返す | E-01: L204-316, browsersがない場合はdefaultsを使用 | ○ |
| C-02 | browsers指定時にbrowserslistが解決される | E-01: L260-264, resolveTargetsCached呼び出し | ○ |
| C-03 | esmodules=trueでESモジュールサポートブラウザが返される | E-01: L246-255, ESM_SUPPORTからブラウザリスト生成 | ○ |
| C-04 | esmodules='intersect'でbrowsersとの交差が計算される | E-01: L266-286, esmodulesがtrueの時の処理 | ○ |
| C-05 | node: trueで現在のNodeバージョンが使用される | E-01: L145-152, nodeTargetParser関数 | ○ |
| C-06 | node: 'current'で現在のNodeバージョンが使用される | E-01: L147-149, value === 'current'のチェック | ○ |
| C-07 | 特定のnodeバージョン指定が正しく処理される | E-01: L150, semverifyTarget呼び出し | ○ |
| C-08 | configPathオプションが正しく使用される | E-01: L209, L228, configPath使用箇所 | ○ |
| C-09 | ignoreBrowserslistConfigで設定ファイルが無視される | E-01: L218-219, shouldSearchForConfigの条件 | ○ |
| C-10 | onBrowserslistConfigFoundコールバックが呼び出される | E-01: L230, コールバック呼び出し | ○ |
| C-11 | 無効なターゲット名でエラーがスローされる | E-01: L39-51, validateTargetNames関数 | ○ |
| C-12 | 無効なbrowsersクエリでエラーがスローされる | E-01: L60-67, validateBrowsers関数 | ○ |
| C-13 | 無効なバージョン文字列でエラーがスローされる | E-01: L131-142, semverifyTarget関数 | ○ |
| C-14 | 小数バージョン指定時に警告が出力される | E-01: L114-129, outputDecimalWarning関数, L298-300 | ○ |
| C-15 | 複数ターゲット指定時にすべてが正しく処理される | E-01: L294-311, ターゲットのループ処理 | ○ |

### index.ts - isBrowsersQueryValid関数（UT-HCT-016〜021）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-16 | 文字列のbrowsersクエリが有効と判定される | E-01: L53-58, typeof browsers === 'string' | ○ |
| C-17 | 文字列配列のbrowsersクエリが有効と判定される | E-01: L56, Array.isArray && every | ○ |
| C-18 | 数値のbrowsersクエリが無効と判定される | E-01: L54-57, 文字列または文字列配列のみ有効 | ○ |
| C-19 | 数値を含む配列のbrowsersクエリが無効と判定される | E-01: L56, every(b => typeof b === 'string') | ○ |
| C-20 | 空文字列のbrowsersクエリが有効と判定される | E-01: L54, typeof browsers === 'string'は空文字でもtrue | ○ |
| C-21 | 空配列のbrowsersクエリが有効と判定される | E-01: L56, 空配列のeveryはtrue | ○ |

### filter-items.ts - filterItems関数（UT-HCT-022〜029, 086〜088）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 | ターゲットでサポートされていないプラグインがフィルタされる | E-02: L90-91, isRequiredがtrueならresult.add | ○ |
| C-23 | ターゲットでサポートされているプラグインが除外される | E-02: L90-91, isRequiredがfalseならaddされない | ○ |
| C-24 | includes指定時に強制的にプラグインが含まれる | E-02: L74, includes?.has(name)でtrue返却 | ○ |
| C-25 | excludes指定時にプラグインが除外される | E-02: L73, excludes?.has(name)でfalse返却 | ○ |
| C-26 | defaultIncludesが正しく適用される | E-02: L102, forEach + result.add | ○ |
| C-27 | defaultExcludesが正しく適用される | E-02: L103, forEach + result.delete | ○ |
| C-28 | pluginSyntaxMapが正しく使用される | E-02: L93-99, shippedProposalsSyntax処理 | ○ |
| C-29 | 空のlistで空のSetが返される | E-02: L87, 空のresult初期化、forループは実行されない | ○ |

### filter-items.ts - isRequired関数（UT-HCT-030〜033）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-30 | excludesに含まれる場合falseが返される | E-02: L73, excludes?.has(name)で即時return false | ○ |
| C-31 | includesに含まれる場合trueが返される | E-02: L74, includes?.has(name)で即時return true | ○ |
| C-32 | ターゲットでサポートされていない場合trueが返される | E-02: L75, !targetsSupported | ○ |
| C-33 | ターゲットでサポートされている場合falseが返される | E-02: L75, targetsSupported | ○ |

### filter-items.ts - targetsSupported関数（UT-HCT-034〜039）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-34 | すべてのターゲットでサポートされている場合trueが返される | E-02: L57, unsupportedEnvironments.length === 0 | ○ |
| C-35 | 一部のターゲットでサポートされていない場合falseが返される | E-02: L51-54, semver.gt比較 | ○ |
| C-36 | 空のターゲットでfalseが返される | E-02: L17-19, targetEnvironments.length === 0でfalse | ○ |
| C-37 | 未リリースバージョンがターゲットの場合プラグイン不要 | E-02: L35-37, isUnreleasedVersionでfalse返却 | ○ |
| C-38 | 未リリースバージョンがサポートの場合プラグイン必要 | E-02: L40-42, isUnreleasedVersionでtrue返却 | ○ |
| C-39 | 無効なバージョン文字列でエラーがスローされる | E-02: L44-48, semver.valid検証とthrow | ○ |

### utils.ts - semverify関数（UT-HCT-040〜045）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-40 | 有効なsemver文字列がそのまま返される | E-03: L21-23, semver.validならそのまま返却 | ○ |
| C-41 | 2桁バージョンがsemver形式に変換される | E-03: L33-38, '.0'を追加 | ○ |
| C-42 | 1桁バージョンがsemver形式に変換される | E-03: L38, '.0'.repeat(2 - num) | ○ |
| C-43 | 数値バージョンが文字列に変換される | E-03: L31, version.toString() | ○ |
| C-44 | 無効なバージョン文字列でエラーがスローされる | E-03: L25-29, v.invariant | ○ |
| C-45 | 0バージョンが正しく処理される | E-03: L27, versionRegExpにマッチ | ○ |

### utils.ts - semverMin関数（UT-HCT-046〜049）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | 2つのバージョンの小さい方が返される | E-03: L11-16, semver.lt比較 | ○ |
| C-47 | firstがnullの場合secondが返される | E-03: L15, first &&の短絡評価 | ○ |
| C-48 | firstがundefinedの場合secondが返される | E-03: L15, first &&の短絡評価 | ○ |
| C-49 | 同じバージョンの場合そのバージョンが返される | E-03: L15, ltがfalseなのでsecondが返る | ○ |

### utils.ts - isUnreleasedVersion関数（UT-HCT-050〜053）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-50 | safari tpが未リリースとして判定される | E-03: L41-51, unreleasedLabels.safari === 'tp' | ○ |
| C-51 | 通常バージョンが未リリースでないと判定される | E-03: L49, unreleasedLabel !== version | ○ |
| C-52 | 未リリースラベルがない環境でfalseが返される | E-03: L48-50, !!unreleasedLabelがfalse | ○ |
| C-53 | 大文字小文字を無視して判定される | E-03: L49, version.toString().toLowerCase() | ○ |

### utils.ts - getLowestUnreleased関数（UT-HCT-054〜056）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | aが未リリースの場合bが返される | E-03: L59-61, a === unreleasedLabelならreturn b | ○ |
| C-55 | bが未リリースの場合aが返される | E-03: L62-64, b === unreleasedLabelならreturn a | ○ |
| C-56 | 両方がリリース済みの場合小さい方が返される | E-03: L65, semverMin(a, b) | ○ |

### utils.ts - getHighestUnreleased関数（UT-HCT-057〜059）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-57 | aが未リリースの場合aが返される | E-03: L68-74, getLowestUnreleasedがbを返すならaを返す | ○ |
| C-58 | bが未リリースの場合bが返される | E-03: L73, getLowestUnreleasedがaを返すならbを返す | ○ |
| C-59 | 両方がリリース済みの場合大きい方が返される | E-03: L73, 三項演算子で大きい方を選択 | ○ |

### utils.ts - getLowestImplementedVersion関数（UT-HCT-060〜063）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-60 | 指定した環境のバージョンが返される | E-03: L76-80, plugin[environment]を返却 | ○ |
| C-61 | android指定時にchromeがフォールバックとして使用される | E-03: L82-84, environment === 'android'でplugin.chrome返却 | ○ |
| C-62 | 存在しない環境でundefinedが返される | E-03: L80, resultがundefinedの場合 | ○ |
| C-63 | android指定でchromeも存在しない場合undefinedが返される | E-03: L84, plugin.chromeもundefined | ○ |

### pretty.ts - prettifyVersion関数（UT-HCT-064〜067）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-64 | フルバージョンがそのまま返される | E-04: L5-23, patch !== 0の場合 | ○ |
| C-65 | パッチが0の場合省略される | E-04: L18-20, patchが0の場合pushされない | ○ |
| C-66 | マイナーとパッチが0の場合省略される | E-04: L14-16, minor || patchがfalseの場合 | ○ |
| C-67 | 文字列以外の場合そのまま返される | E-04: L6-8, typeof version !== 'string'で即座に返却 | ○ |

### pretty.ts - prettifyTargets関数（UT-HCT-068〜070）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-68 | ターゲットオブジェクトのバージョンが整形される | E-04: L25-38, Object.keys.reduceでprettifyVersion適用 | ○ |
| C-69 | 未リリースラベルはそのまま保持される | E-04: L32, unreleasedLabel !== valueの場合のみ整形 | ○ |
| C-70 | 空のターゲットで空オブジェクトが返される | E-04: L25-26, Object.keysが空配列 | ○ |

### debug.ts - getInclusionReasons関数（UT-HCT-071〜075）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-71 | プラグインが必要な理由が返される | E-05: L10-41, reduceでターゲットごとに理由を収集 | ○ |
| C-72 | サポートされている場合空の結果が返される | E-05: L28-34, 条件を満たさない場合resultに追加されない | ○ |
| C-73 | プラグインのサポートデータがない場合理由が返される | E-05: L22-23, !minVersionでprettifyVersion | ○ |
| C-74 | 複数環境の理由が返される | E-05: L17, Object.keysでターゲットをループ | ○ |
| C-75 | 未リリースターゲットは理由に含まれない | E-05: L29, !targetIsUnreleasedの条件 | ○ |

### targets.ts - 定数（UT-HCT-076〜079）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-76 | and_chrがchromeにマッピングされる | E-06: L7, and_chr: 'chrome' | ○ |
| C-77 | ios_safがiosにマッピングされる | E-06: L15, ios_saf: 'ios' | ○ |
| C-78 | op_mobがopera_mobileにマッピングされる | E-06: L18, op_mob: 'opera_mobile' | ○ |
| C-79 | safariの未リリースラベルがtpである | E-06: L1-3, unreleasedLabels.safari = 'tp' | ○ |

### options.ts - TargetNames定数（UT-HCT-080）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-80 | すべての有効なターゲット名が定義されている | E-07: L1-16, 14個のターゲット定義 | ○ |

### index.ts - 追加テストケース（UT-HCT-081〜088）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-81 | browserslistEnvオプションが正しく使用される | E-01: L233, options.browserslistEnv使用 | ○ |
| C-82 | configFileオプションが正しく使用される | E-01: L226, options.configFile使用 | ○ |
| C-83 | BROWSERSLIST環境変数が使用される | E-01: L223, process.env.BROWSERSLIST | ○ |
| C-84 | ターゲットがアルファベット順でソートされる | E-01: L294, Object.keys(targets).sort() | ○ |
| C-85 | キャッシュが正しく機能する | E-01: L179-188, LruCacheの使用 | ○ |
| C-86 | includesがexcludesより優先されない | E-02: L73, excludesが先に評価される | ○ |
| C-87 | defaultIncludesがexcludesで除外される | E-02: L102, !excludes.has(item)条件 | ○ |
| C-88 | defaultExcludesがincludesで保持される | E-02: L103, !includes.has(item)条件 | ○ |

## 4) 不足情報（Unknown / Missing）
- **なし**：すべてのテストケースはソースコードに基づいて生成されました

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**：すべてのテストケースがソースコードの実装に直接対応しており、根拠が明確です

### 注意点
1. **外部依存**: browserslist、semver、lru-cacheなどの外部パッケージに依存しているため、これらのパッケージの動作もテストに影響する可能性があります
2. **環境依存**: `process.versions.node`、`process.env.BROWSERSLIST`などの環境依存の処理があります
3. **キャッシュ**: LruCacheを使用しているため、テスト間でキャッシュの状態に注意が必要です

## 6) レビュアーチェックリスト（最小）
- [ ] getTargets関数の正常系テストケース（UT-HCT-001〜010）がユースケースを網羅しているか
- [ ] 異常系テストケース（UT-HCT-011〜013, 039, 044）のエラーメッセージが適切か
- [ ] 境界値テストケース（UT-HCT-014, 020, 021, 029, 036, 045, 049, 70）が網羅的か
- [ ] semver関連の処理（semverify, semverMin等）のテストケースが十分か
- [ ] 未リリースバージョン（safari tp）の処理が正しくテストされているか
- [ ] フォールバック処理（android -> chrome）のテストケースが適切か
- [ ] キャッシュ機能のテストが適切に設計されているか
