# 機能設計書 66-Get-DbaDbccHelp

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおける `Get-DbaDbccHelp` コマンドレットの機能設計書です。DBCC HELPコマンドを使用してDBCCコマンドの構文ヘルプとパラメータ情報を取得する機能について、その仕様と実装詳細を記述します。

### 本機能の処理概要

`Get-DbaDbccHelp` は、SQL ServerのDBCC HELPコマンドを実行し、指定されたDBCCコマンドの構文、パラメータ、使用方法に関するヘルプ情報を取得するコマンドレットです。ドキュメントを参照することなく、DBCCコマンドの正確な構文を確認できます。

**業務上の目的・背景**：DBCCコマンドは多数存在し、それぞれ固有の構文とパラメータを持っています。CHECKDB、CHECKTABLE、SHRINKFILEなど複雑なコマンドの正確な構文を記憶することは困難です。本機能により、DBAはSQL Server Management Studioや外部ドキュメントを開くことなく、PowerShell環境から直接ヘルプを参照できます。

**機能の利用シーン**：
- メンテナンス作業前のDBCCコマンド構文確認
- 複雑なDBCCコマンドのオプション確認
- 未ドキュメント化DBCCコマンドの調査（IncludeUndocumented使用時）
- トラブルシューティング時のコマンド確認

**主要な処理内容**：
1. SQL Serverインスタンスへの接続（MinimumVersion 9 = SQL Server 2005以上）
2. 未ドキュメント化コマンドのヘルプ有効化（IncludeUndocumented指定時）
3. DBCC HELPコマンドの実行
4. 結果を構造化オブジェクトとして出力

**関連システム・外部連携**：
- SQL Server インスタンス（SQL Server 2005以上）

**権限による制御**：
- DBCC HELPの実行には特別な権限は不要
- IncludeUndocumented使用時はDBCC TRACEONのためのALTER SETTINGS権限が必要

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | CLI | 主画面 | PowerShellコマンドラインからの直接実行 |

## 機能種別

ヘルプ情報取得（読み取り専用）

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| SqlInstance | DbaInstanceParameter[] | Yes | 接続先SQL Serverインスタンス | Mandatory, パイプライン入力可 |
| SqlCredential | PSCredential | No | 認証用資格情報 | - |
| Statement | string | Yes | ヘルプを取得するDBCCコマンド名（DBCC以降の部分） | Test-Boundでチェック |
| IncludeUndocumented | switch | No | 未ドキュメント化コマンドのヘルプを有効化 | - |
| EnableException | switch | No | 例外を有効にするフラグ | - |

### 入力データソース

- SQL Server インスタンスへの接続

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| Operation | string | Statementパラメータで指定されたDBCCコマンド名 |
| Cmd | string | 実行されたDBCCコマンド（DBCC HELP(...)） |
| Output | DataTable/object | DBCCヘルプの出力結果 |

### 出力先

PowerShellパイプライン（PSCustomObject）

## 処理フロー

### 処理シーケンス

```
1. パラメータ検証
   └─ Statementパラメータの必須チェック
2. クエリ構築
   └─ IncludeUndocumented時はDBCC TRACEON(2588)を追加
   └─ DBCC HELP(Statement) WITH NO_INFOMSGS
3. インスタンス接続
   └─ Connect-DbaInstance -MinimumVersion 9
4. クエリ実行
   └─ Invoke-DbaQuery -MessagesToOutput
5. 結果出力
   └─ PSCustomObjectとして出力
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{Statement指定?}
    B -->|No| C[Stop-Function]
    B -->|Yes| D[クエリ構築開始]
    D --> E{IncludeUndocumented?}
    E -->|Yes| F[DBCC TRACEON 2588追加]
    E -->|No| G[DBCC HELPのみ]
    F --> H[インスタンスループ開始]
    G --> H
    H --> I[Connect-DbaInstance MinimumVersion 9]
    I --> J{接続成功?}
    J -->|No| K[Stop-Function]
    J -->|Yes| L[Invoke-DbaQuery実行]
    L --> M[PSCustomObject出力]
    M --> N{次のインスタンス?}
    N -->|Yes| H
    N -->|No| O[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-01 | Statement必須 | Statementパラメータは必須 | 常時 |
| BR-02 | 最小バージョン | SQL Server 2005（バージョン9）以上が必要 | 常時 |
| BR-03 | トレースフラグ2588 | 未ドキュメント化コマンドのヘルプにはトレースフラグ2588が必要 | IncludeUndocumented指定時 |

### 計算ロジック

該当なし

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

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

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| DBCC HELP | なし | 読み取り | ヘルプ情報の取得 |
| DBCC TRACEON 2588 | なし | セッション設定 | 未ドキュメント化ヘルプの有効化（セッション限定） |

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

データベースへの書き込みは行いません。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | パラメータ不足 | Statementが指定されていない | Statementを指定 |
| - | バージョン不足 | SQL Server 2000以前に接続 | SQL Server 2005以上を使用 |
| - | 接続失敗 | SQL Serverへの接続に失敗 | 接続情報を確認 |
| - | コマンド不明 | 指定されたDBCCコマンドが存在しない | コマンド名を確認 |

### リトライ仕様

リトライ処理なし

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

該当なし（読み取り専用操作）

## パフォーマンス要件

- 軽量なヘルプ取得コマンドのため、即座に完了

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

- DBCC HELP自体は特別な権限不要
- DBCC TRACEONにはALTER SETTINGS権限が必要
- セッション限定のトレースフラグのため、他のセッションへの影響なし

## 備考

- 未ドキュメント化コマンドは本番環境での使用は推奨されない
- トレースフラグ2588はセッション限定で有効化される

---

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

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

### 推奨読解順序

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

出力されるPSCustomObjectの構造を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaDbccHelp.ps1 | `public/Get-DbaDbccHelp.ps1` | 111-115行目: 出力オブジェクトの構造 |

**読解のコツ**: OutputプロパティにはDBCC HELPの生出力が含まれる。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaDbccHelp.ps1 | `public/Get-DbaDbccHelp.ps1` | 69-77行目: パラメータ定義 |

**主要処理フロー**:
1. **69-77行目**: パラメータ定義
2. **78-91行目**: begin ブロック - パラメータ検証とクエリ構築
3. **92-118行目**: process ブロック - メイン処理

#### Step 3: クエリ構築ロジックを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaDbccHelp.ps1 | `public/Get-DbaDbccHelp.ps1` | beginブロック |

**主要処理フロー**:
- **79-82行目**: Statement必須チェック
- **83-87行目**: IncludeUndocumented時のTRACEON追加
- **89-90行目**: DBCC HELPコマンドの構築

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

```
Get-DbaDbccHelp (public/Get-DbaDbccHelp.ps1)
    │
    ├─ Connect-DbaInstance -MinimumVersion 9
    │      └─ SQL Server接続（2005以上必須）
    │
    └─ Invoke-DbaQuery -MessagesToOutput
           └─ DBCC TRACEON(2588) (IncludeUndocumented時)
           └─ DBCC HELP(Statement) WITH NO_INFOMSGS
```

### データフロー図

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

SqlInstance ──────▶ Connect-DbaInstance ──┐
                   (MinimumVersion 9)     │
                                          │
Statement ────────▶ クエリ構築 ───────────┤
                                          │
IncludeUndocumented ──▶ TRACEON追加? ────┘
                                          │
                                          ▼
                                   Invoke-DbaQuery
                                          │
                                          ▼
                                   PSCustomObject
                                   (Operation, Cmd, Output)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaDbccHelp.ps1 | `public/Get-DbaDbccHelp.ps1` | ソース | メイン実装ファイル |
| Get-DbaDbccHelp.Tests.ps1 | `tests/Get-DbaDbccHelp.Tests.ps1` | テスト | 単体テスト |
