---
generated_at: 2026-03-01 12:00:00
metrics:
  claims_total: 120
  claims_with_evidence: 112
  claims_without_evidence: 8
confidence_derived: 0.93
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.93**
  - 根拠あり：112 / 120、根拠なし：8
- 優先レビュー（高）
  1. **UT-CLI-090〜102 (handle関数)**: 外部依存（compile, Scanner, optimize）が多くモック設計の妥当性が要確認
  2. **UT-CLI-103〜109 (createWatchers)**: @parcel/watcherへの依存があり内部挙動の検証が困難
  3. **UT-CLI-068 (resolveCssId/異常系)**: EnhancedResolveの内部エラーハンドリングの仕様が不明確

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

- E-01: `packages/@tailwindcss-cli/src/utils/args.ts` - CLI引数パース関数群（args, convert, convertBoolean, convertNumber, convertString）
- E-02: `packages/@tailwindcss-cli/src/utils/format-ns.ts` - ナノ秒フォーマット関数（formatNanoseconds）
- E-03: `packages/@tailwindcss-cli/src/utils/renderer.ts` - レンダリングユーティリティ（header, highlight, relative, wordWrap, formatDuration, indent, eprintln, println, getVersion）
- E-04: `packages/@tailwindcss-cli/src/utils/resolve.ts` - モジュール解決関数（resolve, resolveCssId）
- E-05: `packages/@tailwindcss-cli/src/utils/disposables.ts` - Disposablesクラス（queueMacrotask, add, dispose）
- E-06: `packages/@tailwindcss-cli/src/commands/build/utils.ts` - ビルドユーティリティ（drainStdin, outputFile）
- E-07: `packages/@tailwindcss-cli/src/commands/build/index.ts` - ビルドコマンド（options, handleError, handle, createWatchers, watchDirectories）
- E-08: `packages/@tailwindcss-cli/src/commands/help/index.ts` - ヘルプコマンド（help）
- E-09: `packages/@tailwindcss-cli/src/index.ts` - CLIエントリーポイント

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | args関数がフラグなし引数を_プロパティに格納する (UT-CLI-001) | E-01 (L70-95: parsed._をresult._に代入) | ○ |
| C-02 | args関数が--flagで文字列型オプションをパースする (UT-CLI-002) | E-01 (L112-118: flag.slice(2)でキーを取得しconvertで変換) | ○ |
| C-03 | args関数がエイリアスでオプションをパースする (UT-CLI-003) | E-01 (L105-110: alias.slice(1)でキーを取得) | ○ |
| C-04 | args関数がboolean型オプションをtrueにセットする (UT-CLI-004) | E-01 (L99: type === 'boolean'の場合false、フラグ指定でtrue) | ○ |
| C-05 | args関数がboolean型のデフォルト値をfalseにする (UT-CLI-005) | E-01 (L99: default: type === 'boolean' ? false : null) | ○ |
| C-06 | args関数がstring型のデフォルト値をnullにする (UT-CLI-006) | E-01 (L99: default: type === 'boolean' ? false : null) | ○ |
| C-07 | args関数がdefault指定時にデフォルト値を使用する (UT-CLI-007) | E-01 (L97-102: defaultValueをresultに設定) | ○ |
| C-08 | args関数が'-'を引数値として正しく処理する (UT-CLI-008) | E-01 (L71-75: '-'を'__IO_DEFAULT_VALUE__'に変換しL86-88で復元) | ○ |
| C-09 | args関数がboolean|string複合型をパースする (UT-CLI-009〜010) | E-01 (L139-140: convertBoolean ?? convertStringの順で変換) | ○ |
| C-10 | args関数が重複フラグの最後の値を使用する (UT-CLI-011) | E-01 (L82-84: Array.isArray時にvalue[value.length - 1]を取得) | ○ |
| C-11 | args関数が空引数配列でデフォルト値を設定する (UT-CLI-012) | E-01 (L97-102: forループでデフォルト値を代入) | ○ |
| C-12 | convert関数がstring型で文字列変換する (UT-CLI-013) | E-01 (L133: case 'string': return convertString(value)) | ○ |
| C-13 | convert関数がboolean型でtrue/falseを変換する (UT-CLI-014) | E-01 (L135: case 'boolean': return convertBoolean(value)) | ○ |
| C-14 | convert関数がnumber型で数値を変換する (UT-CLI-015) | E-01 (L137: case 'number': return convertNumber(value)) | ○ |
| C-15 | convert関数が未知の型でエラーをスローする (UT-CLI-016) | E-01 (L148: throw new Error) | ○ |
| C-16 | convertBoolean関数がtrue(boolean)でtrueを返す (UT-CLI-017) | E-01 (L153: if (value === true || value === false)) | ○ |
| C-17 | convertBoolean関数が'true'文字列でtrueを返す (UT-CLI-018) | E-01 (L157-158: if (value === 'true') return true) | ○ |
| C-18 | convertBoolean関数が'false'文字列でfalseを返す (UT-CLI-019) | E-01 (L161-162: if (value === 'false') return false) | ○ |
| C-19 | convertBoolean関数が非boolean文字列でundefinedを返す (UT-CLI-020) | E-01 (L152-164: 該当条件なしでundefined暗黙返却) | ○ |
| C-20 | convertNumber関数がnumber型を直接返す (UT-CLI-021) | E-01 (L167-168: typeof value === 'number') | ○ |
| C-21 | convertNumber関数が数値文字列を変換する (UT-CLI-022) | E-01 (L172-175: Number(value) + NaN判定) | ○ |
| C-22 | convertNumber関数が非数値文字列でundefinedを返す (UT-CLI-023) | E-01 (L172-175: NaN判定) | ○ |
| C-23 | convertNumber関数がゼロ値・負数を変換する (UT-CLI-024〜025) | E-01 (L172: Number(value)で0や-5も変換可能) | ○ |
| C-24 | convertString関数が文字列をそのまま返す (UT-CLI-026) | E-01 (L180: `${value}`) | ○ |
| C-25 | convertString関数がboolean値を文字列に変換する (UT-CLI-027) | E-01 (L180: `${value}`でテンプレートリテラル変換) | ○ |
| C-26 | formatNanoseconds関数がns/us/ms/s/m/h/d単位でフォーマットする (UT-CLI-028〜034) | E-02 (L1-23: 各閾値での条件分岐) | ○ |
| C-27 | formatNanoseconds関数が0nで'0ns'を返す (UT-CLI-035) | E-02 (L4: ns < 1_000nでtrue) | ○ |
| C-28 | formatNanoseconds関数が境界値(999n/1000n)を処理する (UT-CLI-036〜037) | E-02 (L4-5: 999n < 1_000nでtrue、1000n/1_000nで'1us') | ○ |
| C-29 | formatNanoseconds関数がnumber型入力をサポートする (UT-CLI-038) | E-02 (L2: BigInt(input)変換) | ○ |
| C-30 | header関数がバージョン付き文字列を返す (UT-CLI-039) | E-03 (L11-13) | ○ |
| C-31 | highlight関数がバッククォート装飾する (UT-CLI-040) | E-03 (L15-17) | ○ |
| C-32 | relative関数が絶対パスを相対パスに変換する (UT-CLI-041〜042) | E-03 (L23-38: path.relative + './'プレフィックス) | ○ |
| C-33 | relative関数が短い絶対パスを優先する (UT-CLI-043) | E-03 (L33-34: preferAbsoluteIfShorter && result.length > to.length) | ○ |
| C-34 | relative関数がpreferAbsoluteIfShorter=falseで常に相対パスを返す (UT-CLI-044) | E-03 (L26: デフォルト引数 preferAbsoluteIfShorter = true) | ○ |
| C-35 | relative関数が同一ディレクトリで'./file'形式を返す (UT-CLI-045) | E-03 (L29-31: './'プレフィックスの付与) | ○ |
| C-36 | wordWrap関数が単一行テキストをそのまま返す (UT-CLI-046) | E-03 (L43-67) | ○ |
| C-37 | wordWrap関数が複数行に折り返す (UT-CLI-047) | E-03 (L52: lineLength + wordLength + 1 > width) | ○ |
| C-38 | wordWrap関数が空文字列で空配列を返す (UT-CLI-048) | E-03 (L44: ''.split(' ')は['']、L62: lineLength=0のためpushされない) | ○ |
| C-39 | wordWrap関数が1単語で1要素配列を返す (UT-CLI-049) | E-03 (L43-67: ループ1回で終了) | ○ |
| C-40 | wordWrap関数が最小幅で各単語を個別行にする (UT-CLI-050) | E-03 (L52: width=1で各単語がwidth超過) | ○ |
| C-41 | formatDuration関数が閾値で色分けする (UT-CLI-051〜054) | E-03 (L72-80: pc.green/blue/yellow/red) | ○ |
| C-42 | indent関数がUI.indent + offsetでインデントする (UT-CLI-055〜056) | E-03 (L82-84) | ○ |
| C-43 | eprintln関数がstderrに書き込む (UT-CLI-057〜058) | E-03 (L88-89: process.stderr.write) | ○ |
| C-44 | println関数がstdoutに書き込む (UT-CLI-059〜060) | E-03 (L92-93: process.stdout.write) | ○ |
| C-45 | getVersion関数がglobalThis優先でバージョン取得する (UT-CLI-061〜062) | E-03 (L96-102) | ○ |
| C-46 | resolve関数がカスタムリゾルバ優先でフォールバックする (UT-CLI-063〜065) | E-04 (L6-14) | ○ |
| C-47 | resolveCssId関数がCSS IDを解決する (UT-CLI-066〜067) | E-04 (L23-32) | ○ |
| C-48 | resolveCssId関数が存在しないファイルでエラーとなる (UT-CLI-068) | E-04 (L31) | △ |
| C-49 | Disposables.queueMacrotask関数がsetTimeoutでキューイングする (UT-CLI-069) | E-05 (L14-19) | ○ |
| C-50 | Disposables.queueMacrotask関数のdispose関数でキャンセルする (UT-CLI-070) | E-05 (L17-19: clearTimeout) | ○ |
| C-51 | Disposables.add関数がdispose関数を登録する (UT-CLI-071) | E-05 (L25-33) | ○ |
| C-52 | Disposables.add関数の返却関数でdispose実行・削除する (UT-CLI-072) | E-05 (L28-32) | ○ |
| C-53 | Disposables.dispose関数が全クリーンアップする (UT-CLI-073) | E-05 (L38-44) | ○ |
| C-54 | Disposables.dispose関数が空で安全に動作する (UT-CLI-074) | E-05 (L39-43: forループが空Setで実行されない) | ○ |
| C-55 | Disposables.dispose関数が冪等である (UT-CLI-075) | E-05 (L43: this.#disposables.clear()後は空) | ○ |
| C-56 | drainStdin関数がstdinからデータを読み取る (UT-CLI-076) | E-06 (L4-13) | ○ |
| C-57 | drainStdin関数が空stdinで空文字列を返す (UT-CLI-077) | E-06 (L5: result = ''、L10: resolve(result)) | ○ |
| C-58 | drainStdin関数がstdinエラーでrejectする (UT-CLI-078) | E-06 (L11: reject(err)) | ○ |
| C-59 | outputFile関数がファイルを書き込む (UT-CLI-079) | E-06 (L31-34) | ○ |
| C-60 | outputFile関数がディレクトリを自動作成する (UT-CLI-080) | E-06 (L31: fs.mkdir with recursive: true) | ○ |
| C-61 | outputFile関数が同一内容でスキップする (UT-CLI-081) | E-06 (L25-26: currentContents === contents) | ○ |
| C-62 | outputFile関数が異なる内容で上書きする (UT-CLI-082) | E-06 (L25-34: 比較後にwriteFile) | ○ |
| C-63 | outputFile関数が特殊ファイルで比較スキップする (UT-CLI-083) | E-06 (L18-22: isCharacterDevice || isFIFO) | ○ |
| C-64 | options関数がビルドオプションを返す (UT-CLI-084) | E-07 (L30-70) | ○ |
| C-65 | options関数の--outputデフォルト値が'-' (UT-CLI-085) | E-07 (L41: default: '-') | ○ |
| C-66 | options関数の--cwdデフォルト値が'.' (UT-CLI-086) | E-07 (L61: default: '.') | ○ |
| C-67 | options関数の--mapデフォルト値がfalse (UT-CLI-087) | E-07 (L67: default: false) | ○ |
| C-68 | handleError関数が正常実行で戻り値を返す (UT-CLI-088) | E-07 (L73-74: return await fn()) | ○ |
| C-69 | handleError関数がErrorで終了する (UT-CLI-089) | E-07 (L75-80: catch + process.exit(1)) | ○ |
| C-70 | handle関数がデフォルトCSS入力を使用する (UT-CLI-090) | E-07 (L136-142: 三項演算子) | ○ |
| C-71 | handle関数がファイル入力を読み込む (UT-CLI-091) | E-07 (L139: fs.readFile) | ○ |
| C-72 | handle関数がstdinから入力を読み込む (UT-CLI-092) | E-07 (L138: drainStdin()) | ○ |
| C-73 | handle関数が存在しないファイルでエラー終了する (UT-CLI-093) | E-07 (L106-109: existsSync + process.exit(1)) | ○ |
| C-74 | handle関数が入出力同一パスでエラー終了する (UT-CLI-094) | E-07 (L114-119) | ○ |
| C-75 | handle関数が--map '-'でエラー終了する (UT-CLI-095) | E-07 (L123-126) | ○ |
| C-76 | handle関数がstdoutに出力する (UT-CLI-096) | E-07 (L206-208: println(output)) | ○ |
| C-77 | handle関数がファイルに出力する (UT-CLI-097) | E-07 (L204-205: outputFile) | ○ |
| C-78 | handle関数がminify指定でoptimizeを呼ぶ (UT-CLI-098) | E-07 (L158-176: optimize with minify: true) | ○ |
| C-79 | handle関数がoptimize指定でoptimizeを呼ぶ (UT-CLI-099) | E-07 (L158: args['--minify'] || args['--optimize']) | ○ |
| C-80 | handle関数がインラインソースマップを付加する (UT-CLI-100) | E-07 (L181-183: map.inline) | ○ |
| C-81 | handle関数が外部ソースマップを出力する (UT-CLI-101) | E-07 (L184-199: map.comment + outputFile) | ○ |
| C-82 | handle関数がcwdを解決する (UT-CLI-102) | E-07 (L90: path.resolve) | ○ |
| C-83 | createWatchers関数がウォッチャーを作成する (UT-CLI-103) | E-07 (L467-503: watcher.subscribe) | △ |
| C-84 | createWatchers関数が重複ディレクトリを排除する (UT-CLI-104) | E-07 (L422-438: sort + startsWith + filter) | ○ |
| C-85 | createWatchers関数がイベントをデバウンスする (UT-CLI-105) | E-07 (L455-464: debounceQueue.queueMacrotask) | ○ |
| C-86 | createWatchers関数がdeleteイベントを無視する (UT-CLI-106) | E-07 (L481: event.type === 'delete') | ○ |
| C-87 | createWatchers関数がディレクトリ変更を無視する (UT-CLI-107) | E-07 (L484-489: isFile + isSymbolicLink) | ○ |
| C-88 | createWatchers関数が空配列を処理する (UT-CLI-108) | E-07 (L467: for...of空配列) | △ |
| C-89 | createWatchers関数がクリーンアップする (UT-CLI-109) | E-07 (L506-509) | ○ |
| C-90 | watchDirectories関数がユニークなbaseリストを返す (UT-CLI-110) | E-07 (L512-514: new Set + flatMap) | ○ |
| C-91 | watchDirectories関数が重複排除する (UT-CLI-111) | E-07 (L512: new Set) | ○ |
| C-92 | help関数がヘッダーを表示する (UT-CLI-112) | E-08 (L18: println(header())) | ○ |
| C-93 | help関数がinvalid commandを表示する (UT-CLI-113) | E-08 (L21-24) | ○ |
| C-94 | help関数がusageセクションを表示する (UT-CLI-114) | E-08 (L27-93) | ○ |
| C-95 | help関数がoptionsセクションを表示する (UT-CLI-115) | E-08 (L97-172) | ○ |
| C-96 | help関数がエイリアスをフォーマットする (UT-CLI-116) | E-08 (L123-128) | ○ |
| C-97 | help関数がデフォルト値を表示する (UT-CLI-117) | E-08 (L155-157) | ○ |
| C-98 | help関数がvaluesリストを表示する (UT-CLI-118) | E-08 (L116-117: flag += `[=${values.join(', ')}]`) | ○ |
| C-99 | help関数がパラメータ未指定時にエラーなく動作する (UT-CLI-119) | E-08 (L21-97: 各if文) | △ |
| C-100 | help関数が長いusage文を折り返す (UT-CLI-120) | E-08 (L44: wordWrap) | ○ |

## 4) 不足情報（Unknown / Missing）
- **EnhancedResolve.ResolverFactoryのエラー挙動仕様** (C-48): resolveCssId関数が存在しないファイルに対してどのようなエラーを返すかの公式ドキュメントが未参照
  - 候補：enhanced-resolve公式ドキュメント / GitHubリポジトリREADME / ソースコード
- **@parcel/watcherの詳細API仕様** (C-83): createWatchers関数が依存するwatcher.subscribeのエラーハンドリング仕様が未確認
  - 候補：@parcel/watcher公式ドキュメント / npmパッケージREADME
- **createWatchersの空配列入力** (C-88): 空のディレクトリ配列が渡された場合のfor...ofループの挙動は自明だが、戻り値のクリーンアップ関数の挙動確認が要検証
  - 候補：実行時テストでの検証
- **help関数のundefined引数** (C-99): TypeScript型定義上はオプショナルだが、実行時のundefined処理パスの網羅が要確認
  - 候補：実行時テストでの検証
- **handle関数のウォッチモード**: incrementalリビルドとfullリビルドの切り替えロジックは統合的な挙動のため、単体テストケースとしてのCSVに明示的に含まれていない
  - 候補：統合テストとして別途定義 / E2Eテストへの委譲

## 5) リスクフラグ（レビュー観点）
- **リスク1 (中リスク)**: handle関数は外部依存（compile, Scanner, optimize, toSourceMap, watcher）が多く、テストにはモック化が必須。モックの忠実度によりテスト品質が左右される
- **リスク1 (中リスク)**: createWatchers関数は非同期イベント処理とデバウンスロジックを含み、タイミング依存のテストが不安定になる可能性がある
- **リスク0 (低リスク)**: args, convert系関数は純粋関数であり、テストの安定性・信頼性が高い
- **リスク0 (低リスク)**: formatNanoseconds, wordWrap, relative等のユーティリティ関数は入出力が明確で検証が容易
- **リスク0 (低リスク)**: Disposablesクラスは自己完結しており、外部依存がなくテストが安定
- **リスク1 (中リスク)**: getVersion関数はglobalThisとファイルシステムに依存し、テスト環境によって挙動が異なる可能性がある

## 6) レビュアーチェックリスト（最小）
- [ ] UT-CLI-001〜012: args関数の引数パースロジックがソースコードの全分岐を網羅しているか確認
- [ ] UT-CLI-028〜038: formatNanosecondsの境界値テスト（999n/1000n等）がBigInt除算の切り捨てを考慮しているか確認
- [ ] UT-CLI-041〜045: relative関数のpreferAbsoluteIfShorterオプションのテストが十分か確認
- [ ] UT-CLI-076〜078: drainStdin関数のstdinモック手法が適切か確認
- [ ] UT-CLI-079〜083: outputFile関数の特殊ファイル判定ロジックのテストが適切か確認
- [ ] UT-CLI-088〜102: handle関数のテストにおける外部モジュール（compile, Scanner等）のモック設計が適切か確認
- [ ] UT-CLI-103〜109: createWatchers関数のデバウンス・イベントフィルタリングのテスト手法が適切か確認
- [ ] UT-CLI-112〜120: help関数のテストでprocess.stdout.columnsのモック設定が適切か確認
- [ ] 全体として正常系/異常系/境界値の観点がバランスよく配分されているか確認
