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

# 根拠レポート：async-modules 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：32 / 32、根拠なし：0
- 優先レビュー（高）
  1. **該当なし**：全てのClaimに根拠が存在

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

- E-01: `lib/async-modules/AsyncModuleHelpers.js` - getOutgoingAsyncModules関数（行20-50）
- E-02: `lib/async-modules/AwaitDependenciesInitFragment.js` - AwaitDependenciesInitFragmentクラス（行20-88）
- E-03: `lib/async-modules/InferAsyncModulesPlugin.js` - InferAsyncModulesPluginクラス（行15-52）
- E-04: `lib/InitFragment.js` - InitFragment基底クラス（行56-204）、STAGE_ASYNC_DEPENDENCIES定数（行201）
- E-05: `lib/RuntimeGlobals.js` - RuntimeGlobals.module定数
- E-06: `lib/dependencies/HarmonyImportDependency.js` - HarmonyImportDependencyクラス（依存関係タイプの判定に使用）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | getOutgoingAsyncModulesが非同期モジュール（buildMeta.async=true）を正しく収集する | E-01（行28-29: `module.buildMeta.async`チェックと`set.add(module)`） | ○ |
| C-02 | 再帰的に辿った先の非同期モジュールが収集される | E-01（行25-48: 再帰関数gの定義と呼び出し） | ○ |
| C-03 | HarmonyImportDependencyの接続のみが探索対象となる | E-01（行36-38: `c.dependency instanceof HarmonyImportDependency`） | ○ |
| C-04 | isTargetActive(undefined)がtrueの接続のみが探索される | E-01（行39: `c.isTargetActive(undefined)`） | ○ |
| C-05 | 循環参照がある場合もseenセットにより無限ループしない | E-01（行24,26: `seen`セットと`seen.has(module)`チェック） | ○ |
| C-06 | isAsyncがfalseのモジュールで空のSetが返る | E-01（行26: `!moduleGraph.isAsync(module)`のガード条件） | ○ |
| C-07 | outgoingConnectionMapがnull/undefinedの場合に空のSetが返る | E-01（行33: `if (outgoingConnectionMap)`のnullチェック） | ○ |
| C-08 | buildMetaがundefinedのモジュールの場合に正しく処理される | E-01（行28: `module.buildMeta && module.buildMeta.async`の短絡評価） | ○ |
| C-09 | 接続のmoduleがnull/falsyの場合にスキップされる | E-01（行41: `&& module`のfalsyチェック） | ○ |
| C-10 | コンストラクタが依存関係Mapを正しく設定する | E-02（行24-33: constructor内の`this.dependencies = dependencies`） | ○ |
| C-11 | 親クラスInitFragmentのプロパティが正しく設定される | E-02（行25-30: `super(undefined, InitFragment.STAGE_ASYNC_DEPENDENCIES, 0, "await-dependencies")`）, E-04（行201: `STAGE_ASYNC_DEPENDENCIES = 60`） | ○ |
| C-12 | 2つのフラグメントの依存関係が正しくマージされる | E-02（行39-45: merge関数の実装） | ○ |
| C-13 | 同一キーの場合はthisの値で上書きされる | E-02（行40-43: `new Map(other.dependencies)`の後に`this.dependencies`をsetするため、thisの値が優先） | ○ |
| C-14 | マージ結果が新しいインスタンスである | E-02（行44: `return new AwaitDependenciesInitFragment(dependencies)`） | ○ |
| C-15 | 空のMapを持つフラグメント同士のマージ | E-02（行39-45: merge関数は空Mapでも正常動作） | ○ |
| C-16 | 依存関係が1件の場合にインデックスアクセスのコードが生成される | E-02（行64-75: `this.dependencies.size === 1`の分岐でインデックスアクセスコード生成） | ○ |
| C-17 | 複数件でdestructuringサポートありの場合にdestructuring構文が使用される | E-02（行76-82: else分岐でdestructuring構文生成） | ○ |
| C-18 | 複数件でdestructuringサポートなしの場合にインデックスアクセスが使用される | E-02（行64-67: `!runtimeTemplate.supportsDestructuring()`の条件分岐） | ○ |
| C-19 | RuntimeGlobals.moduleがruntimeRequirementsに追加される | E-02（行52: `runtimeRequirements.add(RuntimeGlobals.module)`）, E-05 | ○ |
| C-20 | 依存関係が空Mapの場合に空文字列が返却される | E-02（行53-55: `if (this.dependencies.size === 0) return ""`） | ○ |
| C-21 | 生成コードに__webpack_handle_async_dependencies__呼び出しが含まれる | E-02（行61: テンプレート文字列に`__webpack_handle_async_dependencies__`を含む） | ○ |
| C-22 | 生成コードにawait式とthenチェックが含まれる | E-02（行69: `.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__`） | ○ |
| C-23 | compilation.hooks.finishModulesにタップが登録される | E-03（行24: `compilation.hooks.finishModules.tap(PLUGIN_NAME, ...)`） | ○ |
| C-24 | buildMeta.asyncがtrueのモジュールがsetAsyncで非同期マークされる | E-03（行28-33: `module.buildMeta.async`チェックと`moduleGraph.setAsync(module)`） | ○ |
| C-25 | 非同期モジュールの親モジュールも非同期マークされる | E-03（行32-48: queueを使った伝播ロジック、`queue.add(originModule)`） | ○ |
| C-26 | HarmonyImportDependency以外の依存関係では非同期性が伝播しない | E-03（行39-40: `c.dependency instanceof HarmonyImportDependency`）, E-06 | ○ |
| C-27 | isTargetActive(undefined)がfalseの接続では非同期性が伝播しない | E-03（行41: `c.isTargetActive(undefined)`） | ○ |
| C-28 | modulesが空の場合にエラーが発生しない | E-03（行27: `for (const module of modules)`で空配列は0回ループ） | ○ |
| C-29 | buildMetaがundefinedのモジュールがスキップされる | E-03（行28: `module.buildMeta && module.buildMeta.async`の短絡評価） | ○ |
| C-30 | compiler.hooks.compilationにタップが登録される | E-03（行22: `compiler.hooks.compilation.tap(PLUGIN_NAME, ...)`） | ○ |
| C-31 | 多段の非同期伝播で全てが非同期マークされる | E-03（行32-48: queueベースのBFS実装で多段伝播を処理） | ○ |
| C-32 | buildMeta.asyncがfalseのモジュールは初期キューに追加されない | E-03（行28: `module.buildMeta.async`はfalseの場合truthyではないためスキップ） | ○ |

## 4) 不足情報（Unknown / Missing）
- 全てのClaimに対してソースコード上の根拠が存在するため、不足情報なし

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全32件のClaimに対してソースコードの明確な根拠が存在する
- 0: 低リスク - テスト対象のモジュールは3ファイル・合計約150行と小規模であり、コード全体を網羅的にカバーしている
- 1: 中リスク - HarmonyImportDependencyやModuleGraphなどの外部依存のモック設計は、実際のテスト実装時に調整が必要になる可能性がある

## 6) レビュアーチェックリスト（最小）
- [ ] getOutgoingAsyncModulesの再帰探索テスト（C-02, C-05）のモック設計が実際のModuleGraph構造と整合しているか
- [ ] AwaitDependenciesInitFragment.getContentの生成コード検証（C-16~C-22）が実際のwebpackランタイムコードと一致しているか
- [ ] InferAsyncModulesPluginの伝播テスト（C-25, C-31）でqueue（Set）ベースのBFS動作が正しく検証されているか
- [ ] テストケースの優先度設定が妥当か（金額計算等はないが、モジュールバンドルの正確性に影響する処理は「高」としている）
