---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 80
  claims_with_evidence: 76
  claims_without_evidence: 4
confidence_derived: 0.95
---

# 根拠レポート：babel-plugin-transform-modules-commonjs 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：76 / 80、根拠なし：4
- 優先レビュー（高）
  1. **C-67, C-68**：インターフェース検証 - TypeScriptの型定義は実行時テストの対象外の可能性
  2. **C-69, C-70**：getAssertion関数 - template.expression.astのテスト方法の確認が必要
  3. **C-75**：Assertion failureのエッジケース - 実際に発生するシナリオの確認が必要

## 2) 参照した情報（Evidence一覧）
> ソースコードファイルとその主要な要素

- E-01: `packages/babel-plugin-transform-modules-commonjs/src/index.ts` - メインプラグインファイル（293行）
- E-02: `packages/babel-plugin-transform-modules-commonjs/src/lazy.ts` - 遅延読み込み機能（42行）
- E-03: `packages/babel-plugin-transform-modules-commonjs/src/dynamic-import.ts` - 動的インポート変換（29行）
- E-04: `packages/babel-plugin-transform-modules-commonjs/src/hooks.ts` - フックシステム（66行）
- E-05: `packages/babel-plugin-transform-modules-commonjs/src/index.ts:21-32` - Options interface定義
- E-06: `packages/babel-plugin-transform-modules-commonjs/src/index.ts:34-68` - プラグインファクトリとオプションバリデーション
- E-07: `packages/babel-plugin-transform-modules-commonjs/src/index.ts:86-164` - moduleExportsVisitor定義
- E-08: `packages/babel-plugin-transform-modules-commonjs/src/index.ts:166-173` - pre()メソッド
- E-09: `packages/babel-plugin-transform-modules-commonjs/src/index.ts:175-290` - visitorオブジェクト
- E-10: `packages/babel-plugin-transform-modules-commonjs/src/lazy.ts:7-41` - lazyImportsHook関数
- E-11: `packages/babel-plugin-transform-modules-commonjs/src/dynamic-import.ts:16-28` - transformDynamicImport関数
- E-12: `packages/babel-plugin-transform-modules-commonjs/src/hooks.ts:31-35` - defineCommonJSHook関数
- E-13: `packages/babel-plugin-transform-modules-commonjs/src/hooks.ts:37-44` - findMap関数
- E-14: `packages/babel-plugin-transform-modules-commonjs/src/hooks.ts:46-65` - makeInvokers関数
- E-15: `packages/babel-plugin-transform-modules-commonjs/src/hooks.ts:12-29` - CommonJSHook interface

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

### index.ts - プラグインファクトリ（C-01〜C-11）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | プラグインファクトリが正常に初期化されること | E-01, E-06 | ○ |
| C-02 | strictNamespaceオプションがbooleanで設定できること | E-05, E-06 (L70-72) | ○ |
| C-03 | mjsStrictNamespaceオプションがbooleanで設定できること | E-05, E-06 (L73-75) | ○ |
| C-04 | lazyオプションがbooleanで設定できること | E-05, E-06 (L62-68) | ○ |
| C-05 | lazyオプションが文字列配列で設定できること | E-06 (L64-65) | ○ |
| C-06 | lazyオプションが関数で設定できること | E-06 (L64) | ○ |
| C-07 | lazyオプションが不正な型の場合エラーがスローされること | E-06 (L67) | ○ |
| C-08 | strictNamespaceがboolean以外の場合エラーがスローされること | E-06 (L71) | ○ |
| C-09 | mjsStrictNamespaceがboolean以外の場合エラーがスローされること | E-06 (L74) | ○ |
| C-10 | pre()でファイルにプラグイン情報が設定されること | E-08 (L170) | ○ |
| C-11 | lazy=trueの場合lazyImportsHookが登録されること | E-08 (L172) | ○ |

### index.ts - moduleExportsVisitor（C-12〜C-21）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-12 | module参照がgetAssertionに置換されること | E-07 (L87-106) | ○ |
| C-13 | exports参照がgetAssertionに置換されること | E-07 (L87-106) | ○ |
| C-14 | module/exports以外の識別子は無視されること | E-07 (L89) | ○ |
| C-15 | スコープ内で再宣言された場合は無視されること | E-07 (L94-103) | ○ |
| C-16 | module++がアサーションを含む代入に置換されること | E-07 (L108-127) | ○ |
| C-17 | exports--がアサーションを含む代入に置換されること | E-07 (L108-127) | ○ |
| C-18 | 引数がIdentifierでない場合は無視されること | E-07 (L110) | ○ |
| C-19 | module = xがシーケンス式に置換されること | E-07 (L129-144) | ○ |
| C-20 | exports = xがシーケンス式に置換されること | E-07 (L129-144) | ○ |
| C-21 | パターン代入で{module} = xが検出されること | E-07 (L145-161) | ○ |

### index.ts - visitor（C-22〜C-35, C-69〜C-80）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 | 動的import()がrequireに変換されること | E-09 (L176-190) | ○ |
| C-23 | dynamic-importプラグインがない場合は無視されること | E-09 (L181) | ○ |
| C-24 | 通常のCallExpressionは無視されること | E-09 (L182) | ○ |
| C-25 | ESモジュールがCommonJSに変換されること | E-09 (L193-289) | ○ |
| C-26 | ESモジュールでない場合は無視されること | E-09 (L194) | ○ |
| C-27 | exports変数がリネームされること | E-09 (L198) | ○ |
| C-28 | module変数がリネームされること | E-09 (L199) | ○ |
| C-29 | require変数がリネームされること | E-09 (L200) | ○ |
| C-30 | __filename変数がリネームされること | E-09 (L201) | ○ |
| C-31 | __dirname変数がリネームされること | E-09 (L202) | ○ |
| C-32 | allowCommonJSExports=falseの場合moduleExportsVisitorが実行されること | E-09 (L207-211) | ○ |
| C-33 | 副作用のみのimportがrequire文に変換されること | E-09 (L244-249) | ○ |
| C-34 | .mjsファイルでmjsStrictNamespaceが適用されること | E-09 (L228-232) | ○ |
| C-35 | ヘッダーが先頭に挿入されること | E-09 (L282) | ○ |
| C-69 | エラーをスローする即時実行関数式が生成されること | E-01 (L77-84) | ○ |
| C-70 | エラーメッセージにlocalNameが含まれること | E-01 (L77-84) | ○ |
| C-71 | constantReexportsオプションが正しく渡されること | E-01 (L57), E-09 (L219) | ○ |
| C-72 | enumerableModuleMetaオプションが正しく渡されること | E-01 (L58), E-09 (L220) | ○ |
| C-73 | noIncompleteNsImportDetectionオプションが正しく渡されること | E-01 (L59-60), E-09 (L233) | ○ |
| C-74 | wrapInteropが呼ばれること | E-09 (L252) | ○ |
| C-75 | lazyでside-effect importがfunction wrapの場合Assertion failureエラー | E-09 (L245-247) | ○ |
| C-76 | VariableDeclarationがスコープに登録されること | E-09 (L283-287) | ○ |
| C-77 | ensureStatementsHoistedが呼ばれること | E-09 (L281) | ○ |
| C-78 | header.locが設定されること | E-09 (L268) | ○ |
| C-79 | スコープチェーン全体でrequireがリネームされること | E-09 (L184-187) | ○ |
| C-80 | allowCommonJSExportsがデフォルトでtrueであること | E-01 (L53) | ○ |

### lazy.ts - lazyImportsHook（C-36〜C-48）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-36 | lazy=trueで外部モジュールがlazy/functionを返すこと | E-10 (L14-17) | ○ |
| C-37 | lazy=trueでローカルモジュールがnullを返すこと | E-10 (L17) | ○ |
| C-38 | lazy配列に含まれるモジュールがlazy/functionを返すこと | E-10 (L19-20) | ○ |
| C-39 | lazy配列に含まれないモジュールがnullを返すこと | E-10 (L20) | ○ |
| C-40 | lazy関数がtrueを返す場合lazy/functionを返すこと | E-10 (L22-23) | ○ |
| C-41 | lazy関数がfalseを返す場合nullを返すこと | E-10 (L23) | ○ |
| C-42 | 副作用インポートの場合nullを返すこと | E-10 (L11-12) | ○ |
| C-43 | reexportAllの場合nullを返すこと | E-10 (L11) | ○ |
| C-44 | lazy/functionでラッパー関数が生成されること | E-10 (L26-36) | ○ |
| C-45 | referenced=falseの場合falseを返すこと | E-10 (L28) | ○ |
| C-46 | payloadがlazy/function以外の場合undefinedを返すこと | E-10 (L27) | ○ |
| C-47 | lazy/functionで参照がCallExpressionにラップされること | E-10 (L38-40) | ○ |
| C-48 | payloadがlazy/function以外の場合undefinedを返すこと | E-10 (L38) | ○ |

### dynamic-import.ts（C-49〜C-53）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 | require(source)形式のASTが生成されること | E-11 (L8-9) | ○ |
| C-50 | interopRequireWildcardでラップされたrequireが生成されること | E-11 (L11-14) | ○ |
| C-51 | noInterop=trueの場合requireNoInteropが使用されること | E-11 (L21) | ○ |
| C-52 | noInterop=falseの場合requireInteropが使用されること | E-11 (L21) | ○ |
| C-53 | path.replaceWithでASTが置換されること | E-11 (L23-27) | ○ |

### hooks.ts（C-54〜C-68）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | フックがファイルに登録されること | E-12 (L31-35) | ○ |
| C-55 | 初回登録時に配列が初期化されること | E-12 (L33) | ○ |
| C-56 | 複数フックが順番に登録されること | E-12 (L34) | ○ |
| C-57 | 配列要素のコールバック結果が非nullの場合その値を返すこと | E-13 (L37-44) | ○ |
| C-58 | 配列がnullの場合undefinedを返すこと | E-13 (L38) | ○ |
| C-59 | 全要素がnullを返す場合undefinedを返すこと | E-13 (L40-42) | ○ |
| C-60 | 空配列の場合undefinedを返すこと | E-13 (L39) | ○ |
| C-61 | getWrapperPayloadインボーカーが生成されること | E-14 (L55-57) | ○ |
| C-62 | wrapReferenceインボーカーが生成されること | E-14 (L58-60) | ○ |
| C-63 | buildRequireWrapperインボーカーが生成されること | E-14 (L61-63) | ○ |
| C-64 | 登録されたフックのgetWrapperPayloadを順次実行すること | E-14 (L56) | ○ |
| C-65 | 登録されたフックのwrapReferenceを順次実行すること | E-14 (L59) | ○ |
| C-66 | 登録されたフックのbuildRequireWrapperを順次実行すること | E-14 (L62) | ○ |
| C-67 | name属性が文字列であること | E-15 (L13) | △ |
| C-68 | version属性が文字列であること | E-15 (L14) | △ |

## 4) 不足情報（Unknown / Missing）
- **C-67, C-68**: TypeScriptインターフェースの型検証はランタイムテストでは直接検証できない
  - 候補：型ガードの実装 / TSのコンパイルエラー確認 / anyでの代入テスト
- **統合テスト観点**: 実際のBabel変換結果との照合が必要
  - 候補：fixtureテストの参照 / スナップショットテスト
- **エッジケースの網羅性**: 複雑なネストされたimport/export構造のテスト
  - 候補：既存のfixtureテスト（test/fixturesディレクトリ）の参照

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: 基本的な正常系・異常系テストケース（C-01〜C-66, C-69〜C-80）
  - ソースコードの直接的な対応があり、テスト実装が容易
- **1（中リスク）**: インターフェース型検証（C-67, C-68）
  - TypeScriptの型システムに依存しており、ランタイムテストでの検証方法を検討する必要あり
- **1（中リスク）**: Assertion failureのエッジケース（C-75）
  - 発生条件が限定的であり、テスト環境の構築に注意が必要

## 6) レビュアーチェックリスト（最小）
- [ ] 全80テストケースがソースコードの該当箇所と対応しているか確認
- [ ] 優先度「高」のテストケース（17件）が重要なビジネスロジックをカバーしているか確認
- [ ] 異常系テストケース（C-07〜C-09, C-75）のエラーメッセージが正確か確認
- [ ] 境界値テストケース（C-14, C-18, C-42〜C-43, C-45〜C-46, C-48, C-58〜C-60）が適切か確認
- [ ] 遅延読み込み機能（lazy）のテストケース（C-36〜C-48）の網羅性を確認
- [ ] 動的インポート変換（C-49〜C-53）のテストケースがnoInteropの両パターンをカバーしているか確認
- [ ] フックシステム（C-54〜C-66）のチェーン実行ロジックが正しくテストされているか確認
- [ ] 既存のfixtureテスト（test/fixtures/）との整合性を確認
