# 機能設計書 635-Get-DbaDbFileGrowth

## 概要

本ドキュメントは、dbatools PowerShellモジュールのGet-DbaDbFileGrowthコマンドレットの機能設計書である。このコマンドは、SQL Serverデータベースファイルの自動拡張設定と最大サイズ制限を取得し、成長設定の監査と問題特定を支援する。

### 本機能の処理概要

Get-DbaDbFileGrowthは、データファイルおよびログファイルの自動拡張構成を取得する。成長タイプ（パーセンテージまたは固定MB）、成長増分値、最大サイズ制限を含む情報を返す。これにより、DBAは大規模ファイルでのパーセンテージベース成長、無制限成長設定、自動拡張イベント中にパフォーマンス問題を引き起こす可能性のある不十分な成長増分など、問題のある成長設定を持つデータベースを迅速に特定できる。

**業務上の目的・背景**：不適切な自動拡張設定は、予期しないパフォーマンス低下やディスク領域の枯渇につながる可能性がある。パーセンテージベースの成長は大規模ファイルでは非常に大きな拡張を引き起こし、無制限成長はディスクを埋め尽くす恐れがある。このコマンドは、これらの問題を事前に発見し、適切な成長設定への変更を促進する。

**機能の利用シーン**：
- 自動拡張設定の定期監査
- パフォーマンス問題のトラブルシューティング（自動拡張による一時停止）
- ディスク容量計画（予想される拡張量の把握）
- 成長設定の標準化確認
- セキュリティ/コンプライアンス監査

**主要な処理内容**：
1. Get-DbaDbFileを内部呼び出しして詳細なファイル情報を取得
2. 成長関連プロパティを抽出
3. Select-DefaultViewで成長設定に特化したプロパティを表示

**関連システム・外部連携**：Get-DbaDbFile（内部依存）、Set-DbaDbFileGrowth（成長設定変更）、Get-DbaDatabase等と連携

**権限による制御**：Get-DbaDbFileと同様の権限が必要

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | コマンドライン/PowerShellコンソール | 主画面 | コマンド実行および結果表示 |

## 機能種別

データ取得 / 設定監査

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| SqlInstance | DbaInstanceParameter[] | No | 対象SQL Serverインスタンス。複数指定可 | なし |
| SqlCredential | PSCredential | No | 代替認証情報 | Windows認証、SQL認証、AD認証対応 |
| Database | string[] | No | 対象データベース。ワイルドカード対応 | なし |
| InputObject | Microsoft.SqlServer.Management.Smo.Database[] | No | Get-DbaDatabase等からのパイプライン入力 | SMO Databaseオブジェクト |
| EnableException | switch | No | 例外を有効にして詳細なエラー情報を取得 | なし |

### 入力データソース

- 内部でGet-DbaDbFileを呼び出し、すべてのバウンドパラメータを渡す
- Get-DbaDbFileが返す詳細なファイル情報から成長関連プロパティを抽出

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ComputerName | String | SQL Serverインスタンスのコンピュータ名 |
| InstanceName | String | SQL Serverインスタンス名 |
| SqlInstance | String | 完全なSQL Serverインスタンス名 |
| Database | String | データベース名 |
| MaxSize | dbasize | 最大サイズ |
| GrowthType | String | 成長タイプ（Percent/kb） |
| Growth | Int | 成長増分値（GrowthTypeに依存） |
| File | String | 論理ファイル名（LogicalNameのエイリアス） |
| FileName | String | 物理ファイルパス（PhysicalNameのエイリアス） |
| State | String | ファイル状態 |

### 出力先

PowerShellパイプライン（Get-DbaDbFileの出力をSelect-DefaultViewで成長関連プロパティに限定）

## 処理フロー

### 処理シーケンス

```
1. パラメータ検証
   └─ Database指定時にSqlInstance未指定ならエラー

2. Get-DbaDbFile呼び出し
   └─ $PSBoundParametersを使用して全パラメータを渡す

3. 結果処理
   └─ 各ファイル情報に対してSelect-DefaultView適用
   └─ 成長関連プロパティのみを表示

4. 出力
   └─ パイプラインに出力
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{Database指定?}
    B -->|Yes| C{SqlInstance指定?}
    C -->|No| D[エラー出力・終了]
    C -->|Yes| E[Get-DbaDbFile呼び出し]
    B -->|No| E
    E --> F[結果ループ]
    F --> G[Select-DefaultView適用]
    G --> H[出力]
    H --> I{次の結果?}
    I -->|Yes| F
    I -->|No| J[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | パラメータ依存性 | Database指定時はSqlInstance必須 | Database指定時 |
| BR-002 | 委譲パターン | 全パラメータをGet-DbaDbFileに委譲 | 常時 |
| BR-003 | エイリアス表示 | LogicalNameはFile、PhysicalNameはFileNameとして表示 | 結果出力時 |

### 計算ロジック

本コマンド自体には計算ロジックなし。Get-DbaDbFileの計算結果をそのまま使用。

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

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

Get-DbaDbFileに委譲するため、Get-DbaDbFileのデータベース操作仕様を参照。

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| (Get-DbaDbFile経由) | sys.database_files等 | SELECT | ファイル情報取得 |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | ParameterError | Database指定時にSqlInstance未指定 | Stop-Functionでエラー出力 |

### リトライ仕様

リトライ機能なし。Get-DbaDbFileのエラー処理に依存。

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

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

## パフォーマンス要件

- Get-DbaDbFileのパフォーマンス特性を継承
- 成長設定のみを確認する場合、Get-DbaDbFileよりも軽量なコマンドとして設計されているわけではない

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

- Get-DbaDbFileと同様の権限が必要
- SqlCredentialパラメータでSQL認証、Windows認証、AD認証をサポート

## 備考

- 本コマンドはGet-DbaDbFileのラッパーとして実装されており、成長関連情報に特化した表示を提供
- 詳細なファイル情報が必要な場合はGet-DbaDbFileを直接使用
- Set-DbaDbFileGrowthと組み合わせて成長設定の監査と修正ワークフローを構築可能

---

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

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

### 推奨読解順序

#### Step 1: 全体構造を理解する

コードは非常にシンプルで、Get-DbaDbFileのラッパーである。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaDbFileGrowth.ps1 | `public/Get-DbaDbFileGrowth.ps1` | 全体構造（124行のみ） |

**読解のコツ**: 本コマンドはGet-DbaDbFileを内部呼び出しし、Select-DefaultViewで表示プロパティを変更するだけのシンプルなラッパー。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaDbFileGrowth.ps1 | `public/Get-DbaDbFileGrowth.ps1` | 113-123行目のprocessブロック |

**主要処理フロー**:
1. **114-117行目**: Database指定時のSqlInstance必須チェック
2. **119行目**: Get-DbaDbFile呼び出し（$PSBoundParameters使用）
3. **120-122行目**: 結果ループとSelect-DefaultView適用

#### Step 3: Select-DefaultViewの動作を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaDbFileGrowth.ps1 | `public/Get-DbaDbFileGrowth.ps1` | 121行目のSelect-DefaultView |

**主要処理フロー**:
- **121行目**: エイリアス構文（'LogicalName as File'、'PhysicalName as FileName'）で表示名を変更

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

```
Get-DbaDbFileGrowth
    │
    ├─ Test-Bound
    │      └─ Database/SqlInstanceパラメータ確認
    │
    ├─ Get-DbaDbFile
    │      ├─ Get-DbaDatabase
    │      └─ T-SQLクエリ実行
    │
    └─ Select-DefaultView
           └─ 出力プロパティフィルタリング（エイリアス付き）
```

### データフロー図

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

SqlInstance/Database  ───▶ Get-DbaDbFile
                                 │
                                 ▼
                           全ファイル情報
                                 │
                                 ▼
                           Select-DefaultView        ───▶ 成長関連プロパティのみ
                           (MaxSize, GrowthType,          - MaxSize
                            Growth, File, FileName,       - GrowthType
                            State)                        - Growth
                                                         - File
                                                         - FileName
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaDbFileGrowth.ps1 | `public/Get-DbaDbFileGrowth.ps1` | ソース | メイン処理ロジック |
| Get-DbaDbFile.ps1 | `public/Get-DbaDbFile.ps1` | ソース | 内部依存（ファイル情報取得） |
| Set-DbaDbFileGrowth.ps1 | `public/Set-DbaDbFileGrowth.ps1` | ソース | 関連コマンド（成長設定変更） |
| Get-DbaDatabase.ps1 | `public/Get-DbaDatabase.ps1` | ソース | 内部依存（Get-DbaDbFile経由） |
