---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 105
  claims_with_evidence: 102
  claims_without_evidence: 3
confidence_derived: 0.97
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：102 / 105、根拠なし：3
- 優先レビュー（高）
  1. **C-039（UT-VIT-039）**：idToPathのクエリのみ入力 - 実運用で `?query` のみが渡されるケースの根拠なし
  2. **C-044（UT-VIT-044）**：DefaultMapの空文字キー - Viteプラグインコンテキストで空文字キーが使用されるかの実用根拠なし
  3. **C-081（UT-VIT-081）**：複数configureServer呼び出し - Viteが同一プラグインに対して複数回呼ぶユースケースの根拠不足

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

- E-01: `packages/@tailwindcss-vite/src/index.ts` L36-295 - tailwindcss関数（デフォルトエクスポート、Viteプラグインファクトリ）
- E-02: `packages/@tailwindcss-vite/src/index.ts` L29-34 - PluginOptions型定義
- E-03: `packages/@tailwindcss-vite/src/index.ts` L24-28 - 正規表現定数定義（SPECIAL_QUERY_RE, COMMON_JS_PROXY_RE, INLINE_STYLE_ID_RE）
- E-04: `packages/@tailwindcss-vite/src/index.ts` L297-300 - getExtension関数
- E-05: `packages/@tailwindcss-vite/src/index.ts` L302-313 - isPotentialCssRootFile関数
- E-06: `packages/@tailwindcss-vite/src/index.ts` L315-317 - idToPath関数
- E-07: `packages/@tailwindcss-vite/src/index.ts` L323-338 - DefaultMapクラス
- E-08: `packages/@tailwindcss-vite/src/index.ts` L340-551 - Rootクラス全体
- E-09: `packages/@tailwindcss-vite/src/index.ts` L373-527 - Root.generateメソッド
- E-10: `packages/@tailwindcss-vite/src/index.ts` L529-535 - Root.addBuildDependencyメソッド
- E-11: `packages/@tailwindcss-vite/src/index.ts` L537-550 - Root.requiresBuildメソッド
- E-12: `packages/@tailwindcss-vite/src/index.ts` L553-602 - isScannedFile関数
- E-13: `packages/@tailwindcss-vite/src/index.ts` L133-151 - configResolvedコールバック
- E-14: `packages/@tailwindcss-vite/src/index.ts` L190-246 - hotUpdateコールバック
- E-15: `packages/@tailwindcss-vite/src/index.ts` L45-121 - createRoot内部関数
- E-16: `packages/@tailwindcss-vite/src/index.ts` L81-94 - createBackCompatIdResolver内部関数
- E-17: `packages/@tailwindcss-vite/src/index.ts` L159-187 - transform handler (serve)
- E-18: `packages/@tailwindcss-vite/src/index.ts` L254-292 - transform handler (build)
- E-19: `packages/@tailwindcss-vite/src/index.ts` L367-369 - scannedFiles getter
- E-20: `packages/@tailwindcss-vite/src/index.ts` L129-131 - configureServerコールバック
- E-21: ソースコード内コメント - Issue #16877参照、Vite v7.0.6挙動注記、TODO注記

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | デフォルトオプションでPlugin配列が返却される | E-01 (L36, L123-294) | ○ |
| C-002 | optimize: trueでPlugin配列が返却される | E-01, E-02 | ○ |
| C-003 | optimize: falseでPlugin配列が返却される | E-01, E-02 | ○ |
| C-004 | optimize: { minify: false }でPlugin配列が返却される | E-01, E-02 | ○ |
| C-005 | Plugin配列の各要素が正しいname属性を持つ | E-01 (L127, L157, L250) | ○ |
| C-006 | scanプラグインのenforceがpre | E-01 (L128) | ○ |
| C-007 | serve用generateプラグインのapplyがserve | E-01 (L157) | ○ |
| C-008 | build用generateプラグインのapplyがbuild | E-01 (L253) | ○ |
| C-009 | configResolvedでVite設定が保持される | E-13 (L133-134) | ○ |
| C-010 | SSR設定がfalseの場合isSSRがfalse | E-13 (L135) | ○ |
| C-011 | SSR設定がundefinedの場合isSSRがfalse | E-13 (L135) | ○ |
| C-012 | SSR設定がtrueの場合isSSRがtrue | E-13 (L135) | ○ |
| C-013 | opts.optimizeがundefinedの場合shouldOptimizeがtrue | E-13 (L139-141) | ○ |
| C-014 | opts.optimizeがfalseの場合shouldOptimizeがfalse | E-13 (L140) | ○ |
| C-015 | opts.optimizeがtrueの場合shouldOptimizeがtrue | E-13 (L139-141) | ○ |
| C-016 | minifyがshouldOptimizeかつcssMinify有効時にtrue | E-13 (L145) | ○ |
| C-017 | cssMinifyがfalseの場合minifyがfalse | E-13 (L145) | ○ |
| C-018 | opts.optimize={ minify: false }でminifyがfalse | E-13 (L148-150) | ○ |
| C-019 | opts.optimize={ minify: true }でminifyがtrue | E-13 (L148-150) | ○ |
| C-020 | CSSファイルの拡張子が取得できる | E-04 (L297-300) | ○ |
| C-021 | クエリパラメータ付きIDから拡張子が取得できる | E-04 (L298) | ○ |
| C-022 | 複数のクエリパラメータでも拡張子が取得できる | E-04 (L298) | ○ |
| C-023 | 拡張子がない場合に空文字が返却される | E-04 (L299: path.extname) | ○ |
| C-024 | ドット付きディレクトリパスで拡張子が正しく取得できる | E-04 (L299: path.extname) | ○ |
| C-025 | CSSファイルがtrueを返す | E-05 (L310) | ○ |
| C-026 | クエリ付きCSSファイルがtrueを返す | E-05 (L310) | ○ |
| C-027 | &lang.css付きファイルがtrueを返す | E-05 (L310) | ○ |
| C-028 | インラインスタイルIDがtrueを返す | E-05 (L310), E-03 (L27) | ○ |
| C-029 | 非CSSファイルがfalseを返す | E-05 (L310) | ○ |
| C-030 | TypeScriptファイルがfalseを返す | E-05 (L310) | ○ |
| C-031 | .viteディレクトリ内のCSSがfalseを返す | E-05 (L303) | ○ |
| C-032 | workerクエリ付きがfalseを返す | E-05 (L306), E-03 (L25) | ○ |
| C-033 | sharedworkerクエリ付きがfalseを返す | E-05 (L306), E-03 (L25) | ○ |
| C-034 | rawクエリ付きがfalseを返す | E-05 (L306), E-03 (L25) | ○ |
| C-035 | urlクエリ付きがfalseを返す | E-05 (L306), E-03 (L25) | ○ |
| C-036 | commonjs-proxyクエリ付きがfalseを返す | E-05 (L307), E-03 (L26) | ○ |
| C-037 | クエリなしIDがそのままパスに変換 | E-06 (L316) | ○ |
| C-038 | クエリ付きIDからクエリが除去される | E-06 (L316) | ○ |
| C-039 | クエリパラメータのみの場合の処理 | E-06 (L316) | △ |
| C-040 | DefaultMapのコンストラクタ基本動作 | E-07 (L324-326) | ○ |
| C-041 | 既存キーに対して格納済みの値が返却される | E-07 (L329) | ○ |
| C-042 | 存在しないキーでファクトリ値が返却される | E-07 (L331-333) | ○ |
| C-043 | ファクトリ値がMapに保存される | E-07 (L332-333) | ○ |
| C-044 | 空文字キーでファクトリ呼び出し | E-07 | △ |
| C-045 | Map標準メソッドが正常動作 | E-07 (extends Map) | ○ |
| C-046 | Rootインスタンスが正しく生成される | E-08 (L358-365) | ○ |
| C-047 | scanner未初期化時に空配列が返却される | E-19 (L368) | ○ |
| C-048 | scanner初期化後にファイル一覧が返却される | E-19 (L368) | ○ |
| C-049 | 有効なTailwind CSSからCSS生成 | E-09 (L516-527) | ○ |
| C-050 | ソースマップ有効時にmap含まれる | E-09 (L520) | ○ |
| C-051 | ソースマップ無効時にmapがundefined | E-09 (L520) | ○ |
| C-052 | Tailwind機能なしCSSでfalse返却 | E-09 (L454-461) | ○ |
| C-053 | 2回目以降でcompiler再利用 | E-09 (L406) | ○ |
| C-054 | 依存変更時にcompiler再初期化 | E-09 (L406), E-11 | ○ |
| C-055 | addWatchFileが依存ファイルで呼ばれる | E-09 (L418-419) | ○ |
| C-056 | 入力ファイル自身はaddWatchFileに渡されない | E-09 (L386-391) | ○ |
| C-057 | #含むSVGはaddWatchFile除外 | E-09 (L396-399), E-21 | ○ |
| C-058 | ?含むSVGはaddWatchFile除外 | E-09 (L396-399), E-21 | ○ |
| C-059 | compiler.root='none'でsources空 | E-09 (L432-434) | ○ |
| C-060 | compiler.root=nullでデフォルトパターン | E-09 (L437-439) | ○ |
| C-061 | compiler.root指定でその値使用 | E-09 (L441-443) | ○ |
| C-062 | sourceパスが非ディレクトリでエラー | E-09 (L505-509) | ○ |
| C-063 | candidatesがセットに蓄積 | E-09 (L467-471) | ○ |
| C-064 | negatedパターンglob除外 | E-09 (L483) | ○ |
| C-065 | 存在ファイルのmtime記録 | E-10 (L530-534) | ○ |
| C-066 | 存在しないファイルでmtime=null | E-10 (L530-534) | ○ |
| C-067 | buildDependencies空でfalse | E-11 (L538, L549) | ○ |
| C-068 | 全依存未変更でfalse | E-11 (L538-549) | ○ |
| C-069 | mtime更新でtrue | E-11 (L542-544) | ○ |
| C-070 | mtime=nullでtrue | E-11 (L539) | ○ |
| C-071 | ファイル削除でtrue | E-11 (L545-547) | ○ |
| C-072 | スキャンファイルに含まれる場合true | E-12 (L586-589) | ○ |
| C-073 | realpathでスキャンファイル判定 | E-12 (L561-571, L588) | ○ |
| C-074 | スキャンファイル外でfalse | E-12 (L601) | ○ |
| C-075 | importerチェーンでroot発見 | E-12 (L596-598) | ○ |
| C-076 | modules空でfalse | E-12 (L573) | ○ |
| C-077 | 循環参照で無限ループしない | E-12 (L558, L575-576) | ○ |
| C-078 | id=undefinedモジュールスキップ | E-12 (L578) | ○ |
| C-079 | realpathSync例外でnull | E-12 (L566-568) | ○ |
| C-080 | configureServerでサーバー追加 | E-20 (L130) | ○ |
| C-081 | 複数回configureServerで全保持 | E-20 (L130) | △ |
| C-082 | env=nullで旧API Root生成 | E-15 (L51-66) | ○ |
| C-083 | env指定で新API Root生成 | E-15 (L67-109) | ○ |
| C-084 | devSourcemap=trueでenableSourceMaps=true | E-15 (L117) | ○ |
| C-085 | client環境でcompatResolve使用 | E-16 (L88-89) | ○ |
| C-086 | ssr環境でcompatResolve ssr=true | E-16 (L88-89) | ○ |
| C-087 | client/ssr以外でcreateIdResolver使用 | E-16 (L91-92) | ○ |
| C-088 | 外部ファイル変更でfull-reload送信 | E-14 (L235-241) | ○ |
| C-089 | モジュールグラフ内変更でスキップ | E-14 (L211-212) | ○ |
| C-090 | スキャン対象外でリロードなし | E-14 (L220-222) | ○ |
| C-091 | roots空でスキップ | E-14 (L217) | ○ |
| C-092 | モジュールinvalidate | E-14 (L226-233) | ○ |
| C-093 | 異なる環境でserver.hot.send使用 | E-14 (L235-238) | ○ |
| C-094 | server.hot.send未定義でws.send使用 | E-14 (L238-240) | ○ |
| C-095 | hotUpdateが空配列返却 | E-14 (L243) | ○ |
| C-096 | serve時CSS変換 | E-17 (L166-187) | ○ |
| C-097 | serve時非CSSでundefined | E-17 (L167) | ○ |
| C-098 | serve時非Tailwind CSSでsrc返却 | E-17 (L180-183) | ○ |
| C-099 | build時CSS変換 | E-18 (L261-292) | ○ |
| C-100 | build時optimize適用 | E-18 (L281-288) | ○ |
| C-101 | build時optimize=falseでスキップ | E-18 (L281) | ○ |
| C-102 | minifyオプションの伝播 | E-18 (L284) | ○ |
| C-103 | build時非CSSでundefined | E-18 (L262) | ○ |
| C-104 | build時非Tailwind CSSでsrc返却 | E-18 (L275-278) | ○ |
| C-105 | 2回目以降のtransformでroot再利用 | E-17 (L173-177), E-18 (L267-271) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-039（idToPathクエリのみ入力）**: `idToPath('?query')` のようなクエリのみの入力が実際のViteパイプラインで発生するケースの実運用根拠がない。コードの動作は `path.resolve('')` を返すと推測できるが、テストの実用性が不明。
  - 候補：Viteソースコード内のID生成ロジック / Vite統合テスト / E2Eテスト
- **C-044（DefaultMap空文字キー）**: DefaultMapの `get('')` が実際にViteプラグインコンテキストで呼ばれるかの根拠がない。`rootsByEnv.get(this.environment?.name ?? 'default')` の呼び出しで `environment.name` が空文字になるケースは確認できていない。
  - 候補：Vite Environment API仕様 / 実行時ログ
- **C-081（複数configureServer）**: `servers.push(server)` は配列への追加であり複数回呼ばれることを想定しているが、Viteが同一プラグインインスタンスに対して複数回 `configureServer` を呼ぶ具体的なユースケースのドキュメント根拠が不足。
  - 候補：Vite公式ドキュメント / VitestでのMulti-server構成

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: `getExtension`, `isPotentialCssRootFile`, `idToPath`, `DefaultMap` - 純粋関数/クラスのためテスト容易。根拠も明確。
- **0（低リスク）**: `Root.addBuildDependency`, `Root.requiresBuild` - ファイルシステムのモック化で検証可能。ロジック明確。
- **1（中リスク）**: `Root.generate` - 複雑なロジックで多くの外部依存（compile, Scanner, optimize, toSourceMap）を含む。モック構成が重要。
- **1（中リスク）**: `isScannedFile` - ViteのEnvironmentModuleNodeの構造に依存するため、モックの正確性が重要。
- **1（中リスク）**: `hotUpdate` - Vite DevServer APIに深く依存。server.hot.send / server.ws.send の互換性テストが実行時環境に依存。
- **1（中リスク）**: `createRoot` / `createBackCompatIdResolver` - Viteバージョン間の互換性ロジック。Vite 7未満と7以降の両方のテストが理想的。
- **0（低リスク）**: `configResolved` - 条件分岐が明確でテスト容易。

## 6) レビュアーチェックリスト（最小）
- [ ] `isPotentialCssRootFile`のテストケースが、定義された正規表現（SPECIAL_QUERY_RE, COMMON_JS_PROXY_RE, INLINE_STYLE_ID_RE）の全パターンをカバーしているか
- [ ] `configResolved`内のisSSR判定ロジック（`!== false && !== undefined`）のテストケースが論理的に網羅されているか
- [ ] `configResolved`のoptimize/minify設定の全組み合わせがテストケースに含まれているか
- [ ] `Root.generate`のモック前提条件が実現可能か（compile, Scanner, Instrumentation等の外部依存）
- [ ] `Root.generate`のcompiler.rootの3パターン（'none'/null/オブジェクト）を全てカバーしているか
- [ ] `Root.generate`のaddWatchFile除外条件（自己参照、#/? SVG）が正しくテストされているか
- [ ] `Root.requiresBuild`のテストケースがmtime比較の全パターン（null/同一/更新/ファイル消失）をカバーしているか
- [ ] `isScannedFile`のテストケースが循環参照の安全性（seenセットによる重複排除）を検証しているか
- [ ] `hotUpdate`のViteバージョン互換性テスト（server.hot.send vs server.ws.send）が両方カバーされているか
- [ ] `createBackCompatIdResolver`のclient/ssr/custom環境の3パターンがカバーされているか
