# 機能設計書 211-Reset-DbatoolsConfig

## 概要

本ドキュメントは、dbatoolsモジュールの設定をデフォルト値にリセットするReset-DbatoolsConfig関数の機能設計書です。

### 本機能の処理概要

Reset-DbatoolsConfigは、dbatoolsモジュールの構成設定を元のデフォルト値に復元する機能を提供します。接続の問題のトラブルシューティング、誤って構成された接続文字列の修正、または環境変更後の新規開始に役立ちます。

**業務上の目的・背景**：dbatoolsモジュールはSQL Server管理のための豊富な設定項目を持ちますが、これらの設定が誤って変更されたり、特定の環境向けにカスタマイズされた後に元の動作に戻す必要がある場合があります。本機能は、個々の設定項目、特定モジュール内のすべての設定、またはすべてのdbatools設定を一括でリセットする手段を提供し、トラブルシューティングや環境初期化を効率化します。

**機能の利用シーン**：
- 接続問題が発生した際に設定をデフォルトに戻してトラブルシューティングする場合
- 環境変更後にすべての設定を初期状態に戻す場合
- 特定のモジュールの設定のみをリセットしたい場合
- カスタマイズされた設定が原因で動作が不安定になった場合

**主要な処理内容**：
1. ConfigurationItemパラメータで渡された設定オブジェクトのリセット
2. FullNameパラメータで指定された完全修飾名の設定のリセット
3. Moduleパラメータで指定されたモジュール内のすべての設定のリセット
4. 各設定のResetValue()メソッドを呼び出してデフォルト値に復元

**関連システム・外部連携**：dbatoolsの内部設定システム（Dataplat.Dbatools.Configuration）と連携し、Get-DbatoolsConfigコマンドで取得した設定オブジェクトを処理します。

**権限による制御**：設定のリセットはポリシーによって強制されていない設定に対してのみ可能です。ポリシーで強制された設定はリセットできません。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | CLIインターフェース | 主画面 | コマンドライン実行 |

## 機能種別

構成管理 / 設定リセット

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| ConfigurationItem | Dataplat.Dbatools.Configuration.Config[] | No | リセット対象の設定オブジェクト | Get-DbatoolsConfigで取得した設定オブジェクト |
| FullName | string[] | No | リセットする設定の完全修飾名 | 文字列型、ワイルドカード対応 |
| Module | string | Yes (Moduleセット) | リセットするモジュール名 | 文字列型 |
| Name | string | No | モジュール内の設定名パターン | デフォルト"*"、ワイルドカード対応 |
| EnableException | switch | No | 例外を有効化 | スイッチ型 |
| Confirm | switch | No | 確認プロンプト表示 | スイッチ型 |
| WhatIf | switch | No | 実行シミュレーション | スイッチ型 |

### 入力データソース

- Get-DbatoolsConfigコマンドからパイプライン経由で設定オブジェクトを受け取り
- パラメータ指定による設定名の直接指定

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| なし | - | このコマンドはパイプラインにオブジェクトを返しません |

### 出力先

- 設定リセットは副作用として実行されます
- -WhatIfで変更内容のプレビューが可能です

## 処理フロー

### 処理シーケンス

```
1. パラメータセットの判定
   └─ Pipeline / Module のいずれかで動作モード決定

2. ConfigurationItemの処理（Pipelineセット）
   └─ 各設定オブジェクトのResetValue()を呼び出し

3. FullNameの処理（Pipelineセット）
   └─ Get-DbatoolsConfigで設定取得後、ResetValue()を呼び出し

4. Moduleの処理（Moduleセット）
   └─ Get-DbatoolsConfigでモジュール設定取得後、ResetValue()を呼び出し

5. エラー処理
   └─ リセット失敗時はStop-Functionで警告出力
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{パラメータセット判定}
    B -->|Pipeline| C[ConfigurationItem処理]
    B -->|Pipeline| D[FullName処理]
    B -->|Module| E[Module処理]

    C --> F{ShouldProcess確認}
    D --> G[Get-DbatoolsConfig実行]
    E --> H[Get-DbatoolsConfig実行]

    G --> F
    H --> F

    F -->|Yes| I[ResetValue呼び出し]
    F -->|No| J[スキップ]

    I --> K{成功?}
    K -->|Yes| L[次の項目へ]
    K -->|No| M[Stop-Function]

    M --> L
    J --> L
    L --> N[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | 初期化済み設定のみリセット可能 | 設定が初期化されていない場合はリセット不可 | 常時 |
| BR-002 | ポリシー強制設定はリセット不可 | ポリシーで強制された設定はリセットできない | 常時 |
| BR-003 | 型フィルタリング | ConfigurationItem型の文字列表現はFullName処理でスキップ | 常時 |

### 計算ロジック

該当なし

## データベース操作仕様

### 操作別データベース影響一覧

該当なし（データベース操作なし）

### テーブル別操作詳細

該当なし

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | 設定リセット失敗 | ResetValue()メソッドが例外をスロー | 警告メッセージ出力、次の設定へ継続 |

### リトライ仕様

リトライは行わず、エラー発生時は次の設定項目へ継続処理します。

## トランザクション仕様

該当なし（トランザクション不要）

## パフォーマンス要件

特になし。設定リセットは軽量な操作です。

## セキュリティ考慮事項

- ポリシーによって強制された設定は保護され、リセットできません
- 接続文字列やクレデンシャル関連の設定もリセット対象となるため、運用環境では注意が必要

## 備考

- dbatools v1.0以降で利用可能
- PSFramework設定システムを基盤として構築

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

まず、dbatoolsの設定システムで使用されるデータ構造を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Config型 | `Dataplat.Dbatools.Configuration.Config` | 設定項目を表すクラス構造、ResetValue()メソッドの仕様 |

**読解のコツ**: 設定オブジェクトはFullNameプロパティで一意に識別され、ResetValue()メソッドでデフォルト値に復元できます。

#### Step 2: エントリーポイントを理解する

処理の起点となるファイル・関数を特定します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Reset-DbatoolsConfig.ps1 | `public/Reset-DbatoolsConfig.ps1` | 関数のエントリーポイント、パラメータ定義 |

**主要処理フロー**:
1. **73-92行目**: パラメータ定義とパラメータセット（Pipeline/Module）
2. **94-102行目**: ConfigurationItemの処理ループ
3. **104-117行目**: FullNameの処理ループ
4. **118-125行目**: Moduleパラメータの処理

#### Step 3: 設定取得処理を理解する

Get-DbatoolsConfigとの連携を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbatoolsConfig.ps1 | `public/Get-DbatoolsConfig.ps1` | 設定オブジェクト取得ロジック |

**主要処理フロー**:
- **110行目**: Get-DbatoolsConfig -FullName で設定取得
- **119行目**: Get-DbatoolsConfig -Module -Name で設定取得

### プログラム呼び出し階層図

```
Reset-DbatoolsConfig
    │
    ├─ Get-DbatoolsConfig (設定取得)
    │      └─ ConfigurationHost.Configurations (内部設定ストア)
    │
    ├─ Config.ResetValue() (設定リセット実行)
    │
    └─ Stop-Function (エラー処理)
```

### データフロー図

```
[入力]                    [処理]                         [出力]

ConfigurationItem  ───▶ ResetValue()呼び出し  ───▶ 設定リセット完了
     or
FullName           ───▶ Get-DbatoolsConfig  ───▶ ResetValue()呼び出し
     or
Module + Name      ───▶ Get-DbatoolsConfig  ───▶ ResetValue()呼び出し
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Reset-DbatoolsConfig.ps1 | `public/Reset-DbatoolsConfig.ps1` | ソース | メイン関数 |
| Get-DbatoolsConfig.ps1 | `public/Get-DbatoolsConfig.ps1` | ソース | 設定取得関数 |
| Stop-Function.ps1 | `private/functions/Stop-Function.ps1` | ソース | エラー処理関数 |
