# 機能設計書 155-Get-DbatoolsConfig

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおける `Get-DbatoolsConfig` コマンドレットの機能設計を記述する。本機能は、dbatoolsモジュールの構成設定と環境設定を取得するための機能である。

### 本機能の処理概要

dbatoolsモジュールの動作を制御する構成設定（接続タイムアウト、デフォルトパス、メール設定など）を取得し、構造化されたオブジェクトとして出力する機能である。

**業務上の目的・背景**：dbatoolsモジュールは多数の構成設定を持ち、これらの設定がコマンドの動作に影響を与える。管理者やDBAが現在の設定を確認し、必要に応じてカスタマイズするために、構成設定を一覧表示できる機能が必要である。また、トラブルシューティング時に現在の設定状態を把握することも重要である。

**機能の利用シーン**：
- 現在のdbatools設定の確認
- 特定の設定項目の検索（ワイルドカード対応）
- トラブルシューティング時の設定確認
- カスタマイズ可能な設定の特定
- 設定変更前の現状把握

**主要な処理内容**：
1. 内部構成ホスト（ConfigurationHost）から設定値を取得
2. モジュール名・設定名によるフィルタリング
3. 隠し設定の表示/非表示制御
4. ソート済み結果の出力

**関連システム・外部連携**：dbatools内部構成システム（Dataplat.Dbatools.Configuration.ConfigurationHost）

**権限による制御**：特別な権限は不要。

## 関連画面

本機能はコマンドライン機能であり、直接的な関連画面は存在しない。

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | - | - | - |

## 機能種別

データ取得（モジュール構成情報）

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| FullName | string | No | 完全な構成キー名（Module.Name形式）。デフォルト: "*" | ワイルドカード対応 |
| Name | string | No | 構成名（Module内での名前）。デフォルト: "*" | ワイルドカード対応 |
| Module | string | No | モジュール名。デフォルト: "*" | ワイルドカード対応 |
| Force | switch | No | 隠し設定も含めて表示 | - |

### パラメータセット

- **FullName** パラメータセット: FullNameパラメータを使用
- **Module** パラメータセット: Name、Moduleパラメータを使用

### 入力データソース

- ユーザー入力（コマンドラインパラメータ）
- 内部構成システム（ConfigurationHost.Configurations）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| Module | string | モジュール名（例: sql, mail, path, logging） |
| Name | string | 設定名（例: timeout, smtpserver） |
| Value | object | 設定値（型は設定による） |
| Description | string | 設定の説明文 |
| Hidden | bool | 隠し設定かどうか |

### 出力先

- PowerShellパイプライン（Dataplat.Dbatools.Configuration.ConfigurationValue）
- コンソール出力

## 処理フロー

### 処理シーケンス

```
1. パラメータセット判定
   └─ FullNameまたはModuleパラメータセットを判定

2. 構成値の取得
   └─ ConfigurationHost.Configurationsから全設定を取得

3. フィルタリング
   ├─ FullNameパターンまたはName/Moduleパターンでフィルタ
   └─ 隠し設定のフィルタ（Force未指定時は除外）

4. ソート
   └─ Module、Nameでソート

5. 出力
   └─ フィルタ済み設定をパイプラインに出力
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{パラメータセット?}
    B -->|FullName| C[FullNameパターンでフィルタ]
    B -->|Module| D[Module/Nameパターンでフィルタ]
    C --> E{Force指定?}
    D --> E
    E -->|No| F[隠し設定を除外]
    E -->|Yes| G[隠し設定も含む]
    F --> H[Module, Nameでソート]
    G --> H
    H --> I[結果出力]
    I --> J[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | デフォルトワイルドカード | パラメータ未指定時は "*" で全件取得 | 常時 |
| BR-002 | 隠し設定デフォルト非表示 | Force未指定時は隠し設定を除外 | Force未指定時 |
| BR-003 | 大文字小文字無視 | パターンマッチは大文字小文字を区別しない | 常時 |
| BR-004 | ソート順 | Module優先、次にNameでソート | 常時 |

### 計算ロジック

- **FullNameパターン**: `"$($_.Module).$($_.Name)" -like $FullName`
- **Module/Nameパターン**: `$_.Name -like $Name` かつ `$_.Module -like $Module`

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

本機能はデータベースにアクセスしない。内部構成システムから設定を取得する。

## エラー処理

### エラーケース一覧

本機能は入力検証でエラーを発生させず、マッチする設定がない場合は空結果を返す。

### リトライ仕様

リトライは実装されていない。

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

本機能は読み取り専用操作のため、トランザクション管理は不要。

## パフォーマンス要件

- 構成設定はメモリ上に保持されており、即時取得可能
- 大量の設定が存在する場合でもミリ秒単位で完了

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

- 隠し設定にはセンシティブな情報が含まれる可能性があり、デフォルトで非表示
- Forceパラメータ使用時は隠し設定も表示される

## 備考

- 関連コマンド: Set-DbatoolsConfig, Get-DbatoolsConfigValue
- 構成設定はセッション内で有効、永続化にはRegister-DbatoolsConfigを使用

---

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

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

### 推奨読解順序

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

本機能の出力はConfigurationValueオブジェクトである。内部構成システムの構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbatoolsConfig.ps1 | `public/Get-DbatoolsConfig.ps1` | 32-44行目の.OUTPUTSセクションで出力構造を確認 |

**読解のコツ**: ConfigurationValueオブジェクトのプロパティ（Module, Name, Value, Description, Hidden）を理解する。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbatoolsConfig.ps1 | `public/Get-DbatoolsConfig.ps1` | 67-76行目のパラメータ定義 |

**主要処理フロー**:
1. **67-76行目**: パラメータ定義（ParameterSetName含む）
2. **69-70行目**: FullNameパラメータセット定義
3. **71-74行目**: Moduleパラメータセット定義
4. **75行目**: Forceスイッチ定義

#### Step 3: コア処理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbatoolsConfig.ps1 | `public/Get-DbatoolsConfig.ps1` | 78-89行目のswitch文による処理分岐 |

**主要処理フロー**:
- **78行目**: パラメータセット判定のswitch開始
- **79-83行目**: Moduleパラメータセット時の処理（小文字変換、フィルタ、ソート）
- **86-88行目**: FullNameパラメータセット時の処理（フィルタ、ソート）

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

```
Get-DbatoolsConfig
    │
    ├─ ConfigurationHost.Configurations.Values
    │      └─ 全構成設定を取得
    │
    ├─ Where-Object
    │      ├─ Name/Module パターンマッチ
    │      ├─ FullName パターンマッチ
    │      └─ Hidden フィルタ
    │
    └─ Sort-Object
           └─ Module, Name でソート
```

### データフロー図

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

FullName ───┐
            │
Name ───────┼──▶ ConfigurationHost.Configurations.Values
            │              │
Module ─────┘              ▼
                   パターンマッチフィルタ
                           │
Force ─────────────────────┤
                           ▼
                    隠し設定フィルタ
                           │
                           ▼
                    Module, Name ソート
                           │
                           ▼
                ConfigurationValue ───▶ パイプライン出力
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbatoolsConfig.ps1 | `public/Get-DbatoolsConfig.ps1` | ソース | メイン機能実装 |
| Set-DbatoolsConfig.ps1 | `public/Set-DbatoolsConfig.ps1` | ソース | 設定変更（関連コマンド） |
| Get-DbatoolsConfigValue.ps1 | `public/Get-DbatoolsConfigValue.ps1` | ソース | 単一設定値取得（関連コマンド） |
| Register-DbatoolsConfig.ps1 | `public/Register-DbatoolsConfig.ps1` | ソース | 設定永続化（関連コマンド） |
