---
generated_at: 2026-02-19 10:30:00
metrics:
  claims_total: 145
  claims_with_evidence: 142
  claims_without_evidence: 3
confidence_derived: 0.98
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：142 / 145、根拠なし：3
- 優先レビュー（高）
  1. **UT-PSF-074 (FSharpProjectPackage.Initialize)**: VSシェル環境依存の動作確認が必要
  2. **UT-PSF-102 (FSharpProjectNode.ComputeSourcesAndFlags)**: MSBuild実行パスの網羅性確認
  3. **UT-PSF-130 (SolutionEventsListener.OnActiveProjectCfgChange)**: イベントハンドラの実行コンテキスト確認

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

- E-01: `vsintegration/src/FSharp.ProjectSystem.FSharp/MSBuildUtilities.fs` - MSBuildユーティリティクラスのソースコード
- E-02: `vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs` - プロジェクトノード実装のソースコード（2797行）
- E-03: `vsintegration/src/FSharp.ProjectSystem.FSharp/WaitDialog.fs` - 待機ダイアログモジュールのソースコード
- E-04: `vsintegration/src/FSharp.ProjectSystem.FSharp/AppConfigHelper.fs` - app.config管理クラスのソースコード
- E-05: `vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectPrelude.fs` - ヘルパー関数とSDKユーティリティのソースコード
- E-06: `docs/code-to-docs/単体テストケース一覧/plan.md` - テスト対象モジュール計画

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

### MSBuildUtilities.fs (UT-PSF-001 〜 UT-PSF-028)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | NormalizePath: パス区切り文字が正規化される | E-01 (30-31行目) | ○ |
| C-02 | NormalizePath: 空文字列の処理 | E-01 (30-31行目) | ○ |
| C-03 | GetInclude: Link属性なしでEvaluatedIncludeを返す | E-01 (36-41行目) | ○ |
| C-04 | GetInclude: Link属性ありでLinkパスを返す | E-01 (36-41行目) | ○ |
| C-05 | GetUnescapedUnevaluatedInclude: エスケープ解除処理 | E-01 (43-53行目) | ○ |
| C-06 | MattersForOrdering: ProjectReferenceは順序対象外 | E-01 (55-56行目) | ○ |
| C-07 | MattersForOrdering: Referenceは順序対象外 | E-01 (55-56行目) | ○ |
| C-08 | MattersForOrdering: Compileは順序対象 | E-01 (55-56行目) | ○ |
| C-09 | ComputeFolder: パスからフォルダ部分を計算 | E-01 (59-60行目) | ○ |
| C-10 | Same: オブジェクト参照比較 | E-01 (64-65行目) | ○ |
| C-11 | EnsureProperFolderLogic: 空フォルダの処理 | E-01 (70-139行目) | ○ |
| C-12 | EnsureProperFolderLogic: 非空フォルダの削除 | E-01 (133-137行目) | ○ |
| C-13 | EnsureProperFolderLogic: 複数レンダリングで例外 | E-01 (127-128行目) | ○ |
| C-14 | ThrowIfNotValidAndRearrangeIfNecessary: プロジェクト検証 | E-01 (199-200行目) | ○ |
| C-15 | MoveFileAboveHelper: ファイルを指定位置の上に移動 | E-01 (202-205行目) | ○ |
| C-16 | MoveFileBelowHelper: ファイルを指定位置の下に移動 | E-01 (207-210行目) | ○ |
| C-17 | SyncWithHierarchy: ファイルノードの同期 | E-01 (215-238行目) | ○ |
| C-18 | FindLast/FindFirst: 階層ノード検索 | E-01 (241-276行目) | ○ |
| C-19 | MoveFileUp/MoveFileDown: ファイル移動 | E-01 (278-290行目) | ○ |
| C-20 | MoveFolderUp/MoveFolderDown: フォルダ移動 | E-01 (293-344行目) | ○ |
| C-21 | AllVisibleItemFilenames: デバッグ用ファイル一覧 | E-01 (347-355行目) | ○ |

### WaitDialog.fs (UT-PSF-029 〜 UT-PSF-031)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 | WaitDialog.start: 待機ダイアログの開始 | E-03 (23-38行目) | ○ |
| C-23 | WaitDialog.start: Disposeでダイアログ終了 | E-03 (40-43行目) | ○ |
| C-24 | WaitDialog.start: サービス取得失敗時の例外 | E-03 (24-26行目) | ○ |

### AppConfigHelper.fs (UT-PSF-032 〜 UT-PSF-048)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-25 | LangConfigFileHolder.Init: app.configの初期化 | E-04 (114-147行目) | ○ |
| C-26 | LangConfigFileHolder.Init: forceCreate=trueでファイル作成 | E-04 (127-128行目) | ○ |
| C-27 | LangConfigFileHolder.Init: ファイル不存在時のエラー | E-04 (133-134行目) | ○ |
| C-28 | LangConfigFileHolder.GetText: テキスト取得 | E-04 (105-112行目) | ○ |
| C-29 | LangConfigFileHolder.SaveChanges: 変更保存 | E-04 (159-175行目) | ○ |
| C-30 | LangConfigFileHolder.GetXml: XDocument取得 | E-04 (177-179行目) | ○ |
| C-31 | LangConfigFileHolder.Dispose: リソース解放 | E-04 (181-186行目) | ○ |
| C-32 | LangConfigFile.EnsureChildElement: 子要素の確保 | E-04 (199-213行目) | ○ |
| C-33 | LangConfigFile.PatchUpXml: supportedRuntime要素の追加/更新 | E-04 (228-302行目) | ○ |
| C-34 | LangConfigFile.EnsureSupportedRuntimeElement: ランタイム要素の確保 | E-04 (304-313行目) | ○ |
| C-35 | LangConfigFile.EnsureHasBindingRedirects: バインディングリダイレクト追加 | E-04 (316-441行目) | ○ |
| C-36 | LangConfigFile.IsDirty/Save: 状態管理と保存 | E-04 (443-449行目) | ○ |

### ProjectPrelude.fs (UT-PSF-049 〜 UT-PSF-059)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-37 | FSharpSDKHelper.ListAllReferenceFolders: 参照フォルダ一覧 | E-05 (83-90行目) | ○ |
| C-38 | Helpers.GetOutputExtension: 出力拡張子の決定 | E-05 (93-94行目) | ○ |
| C-39 | Helpers.ParseEnum: Enum解析 | E-05 (96-97行目) | ○ |
| C-40 | Helpers.TryGetService/GetService: サービス取得 | E-05 (100-116行目) | ○ |

### Project.fs - コア機能 (UT-PSF-060 〜 UT-PSF-145)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-41 | DynamicProjectSite: 実装の動的切り替え | E-02 (82-106行目) | ○ |
| C-42 | ProjectSiteOptionLifetime: 状態管理 | E-02 (108-148行目) | ○ |
| C-43 | Notifier: コールバック通知機能 | E-02 (153-159行目) | ○ |
| C-44 | FSharpProjectPackage.Initialize: パッケージ初期化 | E-02 (198-277行目) | △ |
| C-45 | FSharpProjectFactory.CreateProject: プロジェクト作成 | E-02 (328-333行目) | ○ |
| C-46 | FSharpProjectNode.TargetFSharpCoreVersion: バージョン管理 | E-02 (424-489行目) | ○ |
| C-47 | FSharpProjectNode.IsCompilingFSharpFile: ファイル種別判定 | E-02 (810-816行目) | ○ |
| C-48 | FSharpProjectNode.IsFSharpCodeFileIconwise: アイコン判定 | E-02 (818-834行目) | ○ |
| C-49 | FSharpProjectNode.DefaultBuildAction: ビルドアクション決定 | E-02 (837-875行目) | ○ |
| C-50 | FSharpProjectNode.OutputFileName: 出力ファイル名生成 | E-02 (591-597行目) | ○ |
| C-51 | FSharpProjectNode.CompareNodes: ノード比較 | E-02 (743-757行目) | ○ |
| C-52 | FSharpProjectNode.DetermineRuntimeAndSKU: ランタイム判定 | E-02 (1314-1323行目) | ○ |
| C-53 | FSharpProjectNode.DoFixupAppConfigOnTargetFXChange: 設定更新 | E-02 (1325-1356行目) | ○ |
| C-54 | FSharpProjectNode.CoreCompile: コンパイル準備 | E-02 (1243-1256行目) | ○ |
| C-55 | FSharpProjectNode.Compile: コンパイル実行 | E-02 (1258-1263行目) | ○ |
| C-56 | FSharpProjectNode.ComputeSourcesAndFlags: ソース/フラグ計算 | E-02 (1269-1312行目) | △ |
| C-57 | FSharpProjectNodeProperties: プロパティ管理 | E-02 (1801-1954行目) | ○ |
| C-58 | FSharpFileNode.CanMoveUp/CanMoveDown: 移動可否判定 | E-02 (2609-2632行目) | ○ |
| C-59 | FSharpFileNode.MoveUp/MoveDown: ノード移動 | E-02 (2634-2735行目) | ○ |
| C-60 | FSharpFileNode.MoveTo: 指定位置への移動 | E-02 (2339-2409行目) | ○ |
| C-61 | FSharpFileNode.MoveToBottomOfGroup: グループ末尾への移動 | E-02 (2413-2434行目) | ○ |
| C-62 | FSharpFileNode.ImageIndex: 画像インデックス取得 | E-02 (2266-2279行目) | ○ |
| C-63 | FSharpFileNode.IsFormSubType: フォームサブタイプ判定 | E-02 (2234-2236行目) | ○ |
| C-64 | SolutionEventsListener: イベント処理 | E-02 (1570-1798行目) | △ |
| C-65 | VSHiveUtilities: レジストリ操作 | E-02 (45-79行目) | ○ |
| C-66 | FSharpFolderNode: フォルダノード操作 | E-02 (1956-2081行目) | ○ |
| C-67 | FSharpFileNodeProperties: ファイルプロパティ | E-02 (2120-2144行目) | ○ |
| C-68 | FSharpReferenceContainerNode: 参照コンテナ | E-02 (2777-2789行目) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-44 (FSharpProjectPackage.Initialize)**: VSシェル環境での実際の初期化フロー確認が必要
  - 候補：VS統合テスト / 手動検証 / VSデバッグログ
- **C-56 (ComputeSourcesAndFlags)**: MSBuild呼び出しの全パターン網羅確認
  - 候補：MSBuildログ解析 / 統合テスト
- **C-64 (SolutionEventsListener)**: イベント発火順序とタイミングの詳細確認
  - 候補：VS統合テスト / イベントトレース

## 5) リスクフラグ（レビュー観点）
- **リスク1 (中)**: MSBuildUtilitiesのファイル順序管理は複雑な状態遷移を持ち、エッジケースでの動作確認が重要
- **リスク1 (中)**: app.configの操作はXML構造に依存しており、不正なXML入力に対するロバスト性確認が必要
- **リスク1 (中)**: VS統合機能（プロジェクトシステム）はVSシェルのサービスに依存しており、モック化が困難
- **リスク0 (低)**: ヘルパー関数群は比較的単純で、ユニットテストが容易

## 6) レビュアーチェックリスト（最小）
- [ ] MSBuildUtilitiesのファイル順序変更テストケースで、複数ファイル・フォルダの組み合わせをカバーしているか
- [ ] app.config更新テストケースで、既存設定の保持・上書きシナリオを網羅しているか
- [ ] プロジェクトノードの状態遷移テスト（Opening→Opened→Closed）が適切か
- [ ] ビルドアクション判定テストで、全サポート拡張子をカバーしているか
- [ ] ファイル/フォルダ移動テストで、境界条件（先頭・末尾・単一要素）を網羅しているか
- [ ] VS統合関連のテストケースで、必要なモック/スタブが明確に定義されているか
