# 機能設計書 35-Get-DbaBackupDevice

## 概要

本ドキュメントは、dbatools PowerShellモジュールの`Get-DbaBackupDevice`コマンドレットに関する機能設計書です。このコマンドは、SQL Serverインスタンスに構成されたバックアップデバイスを取得し、インベントリと管理を支援します。

### 本機能の処理概要

Get-DbaBackupDeviceは、SQL Serverインスタンスに登録されている全てのバックアップデバイス（ディスク、テープ、URL）を取得します。デバイスの論理名、タイプ、物理ロケーション、設定情報を含む詳細な情報を返します。

**業務上の目的・背景**：バックアップインフラストラクチャの監査、ドキュメント化、およびコンプライアンス対応において、現在構成されているバックアップデバイスの一覧を把握することは重要です。この機能により、複数のSQL Serverインスタンスにわたるバックアップデバイス構成を効率的に収集・分析できます。

**機能の利用シーン**：
- 環境全体のバックアップデバイス構成の棚卸し
- バックアップパスのアクセス可能性確認
- ディザスタリカバリドキュメントの作成
- 新環境へのバックアップデバイス移行計画の立案

**主要な処理内容**：
1. 指定されたSQL Serverインスタンスへの接続
2. SMO BackupDevicesコレクションの取得
3. ComputerName、InstanceName、SqlInstanceプロパティの追加
4. Select-DefaultViewによる整形出力

**関連システム・外部連携**：
- SQL Server Management Objects (SMO)
- Copy-DbaBackupDevice（バックアップデバイスの移行先）

**権限による制御**：msdbへの読み取りアクセス権限が必要です。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 24 | バックアップ管理 | 補助機能 | バックアップデバイスの取得 |

## 機能種別

データ取得処理 / 参照クエリ

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| SqlInstance | DbaInstanceParameter[] | Yes | SQL Serverインスタンス（複数可） | パイプライン入力対応 |
| SqlCredential | PSCredential | No | 接続資格情報 | - |
| EnableException | switch | No | 例外処理を有効化 | - |

### 入力データソース

- SQL Server SMO BackupDevicesコレクション

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ComputerName | string | SQL Serverホスト名 |
| InstanceName | string | インスタンス名 |
| SqlInstance | string | 完全インスタンス名 |
| Name | string | バックアップデバイス論理名 |
| BackupDeviceType | string | デバイスタイプ（Disk/Tape/Url） |
| PhysicalLocation | string | 物理パスまたはURL |
| SkipTapeLabel | bool | テープラベル検証スキップ |

### 出力先

- PowerShellパイプライン（Microsoft.SqlServer.Management.Smo.BackupDevice）
- Select-DefaultViewで整形された表示

## 処理フロー

### 処理シーケンス

```
1. process ブロック（各SqlInstanceに対して）
   └─ Connect-DbaInstanceでSQL Server接続

2. 各バックアップデバイスに対して
   └─ ComputerNameプロパティ追加
   └─ InstanceNameプロパティ追加
   └─ SqlInstanceプロパティ追加

3. Select-DefaultViewで出力整形
   └─ ComputerName, InstanceName, SqlInstance, Name,
      BackupDeviceType, PhysicalLocation, SkipTapeLabel
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[foreach SqlInstance]
    B --> C[Connect-DbaInstance]
    C --> D{接続成功?}
    D -->|No| E[Stop-Function]
    E --> B
    D -->|Yes| F[foreach BackupDevice]
    F --> G[Add-Member ComputerName]
    G --> H[Add-Member InstanceName]
    H --> I[Add-Member SqlInstance]
    I --> J[Select-DefaultView出力]
    J --> F
    F --> B
    B --> K[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-01 | SMO使用 | BackupDevicesコレクションをSMO経由で取得 | 常時 |
| BR-02 | プロパティ追加 | ComputerName/InstanceName/SqlInstanceを動的追加 | 常時 |
| BR-03 | パイプライン対応 | 複数インスタンスの同時処理 | SqlInstance配列指定時 |

### 計算ロジック

特になし

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

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

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| デバイス取得 | sys.backup_devices | SELECT | バックアップデバイス定義取得 |

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

SMO経由で取得するため、直接T-SQLは実行しません。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | ConnectionError | インスタンス接続失敗 | 接続情報確認 |

### リトライ仕様

リトライ機能は実装されていません。-Continueでエラー継続。

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

読み取り専用操作のためトランザクションは使用しません。

## パフォーマンス要件

軽量な読み取り操作のため、パフォーマンス要件は低い。

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

- msdbへの読み取り権限が必要
- SqlCredentialで認証情報を安全に渡す

## 備考

シンプルな取得コマンドで、SMO BackupDeviceオブジェクトをそのまま返します。

---

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

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

### 推奨読解順序

#### Step 1: パラメータ定義を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaBackupDevice.ps1 | `public/Get-DbaBackupDevice.ps1` | パラメータ定義（68-74行目）を確認 |

**読解のコツ**: シンプルなパラメータ構成で、SqlInstanceのパイプライン入力に対応。

#### Step 2: process ブロックのメイン処理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaBackupDevice.ps1 | `public/Get-DbaBackupDevice.ps1` | processブロック（76-92行目）でのデバイス取得 |

**主要処理フロー**:
1. **77-82行目**: Connect-DbaInstanceでSQL Server接続
2. **84-87行目**: Add-Memberで追加プロパティ設定
3. **89行目**: Select-DefaultViewで出力整形

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

```
Get-DbaBackupDevice
    │
    └─ process ブロック (foreach $instance)
           │
           ├─ Connect-DbaInstance
           │      └─ SMO Server オブジェクト取得
           │
           ├─ foreach $backupDevice in $server.BackupDevices
           │      │
           │      ├─ Add-Member ComputerName
           │      ├─ Add-Member InstanceName
           │      └─ Add-Member SqlInstance
           │
           └─ Select-DefaultView
                  └─ 出力プロパティ選択
```

### データフロー図

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

$SqlInstance ──────────▶ Connect-DbaInstance ─────────▶ $server
                                 │
$server.BackupDevices ─▶ Add-Member (3プロパティ) ──▶ 拡張デバイスオブジェクト
                                 │
                         Select-DefaultView
                                 │
                                 └─────────────────────▶ BackupDevice[]
                                                         (整形出力)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaBackupDevice.ps1 | `public/Get-DbaBackupDevice.ps1` | ソース | メイン関数実装 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続 |
| Select-DefaultView.ps1 | `internal/functions/Select-DefaultView.ps1` | ソース | 出力整形 |
| Copy-DbaBackupDevice.ps1 | `public/Copy-DbaBackupDevice.ps1` | ソース | デバイスコピー（関連機能） |
