---
generated_at: 2026-02-18 12:00:00
metrics:
  claims_total: 60
  claims_with_evidence: 58
  claims_without_evidence: 2
confidence_derived: 0.97
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：58 / 60、根拠なし：2
- 優先レビュー（高）
  1. **C-53, C-54（EKM CryptographicProvider関連テストケース）**：コード内にMappedClassTypeの処理はあるが、実際のEKM環境でのテスト実行可否は環境依存
  2. **C-60（パスワード復号失敗ケース）**：Get-DecryptedObject内部関数の詳細な失敗ケースが不明

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

- E-01: `public/Get-DbaCredential.ps1` (147行)
- E-02: `public/New-DbaCredential.ps1` (224行)
- E-03: `public/Remove-DbaCredential.ps1` (142行)
- E-04: `public/Export-DbaCredential.ps1` (198行)
- E-05: `public/Copy-DbaCredential.ps1` (282行)
- E-06: `docs/code-to-docs/単体テストケース一覧/plan.md` (plan.mdの定義)

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

### Get-DbaCredential (UT-CRD-001〜010)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | 全ての資格情報を取得できること | E-01: L120 `$creds = $server.Credentials` | ○ |
| C-02 | Credentialパラメータで名前フィルタが機能すること | E-01: L122-123 `if ($Credential) { $creds = ... }` | ○ |
| C-03 | ExcludeCredentialパラメータで除外フィルタが機能すること | E-01: L126-127 `if ($ExcludeCredential) { ... }` | ○ |
| C-04 | Identityパラメータでフィルタが機能すること | E-01: L130-131 `if ($Identity) { ... }` | ○ |
| C-05 | ExcludeIdentityパラメータで除外フィルタが機能すること | E-01: L134-135 `if ($ExcludeIdentity) { ... }` | ○ |
| C-06 | 複数インスタンスに対して実行できること | E-01: L98 `[DbaInstanceParameter[]]$SqlInstance`, L113 `foreach ($instance in $SqlInstance)` | ○ |
| C-07 | 出力オブジェクトに必須プロパティが含まれること | E-01: L139-143 `Add-Member`, `Select-DefaultView` | ○ |
| C-08 | 接続失敗時にエラーメッセージが出力されること | E-01: L116-117 `Stop-Function -Message "Failure" -Category ConnectionError` | ○ |
| C-09 | 資格情報が存在しない場合に空が返却されること | E-01: L138 `foreach ($currentcredential in $creds)` - 空の場合ループしない | ○ |
| C-10 | SqlCredentialパラメータで代替認証が使用できること | E-01: L100 `[PSCredential]$SqlCredential`, L115 `Connect-DbaInstance ... -SqlCredential $SqlCredential` | ○ |

### New-DbaCredential (UT-CRD-011〜022)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-11 | 新しい資格情報を作成できること | E-02: L198-211 `$instancecredential = New-Object ... $instancecredential.Create()` | ○ |
| C-12 | Nameを省略した場合にIdentityがNameとして使用されること | E-02: L149 `[string]$Name = $Identity` | ○ |
| C-13 | パスワードなしで資格情報を作成できること | E-02: L208-210 `else { ... $instancecredential.Create($Identity) }` | ○ |
| C-14 | Force指定時に既存の資格情報を上書きできること | E-02: L181-193 `if ($currentCred) { if ($force) { ... $currentCred.Drop() } }` | ○ |
| C-15 | 既存の資格情報がありForceなしの場合にエラーになること | E-02: L191-193 `else { Stop-Function -Message "Credential exists and Force was not specified" }` | ○ |
| C-16 | MappedClassType=CryptographicProviderで作成できること | E-02: L155-156 `[ValidateSet('CryptographicProvider', 'None')]`, L200-203 `$instancecredential.MappedClassType = $mappedClass` | ○ |
| C-17 | Azure Storage用の資格情報を作成できること | E-02: L99-108 Example（Azure Blob用） | ○ |
| C-18 | SAS Token用の資格情報を作成できること | E-02: L111-119 Example（SAS Token用） | ○ |
| C-19 | S3互換ストレージ用の資格情報を作成できること | E-02: L134-142 Example（S3用） | ○ |
| C-20 | 接続失敗時にエラーメッセージが出力されること | E-02: L175-177 `Stop-Function -Message "Failure" -Category ConnectionError` | ○ |
| C-21 | WhatIfで実際の作成が行われないこと | E-02: L144 `[CmdletBinding(SupportsShouldProcess, ConfirmImpact = "Medium")]`, L196 `if ($Pscmdlet.ShouldProcess(...))` | ○ |
| C-22 | 出力オブジェクトに必須プロパティが含まれること | E-02: L213-217 `Add-Member`, `Select-DefaultView` | ○ |

### Remove-DbaCredential (UT-CRD-023〜032)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-23 | 資格情報を削除できること | E-03: L130 `$dbCredential.Drop()`, L131-132 Status/IsRemoved設定 | ○ |
| C-24 | パイプラインからInputObjectを受け取れること | E-03: L96-97 `[parameter(ValueFromPipeline ... Mandatory = $true)] [Microsoft.SqlServer.Management.Smo.Credential[]]$InputObject` | ○ |
| C-25 | Credentialパラメータでフィルタ削除ができること | E-03: L92 `[string[]]$Credential`, L111 `Get-DbaCredential @params` | ○ |
| C-26 | ExcludeCredentialパラメータで除外削除ができること | E-03: L93 `[string[]]$ExcludeCredential`, L111 `Get-DbaCredential @params` | ○ |
| C-27 | Identityパラメータでフィルタ削除ができること | E-03: L94 `[string[]]$Identity`, L111 `Get-DbaCredential @params` | ○ |
| C-28 | ExcludeIdentityパラメータで除外削除ができること | E-03: L95 `[string[]]$ExcludeIdentity`, L111 `Get-DbaCredential @params` | ○ |
| C-29 | 削除失敗時にエラー情報が出力されること | E-03: L133-136 `catch { Stop-Function ... $output.Status = ... IsRemoved = $false }` | ○ |
| C-30 | WhatIfで実際の削除が行われないこと | E-03: L88 `[CmdletBinding(SupportsShouldProcess ... ConfirmImpact = 'High')]`, L120 `if ($PSCmdlet.ShouldProcess(...))` | ○ |
| C-31 | Confirmプロンプトが表示されること | E-03: L88 `ConfirmImpact = 'High'` | ○ |
| C-32 | 出力オブジェクトに必須プロパティが含まれること | E-03: L121-128 PSCustomObject定義 | ○ |

### Export-DbaCredential (UT-CRD-033〜043)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | 資格情報をT-SQLスクリプトにエクスポートできること | E-04: L166-175 SQL生成, L181-186 ファイル出力 | ○ |
| C-34 | ExcludePasswordでパスワードなしエクスポートができること | E-04: L138-148 `if ($ExcludePassword) { ... Password = '<EnterStrongPasswordHere>' }` | ○ |
| C-35 | Identityパラメータでフィルタエクスポートができること | E-04: L153-155 `if ($Identity) { $credentials = $credentials | Where-Object Identity -in $Identity }` | ○ |
| C-36 | FilePathで出力先を指定できること | E-04: L93 `[string]$FilePath`, L162 `$FilePath = Get-ExportFilePath ...` | ○ |
| C-37 | Appendで既存ファイルに追記できること | E-04: L96 `[switch]$Append`, L182-183 `if ($Append) { Add-Content ... }` | ○ |
| C-38 | Passthruでスクリプトをパイプラインに出力できること | E-04: L97 `[switch]$Passthru`, L178-179 `if ($Passthru) { $sql }` | ○ |
| C-39 | CryptographicProvider資格情報のエクスポートができること | E-04: L171-174 `if ($cred.MappedClassType -like 'Cryptographic*') { ... FOR CRYPTOGRAPHIC PROVIDER }` | ○ |
| C-40 | Linux/macOSで実行時にエラーになること | E-04: L106-109 `if ($IsLinux -or $IsMacOS) { Stop-Function -Message "This command is not supported on Linux or macOS" }` | ○ |
| C-41 | 接続失敗時にエラーメッセージが出力されること | E-04: L134-136 `Stop-Function -Message "Failure" -Category ConnectionError` | ○ |
| C-42 | 資格情報が存在しない場合に何も出力されないこと | E-04: L157-160 `if (-not $credentials) { Write-Message -Level Verbose -Message "Nothing to export"; continue }` | ○ |
| C-43 | 出力ファイルがFileInfo型で返却されること | E-04: L187 `Get-ChildItem -Path $FilePath` | ○ |

### Copy-DbaCredential (UT-CRD-044〜060)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-44 | 資格情報をコピーできること | E-05: L241-266 New-DbaCredential呼び出し | ○ |
| C-45 | Nameパラメータでフィルタコピーができること | E-05: L134 `[string[]]$Name`, L191 `Get-DbaCredential ... -Name $Name` | ○ |
| C-46 | ExcludeNameパラメータで除外コピーができること | E-05: L135 `[string[]]$ExcludeName`, L191 `Get-DbaCredential ... -ExcludeName $ExcludeName` | ○ |
| C-47 | Identityパラメータでフィルタコピーができること | E-05: L137 `[string[]]$Identity`, L191 `Get-DbaCredential ... -Identity $Identity` | ○ |
| C-48 | ExcludeIdentityパラメータで除外コピーができること | E-05: L139 `[string[]]$ExcludeIdentity`, L191 `Get-DbaCredential ... -ExcludeIdentity $ExcludeIdentity` | ○ |
| C-49 | 既存資格情報がある場合にスキップされること | E-05: L218-225 `if ($null -ne $destServer.Credentials[$credentialName]) { if (!$force) { ... Status = "Skipping" ... } }` | ○ |
| C-50 | Force指定時に既存資格情報を上書きコピーできること | E-05: L226-237 `else { if ($Pscmdlet.ShouldProcess(...)) { ... $destServer.Credentials[$credentialName].Drop() } }` | ○ |
| C-51 | ExcludePasswordでパスワードなしコピーができること | E-05: L140 `[switch]$ExcludePassword`, L256-259 `if (-not $ExcludePassword) { ... SecurePassword = ... }` | ○ |
| C-52 | 複数の宛先にコピーできること | E-05: L132 `[DbaInstanceParameter[]]$Destination`, L196 `foreach ($destinstance in $Destination)` | ○ |
| C-53 | CryptographicProvider資格情報のコピーができること | E-05: L249-255 cryptographic provider処理 | △ |
| C-54 | 宛先でCryptographicProviderが未構成の場合にエラーになること | E-05: L250-253 `if (-not $cryptoConfiguredOnDestination.is_enabled) { throw ... }` | △ |
| C-55 | Linux/macOSで実行時にエラーになること | E-05: L146-149 `if (-not $script:isWindows) { Stop-Function -Message "Copy-DbaCredential is only supported on Windows" }` | ○ |
| C-56 | ソース接続失敗時にエラーメッセージが出力されること | E-05: L175-177 `Stop-Function -Message "Failure" -Category ConnectionError` | ○ |
| C-57 | 宛先接続失敗時にエラーメッセージが出力されること | E-05: L199-201 `Stop-Function -Message "Failure" -Category ConnectionError ... -Continue` | ○ |
| C-58 | WhatIfで実際のコピーが行われないこと | E-05: L122 `[CmdletBinding(SupportsShouldProcess, ConfirmImpact = "Medium")]`, L261 `if ($Pscmdlet.ShouldProcess(...))` | ○ |
| C-59 | 出力オブジェクトに必須プロパティが含まれること | E-05: L208-216, L223, L265, L270 MigrationObject構造 | ○ |
| C-60 | パスワード復号失敗時にエラーメッセージが出力されること | E-05: L183-187 `catch { Stop-Function -Message "Failed to decrypt credentials" }` | △ |

## 4) 不足情報（Unknown / Missing）
- **EKM（Extensible Key Management）環境の詳細**：CryptographicProvider関連のテストケース（C-53, C-54）は、実際のEKMプロバイダー環境が必要であり、テスト環境の準備が難しい可能性がある
  - 候補：EKMプロバイダーのモック / テスト用暗号化プロバイダーの構成 / スキップ条件の追加
- **Get-DecryptedObject関数の内部実装**：パスワード復号処理は内部関数であり、失敗ケースの詳細が不明
  - 候補：private/functions/Get-DecryptedObject.ps1の調査 / 復号失敗シナリオの特定

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 基本的なCRUD操作テストケース（C-01〜C-32, C-44〜C-52, C-55〜C-59）
- **1: 中リスク** - パスワード復号関連テストケース（C-60）- 内部関数の動作に依存
- **1: 中リスク** - EKM関連テストケース（C-53, C-54）- 環境依存性が高い

## 6) レビュアーチェックリスト（最小）
- [ ] 各コマンドの必須パラメータ（Mandatory）がテストケースに含まれているか
- [ ] パイプライン入力対応のコマンド（ValueFromPipeline）のテストが含まれているか
- [ ] SupportsShouldProcess対応コマンドのWhatIf/Confirmテストが含まれているか
- [ ] ConnectionErrorハンドリングのテストが各コマンドに含まれているか
- [ ] 出力オブジェクトのプロパティ検証テストが含まれているか
- [ ] EKM関連テストケースの環境要件が明確か
- [ ] Linux/macOS制限のあるコマンドのプラットフォームチェックテストが含まれているか
