# 機能設計書 159-Get-DbatoolsPath

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおける `Get-DbatoolsPath` コマンドレットの機能設計を記述する。本機能は、dbatoolsが使用するファイルパス設定を取得するための機能である。

### 本機能の処理概要

dbatoolsモジュールが一時ファイル、ログ、出力データの保存に使用する設定済みファイルパスを、パス名を指定して取得する機能である。

**業務上の目的・背景**：dbatoolsコマンドは、エクスポート、一時処理、ログ出力などでファイルシステムを使用する。これらのパスは構成システムで管理されており、組織のファイルストレージポリシーに準拠するためにカスタマイズ可能である。本機能は、これらの設定済みパスを参照し、スクリプト内で一貫したパス使用を実現する。

**機能の利用シーン**：
- 一時ファイル保存先の確認
- エクスポート出力先ディレクトリの取得
- カスタムスクリプトでのパス参照
- バックアップステージングディレクトリの確認
- レポート出力先の取得

**主要な処理内容**：
1. パス名を受け取る
2. 構成システムから"Path.Managed.{Name}"形式の設定値を取得
3. パス文字列を返す

**関連システム・外部連携**：dbatools内部構成システム

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

## 関連画面

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

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

## 機能種別

データ取得（パス設定）

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| Name | string | Yes | 取得するパス名（Temp, LocalAppData, AppData, ProgramData等） | 位置パラメータ0 |

### 入力データソース

- ユーザー入力（コマンドラインパラメータ）
- 内部構成システム（Path.Managed.{Name}）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| (パス) | string | 指定されたパス名に対応するファイルパス |

### 出力先

- PowerShellパイプライン（string）

## 処理フロー

### 処理シーケンス

```
1. パラメータ受け取り
   └─ Nameパラメータを受け取り

2. 構成キー生成
   └─ "Path.Managed.{Name}" 形式のキーを構築

3. 構成値取得
   └─ Get-DbatoolsConfigValue でパス値を取得

4. 出力
   └─ パス文字列を返す
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[Nameパラメータ受け取り]
    B --> C["Path.Managed.{Name}" キー構築]
    C --> D[Get-DbatoolsConfigValue]
    D --> E[パス文字列出力]
    E --> F[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | 構成キー形式 | "Path.Managed.{Name}"形式で構成システムを参照 | 常時 |
| BR-002 | 未設定時null | パスが設定されていない場合はnullを返す | 設定なし時 |

### 計算ロジック

特になし

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

本機能はデータベースにアクセスしない。

## エラー処理

### エラーケース一覧

本機能自体はエラーを発生させない。パスが存在しない場合は$nullを返す。

### リトライ仕様

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

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

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

## パフォーマンス要件

- 構成設定はメモリ上に保持されており、即時取得可能
- 単一値の取得のため、ミリ秒単位で完了

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

- 返されるパスはユーザーの権限に依存
- 機密性の高いパスが設定されている可能性がある

## 備考

- 一般的なパス名: Temp, LocalAppData, AppData, ProgramData
- 関連コマンド: Set-DbatoolsPath, Get-DbatoolsConfigValue
- カスタムパス名も定義・参照可能

---

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

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

### 推奨読解順序

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

本機能は単純な文字列（パス）を返す。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbatoolsPath.ps1 | `public/Get-DbatoolsPath.ps1` | 16-18行目の.OUTPUTSセクションで出力仕様を確認 |

**読解のコツ**: 非常にシンプルなラッパー関数であることを理解する。

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

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

**主要処理フロー**:
1. **34-38行目**: パラメータ定義（Name必須、位置0）
2. **40-42行目**: processブロックのメイン処理

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbatoolsPath.ps1 | `public/Get-DbatoolsPath.ps1` | 41行目のメイン処理 |

**主要処理フロー**:
- **41行目**: `Get-DbatoolsConfigValue -FullName "Path.Managed.$Name"` で構成値取得

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

```
Get-DbatoolsPath
    │
    └─ Get-DbatoolsConfigValue
           │
           └─ -FullName "Path.Managed.{Name}"
                  │
                  └─ ConfigurationHost.Configurations
```

### データフロー図

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

Name ───────▶ "Path.Managed.{Name}" 構築
                    │
                    ▼
             Get-DbatoolsConfigValue
                    │
                    ▼
             ConfigurationHost.Configurations
                    │
                    ▼
             パス文字列 ───▶ パイプライン出力
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbatoolsPath.ps1 | `public/Get-DbatoolsPath.ps1` | ソース | メイン機能実装 |
| Get-DbatoolsConfigValue.ps1 | `public/Get-DbatoolsConfigValue.ps1` | ソース | 構成値取得（呼び出し先） |
| Set-DbatoolsPath.ps1 | `public/Set-DbatoolsPath.ps1` | ソース | パス設定（関連コマンド） |
