---
generated_at: 2026-02-18 21:20:00
metrics:
  claims_total: 82
  claims_with_evidence: 82
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：public-Trace.csv

## 本レポートについて

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

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

1. **根拠の有無確認**：各テストケースに対して、ソースコードの該当箇所が存在するか
2. **根拠との整合性**：テストケースの内容がソースコードの実装と矛盾していないか
3. **網羅性**：各関数のパラメータ、処理分岐、エラー処理を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数 = 82 / 82 = 1.00

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：82 / 82、根拠なし：0
- 優先レビュー（高）
  1. **デフォルトトレース保護テスト（UT-TRC-022, UT-TRC-029, UT-TRC-055）**：ビジネスロジック上の重要な保護機構
  2. **接続エラー処理テスト（UT-TRC-007, UT-TRC-016, UT-TRC-063, UT-TRC-071）**：エラーハンドリングの網羅性
  3. **基本機能テスト（UT-TRC-001, UT-TRC-009, UT-TRC-019等）**：コア機能の動作確認

## 2) 参照した情報（Evidence一覧）
> ソースコードから抽出した根拠情報

- E-01: `public/Get-DbaTraceFlag.ps1` - グローバルトレースフラグ取得機能（114行）
- E-02: `public/Get-DbaTrace.ps1` - トレース情報取得機能（160行）
- E-03: `public/Start-DbaTrace.ps1` - トレース開始機能（141行）
- E-04: `public/Stop-DbaTrace.ps1` - トレース停止機能（164行）
- E-05: `public/Read-DbaTraceFile.ps1` - トレースファイル読み取り機能（386行）
- E-06: `public/Remove-DbaTrace.ps1` - トレース削除機能（128行）
- E-07: `public/Enable-DbaTraceFlag.ps1` - トレースフラグ有効化機能（131行）
- E-08: `public/Disable-DbaTraceFlag.ps1` - トレースフラグ無効化機能（123行）

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

### Get-DbaTraceFlag (UT-TRC-001 ~ UT-TRC-008, UT-TRC-074 ~ UT-TRC-075)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | 有効なトレースフラグが取得できること | E-01: 行90 `$tflags = $server.EnumActiveGlobalTraceFlags()` | ○ |
| C-02 | 複数インスタンスからトレースフラグが取得できること | E-01: 行83 `foreach ($instance in $SqlInstance)` | ○ |
| C-03 | 特定のトレースフラグのみフィルタリングできること | E-01: 行97-98 `if ($TraceFlag) { $tflags = $tflags \| Where-Object TraceFlag -In $TraceFlag }` | ○ |
| C-04 | SqlCredentialでの認証が成功すること | E-01: 行85 `$server = Connect-DbaInstance -SqlInstance $instance -SqlCredential $SqlCredential` | ○ |
| C-05 | トレースフラグが1つも有効でない場合 | E-01: 行92-95 `if ($tFlags.Rows.Count -eq 0) { Write-Message -Level Verbose... continue }` | ○ |
| C-06 | 存在しないトレースフラグを指定した場合 | E-01: 行97-98 Where-Objectフィルタで空結果 | ○ |
| C-07 | 接続できないインスタンスを指定した場合 | E-01: 行86-88 `catch { Stop-Function -Message "Failure" -Category ConnectionError... }` | ○ |
| C-08 | EnableExceptionでの例外スローが動作すること | E-01: 行79 `[switch]$EnableException` パラメータ定義 | ○ |
| C-74 | SqlInstanceがMandatoryであること | E-01: 行74 `[parameter(Mandatory, ValueFromPipeline)]` | ○ |
| C-75 | SqlInstanceがパイプラインから受け取れること | E-01: 行74 `ValueFromPipeline` | ○ |

### Get-DbaTrace (UT-TRC-009 ~ UT-TRC-018, UT-TRC-076)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-09 | トレース情報が取得できること | E-02: 行98 `$sql = "SELECT... FROM sys.traces"` | ○ |
| C-10 | 特定IDのトレースのみ取得できること | E-02: 行100-103 `if ($Id) { ... WHERE id IN ($idstring) }` | ○ |
| C-11 | デフォルトトレースのみ取得できること | E-02: 行119-121 `if ($Default) { $results = $results \| Where-Object { $_.is_default } }` | ○ |
| C-12 | 複数IDを指定して取得できること | E-02: 行101 `$idstring = $Id -join ","` | ○ |
| C-13 | RemotePathが正しく生成されること | E-02: 行124-125 `$remotefile = Join-AdminUnc -servername $server.ComputerName -filepath $row.path` | ○ |
| C-14 | トレースパスが空の場合 | E-02: 行126-127 `else { $remotefile = $null }` | ○ |
| C-15 | 存在しないトレースIDを指定した場合 | E-02: 行100-103 WHERE句でフィルタされ空結果 | ○ |
| C-16 | 接続できないインスタンスを指定した場合 | E-02: 行109-111 `catch { Stop-Function -Message "Failure"... }` | ○ |
| C-17 | SQL Server 2000への接続 | E-02: 行108 `Connect-DbaInstance -SqlInstance $instance -SqlCredential $SqlCredential -MinimumVersion 9` | ○ |
| C-18 | sys.tracesクエリが失敗した場合 | E-02: 行115-117 `catch { Stop-Function -Message "Issue collecting trace data on $server"... }` | ○ |
| C-76 | SqlInstanceがMandatoryであること | E-02: 行87 `[parameter(Mandatory, ValueFromPipeline)]` | ○ |

### Start-DbaTrace (UT-TRC-019 ~ UT-TRC-024, UT-TRC-079)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 | 停止中のトレースを開始できること | E-03: 行129 `$sql = "EXEC sp_trace_setstatus $traceid, 1"` | ○ |
| C-20 | パイプラインからトレースを開始できること | E-03: 行106-107 `[parameter(ValueFromPipeline)] [object[]]$InputObject` | ○ |
| C-21 | WhatIfで実行内容が確認できること | E-03: 行130 `if ($Pscmdlet.ShouldProcess($traceid, "Starting the TraceID on $server"))` | ○ |
| C-22 | デフォルトトレースを開始しようとした場合 | E-03: 行123-127 `if ($default.id -eq $traceid) { Stop-Function -Message "The default trace on $server cannot be started..." }` | ○ |
| C-23 | 無効なInputObjectを渡した場合 | E-03: 行116-119 `if (-not $trace.id -and -not $trace.Parent) { Stop-Function -Message "Input is of the wrong type..."` | ○ |
| C-24 | sp_trace_setstatus実行エラーの場合 | E-03: 行134-137 `catch { Stop-Function -Message "Failure"... }` | ○ |
| C-79 | SupportsShouldProcessが有効であること | E-03: 行101 `[CmdletBinding(SupportsShouldProcess)]` | ○ |

### Stop-DbaTrace (UT-TRC-025 ~ UT-TRC-030, UT-TRC-080)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-25 | 実行中のトレースを停止できること | E-04: 行123 `$sql = "sp_trace_setstatus $traceid, 0"` | ○ |
| C-26 | パイプラインからトレースを停止できること | E-04: 行100-101 `[parameter(ValueFromPipeline)] [object[]]$InputObject` | ○ |
| C-27 | 停止後にトレース情報が返却されること | E-04: 行128 `$output = Get-DbaTrace -SqlInstance $server -Id $traceid` | ○ |
| C-28 | トレースが既に削除されていた場合のフォールバック出力 | E-04: 行129-155 `if (-not $output) { $output = [PSCustomObject]@{...} }` | ○ |
| C-29 | デフォルトトレースを停止しようとした場合 | E-04: 行119-121 `if ($default.id -eq $traceid) { Stop-Function -Message "The default trace on $server cannot be stopped..." }` | ○ |
| C-30 | 無効なInputObjectを渡した場合 | E-04: 行110-113 `if (-not $trace.id -and -not $trace.Parent) { Stop-Function -Message "Input is of the wrong type..."` | ○ |
| C-80 | SupportsShouldProcessが有効であること | E-04: 行95 `[CmdletBinding(SupportsShouldProcess)]` | ○ |

### Read-DbaTraceFile (UT-TRC-031 ~ UT-TRC-049, UT-TRC-082)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-31 | トレースファイルを読み取れること | E-05: 行373-375 `$sql = "SELECT... FROM fn_trace_gettable('$file', DEFAULT) $Where"` | ○ |
| C-32 | デフォルトトレースファイルが読み取れること | E-05: 行359-361 `$currentPath = $server.ConnectionContext.ExecuteScalar("SELECT path FROM sys.traces WHERE is_default = 1")` | ○ |
| C-33 | Databaseフィルタが動作すること | E-05: 行295-298 `if ($Database) { $where = $database -join "','"; $tempwhere += "databasename in ('$where')" }` | ○ |
| C-34 | Loginフィルタが動作すること | E-05: 行300-303 `if ($Login) { $where = $Login -join "','"; $tempwhere += "LoginName in ('$where')" }` | ○ |
| C-35 | Spidフィルタが動作すること | E-05: 行305-308 `if ($Spid) { $where = $Spid -join ","; $tempwhere += "Spid in ($where)" }` | ○ |
| C-36 | EventClassフィルタが動作すること | E-05: 行310-313 `if ($EventClass) { $where = $EventClass -join ","; $tempwhere += "EventClass in ($where)" }` | ○ |
| C-37 | ObjectTypeフィルタが動作すること | E-05: 行315-318 `if ($ObjectType) { $where = $ObjectType -join ","; $tempwhere += "ObjectType in ($where)" }` | ○ |
| C-38 | ErrorIdフィルタが動作すること | E-05: 行320-323 `if ($ErrorId) { $where = $ErrorId -join ","; $tempwhere += "Error in ($where)" }` | ○ |
| C-39 | EventSequenceフィルタが動作すること | E-05: 行325-328 `if ($EventSequence) { $where = $EventSequence -join ","; $tempwhere += "EventSequence in ($where)" }` | ○ |
| C-40 | TextDataフィルタが動作すること | E-05: 行330-333 `if ($TextData) { $where = $TextData -join "%','%"; $tempwhere += "TextData like ('%$where%')" }` | ○ |
| C-41 | ApplicationNameフィルタが動作すること | E-05: 行335-338 `if ($ApplicationName) { $where = $ApplicationName -join "%','%"; $tempwhere += "ApplicationName like ('%$where%')" }` | ○ |
| C-42 | ObjectNameフィルタが動作すること | E-05: 行340-343 `if ($ObjectName) { $where = $ObjectName -join "%','%"; $tempwhere += "ObjectName like ('%$where%')" }` | ○ |
| C-43 | カスタムWhereが動作すること | E-05: 行289-291 `if ($where) { $Where = "where $where" }` | ○ |
| C-44 | 複数フィルタの組み合わせが動作すること | E-05: 行345 `$tempwhere = $tempwhere -join " and "` | ○ |
| C-45 | Get-DbaTraceからのパイプラインが動作すること | E-05: 行268-271 パイプラインバインディング定義 | ○ |
| C-46 | 複数パスの処理 | E-05: 行363 `foreach ($file in $currentPath)` | ○ |
| C-47 | 存在しないパスを指定した場合 | E-05: 行366-371 `$exists = Test-DbaPath...; if (!$exists) { Write-Message -Level Warning... Continue }` | ○ |
| C-48 | クエリ実行エラーの場合 | E-05: 行380-382 `catch { Stop-Function -Message "Error returned from SQL Server: $instance"... }` | ○ |
| C-49 | SQL Server 2000への接続 | E-05: 行352 `Connect-DbaInstance -SqlInstance $instance -SqlCredential $SqlCredential -MinimumVersion 9` | ○ |
| C-82 | PathがValueFromPipelineByPropertyNameであること | E-05: 行270-272 `[parameter(ValueFromPipelineByPropertyName)] [string[]]$Path` | ○ |

### Remove-DbaTrace (UT-TRC-050 ~ UT-TRC-057, UT-TRC-081)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-50 | トレースを削除できること | E-06: 行105-106 `$stopsql = "EXEC sp_trace_setstatus $traceid, 0"; $removesql = "EXEC sp_trace_setstatus $traceid, 2"` | ○ |
| C-51 | パイプラインからトレースを削除できること | E-06: 行82-83 `[parameter(ValueFromPipeline)] [object[]]$InputObject` | ○ |
| C-52 | 削除後に確認メッセージが返却されること | E-06: 行114-120 `[PSCustomObject]@{ ... Status = "Stopped, closed and deleted" }` | ○ |
| C-53 | 停止後すぐに削除された場合のスキップ処理 | E-06: 行111-113 `if (Get-DbaTrace -SqlInstance $server -Id $traceid) { $server.Query($removesql) }` | ○ |
| C-54 | WhatIfで実行内容が確認できること | E-06: 行108 `if ($Pscmdlet.ShouldProcess($traceid, "Removing the trace"))` | ○ |
| C-55 | デフォルトトレースを削除しようとした場合 | E-06: 行101-103 `if ($default.id -eq $traceid) { Stop-Function -Message "The default trace on $server cannot be stopped..." }` | ○ |
| C-56 | 無効なInputObjectを渡した場合 | E-06: 行92-95 `if (-not $trace.id -and -not $trace.Parent) { Stop-Function -Message "Input is of the wrong type..."` | ○ |
| C-57 | sp_trace_setstatus実行エラーの場合 | E-06: 行121-124 `catch { Stop-Function -Message "Failure"... }` | ○ |
| C-81 | SupportsShouldProcessが有効であること | E-06: 行77 `[CmdletBinding(SupportsShouldProcess)]` | ○ |

### Enable-DbaTraceFlag (UT-TRC-058 ~ UT-TRC-065, UT-TRC-077)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 | トレースフラグを有効化できること | E-07: 行116 `$query = "DBCC TRACEON($tf, -1)"` | ○ |
| C-59 | 複数トレースフラグを有効化できること | E-07: 行97 `foreach ($tf in $TraceFlag)` | ○ |
| C-60 | 複数インスタンスへの適用 | E-07: 行87 `foreach ($instance in $SqlInstance)` | ○ |
| C-61 | WhatIfで実行内容が確認できること | E-07: 行114 `if ($Pscmdlet.ShouldProcess($instance, "Enabling flag '$tf'"))` | ○ |
| C-62 | 既に有効なトレースフラグを指定した場合 | E-07: 行107-113 `if ($CurrentRunningTraceFlags.TraceFlag -contains $tf) { $TraceFlagInfo.Status = 'Skipped'...` | ○ |
| C-63 | 接続できないインスタンスを指定した場合 | E-07: 行90-92 `catch { Stop-Function -Message "Failure" -Category ConnectionError... }` | ○ |
| C-64 | DBCC TRACEON実行エラーの場合 | E-07: 行119-124 `catch { $TraceFlagInfo.Status = "Failed"; $TraceFlagInfo.Notes = $_.Exception.Message... }` | ○ |
| C-65 | DateTimeが正しく設定されること | E-07: 行105 `DateTime = [DbaDateTime](Get-Date)` | ○ |
| C-77 | TraceFlagがMandatoryであること | E-07: 行81-82 `[parameter(Mandatory)] [int[]]$TraceFlag` | ○ |

### Disable-DbaTraceFlag (UT-TRC-066 ~ UT-TRC-073, UT-TRC-078)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-66 | トレースフラグを無効化できること | E-08: 行109 `$query = "DBCC TRACEOFF ($tf, -1)"` | ○ |
| C-67 | 複数トレースフラグを無効化できること | E-08: 行90 `foreach ($tf in $TraceFlag)` | ○ |
| C-68 | 複数インスタンスへの適用 | E-08: 行80 `foreach ($instance in $SqlInstance)` | ○ |
| C-69 | WhatIfで実行内容が確認できること | E-08: 行107 `if ($Pscmdlet.ShouldProcess($instance, "Disabling flag '$tf'"))` | ○ |
| C-70 | 実行されていないトレースフラグを指定した場合 | E-08: 行100-106 `if ($tf -notin $current.TraceFlag) { $TraceFlagInfo.Status = 'Skipped'... }` | ○ |
| C-71 | 接続できないインスタンスを指定した場合 | E-08: 行84-86 `catch { Stop-Function -Message "Failure" -Category ConnectionError... }` | ○ |
| C-72 | DBCC TRACEOFF実行エラーの場合 | E-08: 行111-116 `catch { $TraceFlagInfo.Status = "Failed"; $TraceFlagInfo.Notes = $_.Exception.Message... }` | ○ |
| C-73 | DateTimeが正しく設定されること | E-08: 行98 `DateTime = [DbaDateTime](Get-Date)` | ○ |
| C-78 | TraceFlagがMandatoryであること | E-08: 行74-75 `[parameter(Mandatory)] [int[]]$TraceFlag` | ○ |

## 4) 不足情報（Unknown / Missing）
- 特になし。全てのテストケースはソースコードから直接根拠を特定できました。

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

### 補足事項
- public-Traceモジュールは8つの関数で構成され、SQL Serverトレース機能の管理を行います
- デフォルトトレースの保護機構（Start/Stop/Remove時の拒否）は重要なビジネスロジックです
- Read-DbaTraceFileの多数のフィルタパラメータは、WHERE句の動的生成を行っています
- Enable/Disable-DbaTraceFlagはDBCC TRACEON/TRACEOFFコマンドを使用しています

## 6) レビュアーチェックリスト（最小）
- [ ] デフォルトトレース保護テスト（UT-TRC-022, UT-TRC-029, UT-TRC-055）が適切に実装されているか確認
- [ ] 各コマンドの接続エラー処理テストが網羅されているか確認
- [ ] Read-DbaTraceFileのフィルタ条件生成ロジックが正しくテストされているか確認
- [ ] WhatIf/Confirmサポートのテストが含まれているか確認
- [ ] パイプライン入力のテストが各コマンドに含まれているか確認
- [ ] MinimumVersionによるバージョン制限テスト（SQL Server 2005以上要求）が適切か確認
