---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 131
  claims_with_evidence: 127
  claims_without_evidence: 4
confidence_derived: 0.97
---

# 根拠レポート：schemes モジュール単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：127 / 131、根拠なし：4
- 優先レビュー（高）
  1. **C-086 (UT-SCH-086)**：HttpUriPluginのバリデーションエラー条件がスキーマ定義に依存しており、実際のスキーマ検証ルールの確認が必要
  2. **C-105〜C-107 (UT-SCH-105〜107)**：gzip/brotli/deflate展開のテストケースは圧縮ライブラリの動作に依存するため、モック設計の詳細確認が必要
  3. **C-117 (UT-SCH-117)**：EOL自動修正の挙動はプラットフォーム依存の可能性があり、Windows/Linux両環境での確認が必要

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

- E-01: `lib/schemes/DataUriPlugin.js` - DataUriPluginクラス定義（47行）
- E-02: `lib/schemes/FileUriPlugin.js` - FileUriPluginクラス定義（54行）
- E-03: `lib/schemes/VirtualUrlPlugin.js` - VirtualUrlPluginクラスおよびヘルパー関数定義（248行）
- E-04: `lib/schemes/HttpUriPlugin.js` - HttpUriPluginクラス、Lockfileクラス、およびヘルパー関数定義（1410行）
- E-05: `lib/util/dataURL.js` - URIRegEx, decodeDataURI（DataUriPluginで参照）
- E-06: `lib/ModuleNotFoundError.js` - ModuleNotFoundErrorクラス（VirtualUrlPluginで参照）
- E-07: `lib/NormalModule.js` - NormalModule.getCompilationHooksメソッド（各プラグインで参照）
- E-08: `lib/util/identifier.js` - parseResourceWithoutFragment（VirtualUrlPluginで参照）
- E-09: `schemas/plugins/schemes/HttpUriPlugin.check.js` - HttpUriPluginオプションバリデーション（E-04で参照）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | DataUriPlugin.applyでdata URIスキーム用フックが登録される | E-01 (L21-44) | ○ |
| C-002 | data URIからmimetype等が正しく抽出される | E-01 (L28-36), E-05 | ○ |
| C-003 | パラメータ付きdata URIの解析 | E-01 (L28-36), E-05 | ○ |
| C-004 | 正規表現に非マッチのdata URI | E-01 (L28-36), E-05 | ○ |
| C-005 | mimetypeが空のdata URI | E-01 (L30) | ○ |
| C-006 | readResourceForSchemeでdecodeDataURIが呼ばれる | E-01 (L39-41), E-05 | ○ |
| C-007 | FileUriPlugin.applyでfile URIスキーム用フックが登録される | E-02 (L21-49) | ○ |
| C-008 | file URIからパス・クエリ・フラグメントが分解される | E-02 (L27-36) | ○ |
| C-009 | クエリ・フラグメントなしのfile URI | E-02 (L27-36) | ○ |
| C-010 | resolveForSchemeがtrueを返す | E-02 (L37) | ○ |
| C-011 | readResourceでファイルが読み込まれる | E-02 (L39-48) | ○ |
| C-012 | 読み取りファイルがdependencyとして追加される | E-02 (L45) | ○ |
| C-013 | ファイル読み取りエラー時のハンドリング | E-02 (L44) | ○ |
| C-014 | normalizeModuleで文字列が正規化される | E-03 (L44-51) | ○ |
| C-015 | normalizeModuleで関数が正規化される | E-03 (L52-55) | ○ |
| C-016 | normalizeModuleでオブジェクトがパススルーされる | E-03 (L58) | ○ |
| C-017 | normalizeModulesで複数モジュールが正規化される | E-03 (L69-74) | ○ |
| C-018 | normalizeModulesで空オブジェクトが処理される | E-03 (L69-74) | ○ |
| C-019 | toVidでvirtual module IDが生成される | E-03 (L82-84) | ○ |
| C-020 | toCacheKeyでキャッシュキーが生成される | E-03 (L94-96) | ○ |
| C-021 | VirtualUrlPluginデフォルトスキームでインスタンス生成 | E-03 (L109-114) | ○ |
| C-022 | VirtualUrlPluginカスタムスキームでインスタンス生成 | E-03 (L109-114) | ○ |
| C-023 | VirtualUrlPlugin.applyでフックが登録される | E-03 (L121-213) | ○ |
| C-024 | assetPathフックでセーフパス変換 | E-03 (L129-148) | ○ |
| C-025 | 仮想モジュール以外のファイル名が変換されない | E-03 (L132) | ○ |
| C-026 | resolveForSchemeでresourceDataが設定される | E-03 (L150-175) | ○ |
| C-027 | バージョン付きモジュールでvalueCacheVersionsが設定される | E-03 (L165-172) | ○ |
| C-028 | readResourceで仮想モジュールソースが読み込まれる | E-03 (L178-211) | ○ |
| C-029 | source関数エラー時のハンドリング | E-03 (L208-209) | ○ |
| C-030 | findVirtualModuleConfigByIdで設定が取得される | E-03 (L220-232) | ○ |
| C-031 | 未登録IDでModuleNotFoundErrorがスローされる | E-03 (L222-229), E-06 | ○ |
| C-032 | getCacheVersionでtrueがundefinedに変換される | E-03 (L240-242) | ○ |
| C-033 | getCacheVersionで文字列がそのまま返却される | E-03 (L242) | ○ |
| C-034 | getCacheVersionで関数の戻り値が返却される | E-03 (L242) | ○ |
| C-035 | getCacheVersionで空文字列が'unset'に変換される | E-03 (L242) | ○ |
| C-036 | toSafePathでURLパスが安全形式に変換される | E-04 (L114-115) | ○ |
| C-037 | toSafePathで前後の非英数字が除去される | E-04 (L114-115) | ○ |
| C-038 | toSafePathで空文字列入力 | E-04 (L114-115) | ○ |
| C-039 | computeIntegrityでsha512 integrityが生成される | E-04 (L121-126) | ○ |
| C-040 | computeIntegrityの冪等性 | E-04 (L121-126) | ○ |
| C-041 | computeIntegrityで空Buffer処理 | E-04 (L121-126) | ○ |
| C-042 | verifyIntegrityで正しいintegrityの検証成功 | E-04 (L133-136) | ○ |
| C-043 | verifyIntegrityで不正integrityの検証失敗 | E-04 (L133-136) | ○ |
| C-044 | verifyIntegrityでignore指定時のバイパス | E-04 (L134) | ○ |
| C-045 | parseKeyValuePairsでkey=value文字列がパースされる | E-04 (L142-158) | ○ |
| C-046 | parseKeyValuePairsで値なしキーの処理 | E-04 (L152-155) | ○ |
| C-047 | parseKeyValuePairsで空文字列入力 | E-04 (L142-158) | ○ |
| C-048 | parseKeyValuePairsでスペーストリム | E-04 (L148-150) | ○ |
| C-049 | parseCacheControlでmax-age計算 | E-04 (L165-185) | ○ |
| C-050 | parseCacheControlでno-cache処理 | E-04 (L174) | ○ |
| C-051 | parseCacheControlでmust-revalidate処理 | E-04 (L178) | ○ |
| C-052 | parseCacheControlでundefinedヘッダー | E-04 (L172) | ○ |
| C-053 | parseCacheControlで不正max-age値 | E-04 (L175) | ○ |
| C-054 | areLockfileEntriesEqualで同一エントリ比較 | E-04 (L199-202) | ○ |
| C-055 | areLockfileEntriesEqualで異なるresolved | E-04 (L200) | ○ |
| C-056 | areLockfileEntriesEqualで異なるintegrity | E-04 (L201) | ○ |
| C-057 | areLockfileEntriesEqualで異なるcontentType | E-04 (L202) | ○ |
| C-058 | entryToStringでLockfileEntry文字列化 | E-04 (L208-209) | ○ |
| C-059 | sanitizeUrlForErrorで有効URL処理 | E-04 (L216-225) | ○ |
| C-060 | sanitizeUrlForErrorで無効URL処理 | E-04 (L221-224) | ○ |
| C-061 | sanitizeUrlForErrorで改行除去 | E-04 (L223) | ○ |
| C-062 | Lockfileコンストラクタ | E-04 (L228-233) | ○ |
| C-063 | Lockfile.parseで有効なJSON解析 | E-04 (L239-260) | ○ |
| C-064 | Lockfile.parseで文字列エントリ解析 | E-04 (L250-252) | ○ |
| C-065 | Lockfile.parseでデフォルトresolved | E-04 (L254) | ○ |
| C-066 | Lockfile.parseで不正バージョンエラー | E-04 (L243) | ○ |
| C-067 | Lockfile.parseで不正JSONエラー | E-04 (L242) | ○ |
| C-068 | Lockfile.toStringでJSON文字列化 | E-04 (L265-283) | ○ |
| C-069 | Lockfile.toStringでエントリソート | E-04 (L267) | ○ |
| C-070 | Lockfile.toStringでカスタムresolved出力 | E-04 (L273-274) | ○ |
| C-071 | Lockfile.toStringで文字列エントリ出力 | E-04 (L269-270) | ○ |
| C-072 | Lockfile.toStringで空Lockfile文字列化 | E-04 (L265-283) | ○ |
| C-073 | cachedWithoutKeyで初回キャッシュ | E-04 (L301-327) | ○ |
| C-074 | cachedWithoutKeyで2回目キャッシュヒット | E-04 (L310-311) | ○ |
| C-075 | cachedWithoutKeyでエラーキャッシュ | E-04 (L312, L319) | ○ |
| C-076 | cachedWithoutKeyで同時呼び出しハンドリング | E-04 (L313-314, L322-324) | ○ |
| C-077 | cachedWithKeyでキー別キャッシュ | E-04 (L347-420) | ○ |
| C-078 | cachedWithKeyで異なるキーのキャッシュ分離 | E-04 (L360-384) | ○ |
| C-079 | cachedWithKey.forceで強制再取得 | E-04 (L391-418) | ○ |
| C-080 | cachedWithKey.forceキャッシュ | E-04 (L392-400) | ○ |
| C-081 | proxyFetchでプロキシなし直接リクエスト | E-04 (L51-95, L90-92) | ○ |
| C-082 | proxyFetchでプロキシ経由リクエスト | E-04 (L65-89) | ○ |
| C-083 | proxyFetchでプロキシ接続エラー | E-04 (L81-88) | ○ |
| C-084 | proxyFetchでEventEmitter返却 | E-04 (L52-53, L94) | ○ |
| C-085 | HttpUriPluginコンストラクタ | E-04 (L448-452) | ○ |
| C-086 | HttpUriPluginバリデーションエラー | E-04 (L449), E-09 | △ |
| C-087 | HttpUriPlugin.applyでhttp/httpsフック登録 | E-04 (L459-474, L664) | ○ |
| C-088 | isAllowedで文字列パターン許可判定 | E-04 (L983-993) | ○ |
| C-089 | isAllowedで正規表現パターン許可判定 | E-04 (L996) | ○ |
| C-090 | isAllowedで関数パターン許可判定 | E-04 (L994-995) | ○ |
| C-091 | isAllowedで不許可URL判定 | E-04 (L1000) | ○ |
| C-092 | isAllowedで不正URL拒否 | E-04 (L975-981) | ○ |
| C-093 | validateRedirectLocationで有効な絶対URL | E-04 (L670-694) | ○ |
| C-094 | validateRedirectLocationで相対URL解決 | E-04 (L674) | ○ |
| C-095 | validateRedirectLocationで不許可URLリダイレクト | E-04 (L686-693) | ○ |
| C-096 | validateRedirectLocationで不正プロトコルリダイレクト | E-04 (L681-684) | ○ |
| C-097 | validateRedirectLocationで無効URL | E-04 (L675-679) | ○ |
| C-098 | resolveContentでコンテンツ正常取得 | E-04 (L701-763) | ○ |
| C-099 | resolveContentでリダイレクト追跡 | E-04 (L717-744) | ○ |
| C-100 | resolveContentでリダイレクト上限超過 | E-04 (L726-728), E-04 (L37: MAX_REDIRECTS=5) | ○ |
| C-101 | resolveContentでintegrity不一致時の再取得 | E-04 (L746-753) | ○ |
| C-102 | fetchContentRawでHTTP 200レスポンス | E-04 (L771-947) | ○ |
| C-103 | fetchContentRawで304レスポンス | E-04 (L839-851) | ○ |
| C-104 | fetchContentRawで301-308リダイレクト | E-04 (L852-889) | ○ |
| C-105 | fetchContentRawでgzip展開 | E-04 (L898) | △ |
| C-106 | fetchContentRawでbrotli展開 | E-04 (L900) | △ |
| C-107 | fetchContentRawでdeflate展開 | E-04 (L902) | △ |
| C-108 | fetchContentRawで非200エラーレスポンス | E-04 (L923-932) | ○ |
| C-109 | fetchContentRawで接続中断エラー | E-04 (L916-918) | ○ |
| C-110 | fetchContentRawでネットワークエラー | E-04 (L942-946) | ○ |
| C-111 | getInfoで許可URL情報取得 | E-04 (L1005-1253) | ○ |
| C-112 | getInfoで不許可URL拒否 | E-04 (L1013-1021) | ○ |
| C-113 | getInfoでfrozen時エントリなしエラー | E-04 (L1027-1032) | ○ |
| C-114 | getInfoでロックファイルキャッシュ読み取り | E-04 (L1147-1167) | ○ |
| C-115 | getInfoでupgradeモード再取得 | E-04 (L1163-1167) | ○ |
| C-116 | getInfoでfrozen時integrity不一致エラー | E-04 (L1221-1237) | ○ |
| C-117 | getInfoでEOL自動修正 | E-04 (L1169-1219) | ○ |
| C-118 | resolveInSchemeで相対URLスキーム内解決 | E-04 (L1285-1300) | ○ |
| C-119 | resolveInSchemeで非相対URLスキップ | E-04 (L1289-1293) | ○ |
| C-120 | needBuildでintegrityの変更判定 | E-04 (L1315-1332) | ○ |
| C-121 | needBuildでintegrityの一致判定 | E-04 (L1327) | ○ |
| C-122 | needBuildで非HTTP URLスキップ | E-04 (L1329-1331) | ○ |
| C-123 | finishModulesでロックファイル書き込み | E-04 (L1334-1404) | ○ |
| C-124 | finishModulesでロックファイル更新なし | E-04 (L1337) | ○ |
| C-125 | finishModulesでロックファイル書き込みエラー | E-04 (L1375-1389) | ○ |
| C-126 | finishModulesで同時書き込み制御 | E-04 (L1397-1402) | ○ |
| C-127 | respondWithUrlModuleでresourceData設定 | E-04 (L1260-1275) | ○ |
| C-128 | respondWithUrlModuleでgetInfoエラー | E-04 (L1262) | ○ |
| C-129 | getCacheKeyで一意キー生成 | E-04 (L516-542) | ○ |
| C-130 | getCacheKeyの冪等性 | E-04 (L517-518) | ○ |
| C-131 | getCacheKeyで長い拡張子処理 | E-04 (L534) | ○ |

## 4) 不足情報（Unknown / Missing）
- C-086: HttpUriPluginのバリデーションルールはスキーマファイル（`schemas/plugins/schemes/HttpUriPlugin.json`）に定義されており、テストケースの「無効なオプション」の具体例はスキーマ内容に依存する。スキーマの完全な検証ルール一覧は未確認。
  - 候補：`schemas/plugins/schemes/HttpUriPlugin.json` / `schemas/plugins/schemes/HttpUriPlugin.check.js` / webpack公式ドキュメント
- C-105〜C-107: gzip/brotli/deflate展開処理はNode.jsの`zlib`モジュールに依存しており、テストではストリームのモックが必要。具体的なモック構成は未定義。
  - 候補：Node.js zlibドキュメント / 既存テストコードのモックパターン

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - DataUriPlugin, FileUriPlugin関連テストケース（C-001〜C-013）はシンプルな同期処理でリスク低
- 1: 中リスク - VirtualUrlPlugin関連テストケース（C-014〜C-035）は非同期処理を含むが、比較的単純なロジック
- 1: 中リスク - HttpUriPluginヘルパー関数テストケース（C-036〜C-084）は純粋関数が多く検証しやすいが、cachedWithKey/cachedWithoutKeyの同時呼び出しテストは競合状態に注意
- 2: 高リスク - HttpUriPlugin.apply内部のgetInfo/resolveContent/fetchContentRawテストケース（C-098〜C-131）はネットワークI/O・ファイルI/O・キャッシュ・ロックファイルの複合的なモックが必要で、テスト実装の複雑度が高い
- 2: 高リスク - ロックファイル書き込みの同時実行制御（C-126）はタイミング依存のテストであり、フレーキーテストになりやすい

## 6) レビュアーチェックリスト（最小）
- [ ] DataUriPlugin: URIRegExの正規表現パターンがテストケースの入力値と整合しているか確認
- [ ] FileUriPlugin: Windows環境でのfile URI（`file:///C:/path`）のテストケースが不足していないか確認
- [ ] VirtualUrlPlugin: normalizeModule関数で想定外の型（number, boolean等）が渡された場合のテストケースが不要か確認
- [ ] HttpUriPlugin: スキーマバリデーション（C-086）の具体的なエラーケースを`HttpUriPlugin.json`と照合
- [ ] HttpUriPlugin: MAX_REDIRECTS=5の境界値（4回OK、5回でエラー）のテストケースが正しいか確認
- [ ] HttpUriPlugin: proxyFetchのCONNECTレスポンスが200以外の場合のテストケースが不足していないか確認
- [ ] HttpUriPlugin: isAllowedのuserinfo bypass攻撃（`http://allowed@malicious/path`）に対するテストケースが不足していないか確認
- [ ] 全体: 非同期処理のテストにおけるタイムアウト設定の考慮が必要か確認
