# 画面設計書 211-MultiTool

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおける「MultiTool」機能（Install-DbaMultiTool）の画面設計書です。DBA MultiToolは、データベースドキュメント作成、インデックス最適化、管理タスクのための5つの重要なT-SQLストアドプロシージャをSQL Serverにインストールする機能です。

### 本画面の処理概要

**業務上の目的・背景**：SQL Server管理者は、データベースのドキュメント作成、インデックス最適化、ログインスクリプトの作成などの一般的なDBAタスクを効率化するツールを必要としています。DBA MultiToolは、これらのタスクを支援する5つのストアドプロシージャ（sp_helpme、sp_doc、sp_sizeoptimiser、sp_estindex、sp_help_revlogin）を提供し、手動でのT-SQLスクリプト作成の手間を削減します。データベースマイグレーション、コンプライアンスレポート、キャパシティプランニング、一般的な管理ドキュメント作成において特に価値を発揮します。

**画面へのアクセス方法**：PowerShellコンソールから `Install-DbaMultiTool` コマンドを実行します。パイプライン入力として複数のSQLインスタンスを渡すことも可能です。

**主要な操作・処理内容**：
1. GitHubからDBA MultiToolの最新版をダウンロードしてローカルキャッシュを更新
2. SQL Serverインスタンスへの接続（最低バージョン SQL Server 2012）
3. 指定されたデータベースへの5つのストアドプロシージャのインストール
   - sp_helpme: sp_helpの拡張版でオブジェクト詳細情報を提供
   - sp_doc: 包括的なデータベースドキュメントを生成
   - sp_sizeoptimiser: データベースファイルサイズの最適化を分析・推奨
   - sp_estindex: インデックス圧縮による潜在的なストレージ節約を推定
   - sp_help_revlogin: ログインを元のSIDとパスワードで再作成するスクリプトを生成
4. インストール結果のステータス出力（Installed/Updated/Error）

**画面遷移**：CLIコマンドのため画面遷移はありません。Save-DbaCommunitySoftwareを内部的に呼び出してソフトウェアをダウンロードします。

**権限による表示制御**：SQL Serverへの接続には適切な認証（Windows認証、SQL Server認証、Active Directory認証）が必要です。ストアドプロシージャのインストールにはデータベースへの書き込み権限が必要です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 321 | Install-DbaMultiTool | 主機能 | MultiToolのインストール |
| 213 | Save-DbaCommunitySoftware | 補助機能 | ダウンロードとキャッシュ管理 |

## 画面種別

コマンドライン（CLI）実行画面

## URL/ルーティング

```powershell
Install-DbaMultiTool -SqlInstance <インスタンス名> [-Database <データベース名>]
```

## 入出力項目

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|------|-------------|------|
| SqlInstance | DbaInstanceParameter[] | Yes | - | ターゲットSQL Serverインスタンス |
| SqlCredential | PSCredential | No | - | 代替認証情報 |
| Database | object | No | master | インストール先データベース |
| Branch | string | No | main | ダウンロードするGitHubブランチ（main/development） |
| LocalFile | string | No | - | ローカルzipファイルパス |
| Force | switch | No | $false | キャッシュを無視して強制ダウンロード |
| EnableException | switch | No | $false | 例外を有効化 |

## 表示項目

| プロパティ名 | 型 | 説明 |
|-------------|-----|------|
| ComputerName | string | SQL Serverホストコンピュータ名 |
| InstanceName | string | SQL Serverインスタンス名 |
| SqlInstance | string | 完全なSQL Serverインスタンス名 |
| Database | string | インストール先データベース名 |
| Name | string | インストールされたストアドプロシージャ名 |
| Status | string | インストールステータス（Installed/Updated/Error） |

## イベント仕様

### 1-コマンド実行時

1. Forceパラメータまたはキャッシュが存在しない場合、Save-DbaCommunitySoftwareを呼び出してDBA MultiToolをダウンロード
2. 各SQL Serverインスタンスに対してConnect-DbaInstanceで接続（最低バージョン11 = SQL Server 2012）
3. 既存のストアドプロシージャを確認
4. 5つのSQLスクリプト（sp_helpme.sql, sp_doc.sql, sp_sizeoptimiser.sql, sp_estindex.sql, sp_help_revlogin.sql）を順に実行
5. 各スクリプトの実行結果に応じてステータス（Installed/Updated/Error）を設定
6. 結果オブジェクトを出力

## データベース更新仕様

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| スクリプト実行 | sys.procedures | INSERT/UPDATE | ストアドプロシージャの作成または更新 |

### テーブル別更新項目詳細

#### sys.procedures

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| INSERT/UPDATE | name | sp_helpme, sp_doc, sp_sizeoptimiser, sp_estindex, sp_help_revlogin | 5つのストアドプロシージャ |

## メッセージ仕様

| 種別 | メッセージ | 発生条件 |
|------|----------|---------|
| 警告 | Failed to update local cached copy | ダウンロード失敗時 |
| エラー | Failure | 接続エラー時 |
| 警告 | Could not execute at least one portion of {scriptName} in {Database} on {instance} | スクリプト実行エラー時 |
| Verbose | Starting installing/updating DbaMultiTool stored procedures in {Database} on {instance} | インストール開始時 |
| Verbose | Finished installing/updating DbaMultiTool stored procedures in {Database} on {instance} | インストール完了時 |

## 例外処理

| 例外条件 | 動作 |
|---------|------|
| 接続エラー | Stop-Functionでエラーを報告し、次のインスタンスに継続 |
| ダウンロード失敗 | Stop-Functionでエラーを報告し、処理を中断 |
| スクリプト実行エラー | 警告メッセージを出力し、StatusをErrorに設定 |

## 備考

- DBA MultiToolはSQL Server 2012以降でサポートされています
- developmentブランチは本番環境での使用は推奨されません
- インターネットアクセスがない環境ではLocalFileパラメータを使用してください

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Install-DbaMultiTool.ps1 | `public/Install-DbaMultiTool.ps1` | 出力オブジェクトの構造（ComputerName, InstanceName, SqlInstance, Database, Name, Status） |

**読解のコツ**: PowerShellのPSCustomObjectでプロパティを定義している箇所（行174-181）を確認してください。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Install-DbaMultiTool.ps1 | `public/Install-DbaMultiTool.ps1` | コマンドのパラメータ定義と処理フロー |

**主要処理フロー**:
1. **行131-145**: beginブロックでローカルキャッシュの確認とダウンロード
2. **行148-156**: processブロックでSQL Serverへの接続
3. **行157-199**: ShouldProcessによるインストール処理

#### Step 3: 依存機能を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Save-DbaCommunitySoftware.ps1 | `public/Save-DbaCommunitySoftware.ps1` | GitHubからのダウンロードとキャッシュ管理 |

**主要処理フロー**:
- **行197-206**: DbaMultiTool固有のURL生成とディレクトリ設定

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

```
Install-DbaMultiTool
    │
    ├─ Save-DbaCommunitySoftware
    │      └─ Invoke-TlsWebRequest (GitHubからダウンロード)
    │
    ├─ Connect-DbaInstance
    │      └─ SQL Server接続確立
    │
    ├─ Invoke-DbaQuery
    │      └─ SQLスクリプト実行
    │
    └─ PSCustomObject出力
```

### データフロー図

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

SqlInstance ───────▶ Connect-DbaInstance ───────▶ Server SMO Object
      │
      ▼
GitHub/LocalFile ──▶ Save-DbaCommunitySoftware ──▶ ローカルキャッシュ
      │
      ▼
SQLスクリプト ─────▶ Invoke-DbaQuery ─────────────▶ sys.procedures更新
      │
      ▼
                    PSCustomObject生成 ─────────▶ インストール結果出力
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Install-DbaMultiTool.ps1 | `public/Install-DbaMultiTool.ps1` | ソース | メインコマンド実装 |
| Save-DbaCommunitySoftware.ps1 | `public/Save-DbaCommunitySoftware.ps1` | ソース | ダウンロード機能 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続 |
| Invoke-DbaQuery.ps1 | `public/Invoke-DbaQuery.ps1` | ソース | SQLクエリ実行 |
