---
generated_at: 2026-02-19 10:30:00
metrics:
  claims_total: 130
  claims_with_evidence: 130
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：130 / 130、根拠なし：0
- 優先レビュー（高）
  1. **テストケース網羅性**: 全クラス・メソッドの主要機能をカバー
  2. **境界値テスト**: 空配列、null、空文字列のケースを網羅
  3. **異常系テスト**: エラー条件とバリデーションを検証

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

- E-01: `src/FSharp.Build/Fsc.fs` - F#コンパイラMSBuildタスク（817行）
- E-02: `src/FSharp.Build/Fsi.fs` - F#インタラクティブMSBuildタスク（425行）
- E-03: `src/FSharp.Build/FSharpCommandLineBuilder.fs` - コマンドライン構築ヘルパー（126行）
- E-04: `src/FSharp.Build/CreateFSharpManifestResourceName.fs` - リソース名生成タスク（60行）
- E-05: `src/FSharp.Build/SubstituteText.fs` - テキスト置換タスク（86行）
- E-06: `src/FSharp.Build/MapSourceRoots.fs` - ソースルートマッピングタスク（198行）
- E-07: `src/FSharp.Build/FSharpEmbedResXSource.fs` - ResXソース生成タスク（182行）
- E-08: `src/FSharp.Build/FSharpEmbedResourceText.fs` - テキストリソース生成タスク（672行）
- E-09: `src/FSharp.Build/WriteCodeFragment.fs` - コードフラグメント生成タスク（210行）
- E-10: `src/FSharp.Build/GenerateILLinkSubstitutions.fs` - ILLink置換ファイル生成タスク（94行）
- E-11: `src/FSharp.Build/InternalsVisibleTo.fs` - InternalsVisibleTo属性（7行）

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

### Fscクラス（UT-FSB-001〜036）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | GenerateResponseFileCommandsがOutputAssemblyを-oオプションとして出力 | E-01 Line 122 | ○ |
| C-02 | DebugSymbols=trueで-gオプションが追加される | E-01 Line 128-129 | ○ |
| C-03 | DebugType毎に正しいデバッグオプションが生成される | E-01 Line 132-145 | ○ |
| C-04 | DebugType=NONEでデバッグオプションが省略される | E-01 Line 138 | ○ |
| C-05 | DefineConstantsが--defineオプションとして生成される | E-01 Line 179-180 | ○ |
| C-06 | Optimize=trueで--optimize+が生成される | E-01 Line 198-199 | ○ |
| C-07 | Optimize=falseで--optimize-が生成される | E-01 Line 200-201 | ○ |
| C-08 | Tailcalls=falseで--tailcalls-が生成される | E-01 Line 207-208 | ○ |
| C-09 | NoFramework=trueで--noframeworkが生成される | E-01 Line 161-162 | ○ |
| C-10 | Referencesが-rオプションとして生成される | E-01 Line 273-274 | ○ |
| C-11 | TargetType毎に--targetオプションが生成される | E-01 Line 279-291 | ○ |
| C-12 | Platform毎に--platformオプションが生成される | E-01 Line 221-239 | ○ |
| C-13 | checksumAlgorithmが--checksumalgorithmオプションとして生成される | E-01 Line 242-252 | ○ |
| C-14 | TreatWarningsAsErrors=trueで--warnaserrorが生成される | E-01 Line 302-303 | ○ |
| C-15 | DisabledWarningsが--nowarnオプションとして生成される | E-01 Line 294 | ○ |
| C-16 | Sourcesがコマンドラインに追加される | E-01 Line 364 | ○ |
| C-17 | OtherFlagsが展開されてコマンドラインに追加される | E-01 Line 360 | ○ |
| C-18 | Deterministic=trueで--deterministic+が生成される | E-01 Line 354-355 | ○ |
| C-19 | OutputRefAssemblyで--refoutオプションが生成される | E-01 Line 368 | ○ |
| C-20 | Nullableプロパティが--checknullsオプションを制御 | E-01 Line 210-216 | ○ |
| C-21 | GenerateFullPathToToolがToolPathを使用してフルパスを生成 | E-01 Line 717-721 | ○ |
| C-22 | ToolPathが空の場合にInvalidOperationExceptionが発生 | E-01 Line 718-719 | ○ |
| C-23 | ExecuteToolがSkipCompilerExecutionを尊重 | E-01 Line 739-740 | ○ |
| C-24 | ProvideCommandLineArgsがCommandLineArgsを設定 | E-01 Line 733-737 | ○ |
| C-25 | HostObjectが存在する場合にCompileメソッドが呼び出される | E-01 Line 746-790 | ○ |
| C-26 | splitAndWsTrimがセミコロン・カンマ・改行で分割 | E-01 Line 104-113 | ○ |

### Fsiクラス（UT-FSB-037〜049）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-27 | GenerateResponseFileCommandsがCodePageを--codepageオプションとして出力 | E-02 Line 72 | ○ |
| C-28 | NoFramework=trueで--noframeworkが生成される | E-02 Line 76-77 | ○ |
| C-29 | DefineConstantsが--defineオプションとして生成される | E-02 Line 79-80 | ○ |
| C-30 | LoadSourcesが--loadオプションとして生成される | E-02 Line 140-141 | ○ |
| C-31 | UseSourcesが--useオプションとして生成される | E-02 Line 143-144 | ○ |
| C-32 | FsiExec=trueで--execが生成される | E-02 Line 150-151 | ○ |
| C-33 | WarningsAsErrorsに警告76が自動追加される | E-02 Line 109-114 | ○ |
| C-34 | LogEventsFromTextOutputがテキストをキャプチャ | E-02 Line 164-172 | ○ |
| C-35 | BufferLimitが古いエントリを削除 | E-02 Line 168-170 | ○ |

### FSharpCommandLineBuilderクラス（UT-FSB-050〜063）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-36 | AppendSwitchがコマンドラインと引数リストに追加 | E-03 Line 120-122 | ○ |
| C-37 | AppendSwitchIfNotNullが値がnullでない場合に追加 | E-03 Line 55-71 | ○ |
| C-38 | AppendSwitchIfNotNullが値がnullの場合に何も追加しない | E-03 Line 55-71 | ○ |
| C-39 | AppendSwitchesIfNotNullが複数値をセパレータで結合 | E-03 Line 46-53 | ○ |
| C-40 | AppendOptionalSwitchがSome true/falseで+/-を追加 | E-03 Line 73-77 | ○ |
| C-41 | AppendSwitchUnquotedIfNotNullがOtherFlagsをパース | E-03 Line 79-118 | ○ |
| C-42 | AppendFileNamesIfNotNullがソースリストに追加 | E-03 Line 35-44 | ○ |
| C-43 | CapturedArgumentsが逆順で返される | E-03 Line 27 | ○ |
| C-44 | CapturedFilenamesが逆順で返される | E-03 Line 30 | ○ |

### CreateFSharpManifestResourceNameクラス（UT-FSB-064〜069）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-45 | CreateManifestNameがresxファイルに.resources拡張子を保持 | E-04 Line 46-54 | ○ |
| C-46 | UseStandardResourceNames=trueでルート名前空間が使用される | E-04 Line 31-34 | ○ |
| C-47 | linkFileNameが指定された場合にそれが使用される | E-04 Line 36-39 | ○ |
| C-48 | IsSourceFileが.fsファイルをソースファイルとして認識 | E-04 Line 56-59 | ○ |

### SubstituteTextクラス（UT-FSB-070〜076）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 | Executeがパターンに基づいてテキストを置換 | E-05 Line 66-72 | ○ |
| C-50 | Pattern1とPattern2の両方が適用される | E-05 Line 66-72 | ○ |
| C-51 | パターンが空の場合はコピーのみ | E-05 Line 36 | ○ |
| C-52 | 出力ディレクトリが存在しない場合に作成 | E-05 Line 76-77 | ○ |
| C-53 | CopiedFilesに処理されたファイルが追加される | E-05 Line 83 | ○ |

### MapSourceRootsクラス（UT-FSB-077〜086）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | Deterministic=falseでItemSpecがMappedPathに設定 | E-06 Line 160-162 | ○ |
| C-55 | Deterministic=trueで/_/形式のパスが設定 | E-06 Line 126 | ○ |
| C-56 | 複数のトップレベルルートに連番が付けられる | E-06 Line 125-127 | ○ |
| C-57 | NestedRootがContainingRootに基づいてマップ | E-06 Line 147-158 | ○ |
| C-58 | パスが/または\\で終わらない場合にエラー | E-06 Line 97-98 | ○ |
| C-59 | トップレベルルートがない場合にエラー | E-06 Line 143-144 | ○ |
| C-60 | 重複するItemSpecがマージされる | E-06 Line 100-106 | ○ |
| C-61 | SourceControl付きルートが優先される | E-06 Line 137-141 | ○ |
| C-62 | Utilities.FixFilePathがバックスラッシュをスラッシュに変換 | E-06 Line 24-28 | ○ |

### FSharpEmbedResXSourceクラス（UT-FSB-087〜094）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-63 | ExecuteがResXファイルからF#ソースコードを生成 | E-07 Line 43-128 | ○ |
| C-64 | GenerateLegacyCode=trueでリテラル形式が生成 | E-07 Line 109-111 | ○ |
| C-65 | GenerateLiteral=trueで[<Literal>]属性が付与 | E-07 Line 110 | ○ |
| C-66 | GeneratedModuleNameでモジュール名がカスタマイズ | E-07 Line 164-168 | ○ |
| C-67 | TargetFrameworkに応じてGetObjectが含まれる | E-07 Line 66-78 | ○ |
| C-68 | ソースが最新の場合はスキップ | E-07 Line 50-56 | ○ |

### FSharpEmbedResourceTextクラス（UT-FSB-095〜110）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-69 | ExecuteがテキストファイルからF#ソースとResXを生成 | E-08 Line 395-613 | ○ |
| C-70 | %d形式の文字列がSystem.Int32引数として生成 | E-08 Line 180 | ○ |
| C-71 | %s形式の文字列がSystem.String引数として生成 | E-08 Line 184 | ○ |
| C-72 | %f形式の文字列がSystem.Double引数として生成 | E-08 Line 183 | ○ |
| C-73 | %x形式の文字列がSystem.UInt32引数として生成 | E-08 Line 181-182 | ○ |
| C-74 | エラー番号付きの行が(int * string)を返す関数として生成 | E-08 Line 549-562 | ○ |
| C-75 | #で始まる行がコメントとしてスキップ | E-08 Line 447 | ○ |
| C-76 | 識別子が重複している場合にエラー | E-08 Line 457-468 | ○ |
| C-77 | 文字列が重複している場合にエラー | E-08 Line 474-488 | ○ |
| C-78 | 不正な書式指定子がある場合にエラー | E-08 Line 186 | ○ |
| C-79 | ComputeHolesが%%をパーセント文字としてエスケープ | E-08 Line 185 | ○ |
| C-80 | ComputeHolesが中括弧をエスケープ | E-08 Line 191-192 | ○ |
| C-81 | ParseLineがカンマ区切りの行を正しくパース | E-08 Line 205-258 | ○ |

### WriteCodeFragmentクラス（UT-FSB-111〜123）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-82 | ExecuteがF#のアセンブリ属性を正しく生成 | E-09 Line 145 | ○ |
| C-83 | ExecuteがC#のアセンブリ属性を正しく生成 | E-09 Line 146 | ○ |
| C-84 | ExecuteがVBのアセンブリ属性を正しく生成 | E-09 Line 147 | ○ |
| C-85 | サポートされない言語の場合にエラー | E-09 Line 148 | ○ |
| C-86 | OutputFileが未設定の場合にエラー | E-09 Line 171 | ○ |
| C-87 | GenerateAttributeが位置引数を正しい順序で出力 | E-09 Line 77-96 | ○ |
| C-88 | GenerateAttributeが名前付き引数をアルファベット順で出力 | E-09 Line 134 | ○ |
| C-89 | _IsLiteralサフィックスでリテラル値が生成 | E-09 Line 101-132 | ○ |
| C-90 | escapeStringが改行文字をエスケープ | E-09 Line 35-37 | ○ |
| C-91 | escapeStringがタブ文字をエスケープ | E-09 Line 39 | ○ |
| C-92 | escapeStringがバックスラッシュをエスケープ | E-09 Line 41 | ○ |
| C-93 | escapeStringがダブルクォートをエスケープ | E-09 Line 42 | ○ |

### GenerateILLinkSubstitutionsクラス（UT-FSB-124〜130）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-94 | ExecuteがILLink.Substitutions.xmlを生成 | E-10 Line 35-93 | ○ |
| C-95 | F#シグネチャリソースの削除エントリが含まれる | E-10 Line 43-46 | ○ |
| C-96 | F#最適化リソースの削除エントリが含まれる | E-10 Line 49-54 | ○ |
| C-97 | 圧縮形式のリソースエントリも含まれる | E-10 Line 44, 52 | ○ |
| C-98 | GeneratedItemsにLogicalNameメタデータが設定 | E-10 Line 87 | ○ |
| C-99 | 出力ディレクトリが存在しない場合に作成 | E-10 Line 82 | ○ |
| C-100 | 例外発生時にfalseが返されエラーがログ | E-10 Line 91-93 | ○ |

## 4) 不足情報（Unknown / Missing）
- なし。全てのテストケースはソースコードに基づいて生成されています。

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全てのテストケースがソースコードの実装に基づいており、根拠が明確です。

### 注意点
1. **プラットフォーム依存**: `MapSourceRoots.Utilities.FixFilePath`はWindowsとUnixでの動作が異なる可能性があります。
2. **外部依存**: MSBuild ToolTaskの基底クラスの動作に依存するテストケースがあります。
3. **ファイルI/O**: 複数のタスクがファイルシステムに依存しているため、モックが必要になる可能性があります。

## 6) レビュアーチェックリスト（最小）
- [ ] Fscクラスの主要コンパイラオプション（-o、-g、--define、--target等）のテストケースが網羅されているか
- [ ] Fsiクラスのインタラクティブ固有オプション（--load、--use、--exec等）のテストケースが存在するか
- [ ] FSharpCommandLineBuilderの引数パース（特にOtherFlagsのクォート処理）が正しくテストされているか
- [ ] MapSourceRootsのDeterministicモードでのパスマッピングロジックがカバーされているか
- [ ] FSharpEmbedResourceTextの書式文字列パース（%d、%s、%f、%x）が全てテストされているか
- [ ] WriteCodeFragmentの3言語（F#、C#、VB）サポートがテストされているか
- [ ] 各タスクのエラーハンドリング（必須パラメータ欠落、不正入力等）がテストされているか
- [ ] 境界値テスト（空配列、null、空文字列）が適切に含まれているか
