# 画面設計書 174-非推奨機能

## 概要

本ドキュメントは、dbatools PowerShellモジュールの `Get-DbaDeprecatedFeature` コマンドの機能仕様を定義した画面設計書です。

### 本画面の処理概要

本コマンドは、SQL Serverインスタンスで使用されている非推奨機能とその使用回数をパフォーマンスカウンターから取得します。

**業務上の目的・背景**：SQL Serverのアップグレード計画において、非推奨機能の使用状況を把握することは重要です。非推奨機能は将来のバージョンで削除される可能性があり、アップグレード後にアプリケーション障害が発生するリスクがあります。本コマンドを使用することで、DBAは現在使用中の非推奨機能を特定し、アップグレード前にコードの修正優先度を決定できます。

**画面へのアクセス方法**：PowerShellコンソールまたはスクリプトから `Get-DbaDeprecatedFeature` コマンドを実行します。SQLインスタンスを必須パラメータとして指定します。

**主要な操作・処理内容**：
1. 指定されたSQL Serverインスタンスに接続（SQL Server 2005以上が必要）
2. sys.dm_os_performance_counters動的管理ビューをクエリ
3. 「SQL%Deprecated Features%」オブジェクト名でフィルタリング
4. 使用回数が0より大きい機能のみを取得
5. 結果をPSCustomObjectとしてパイプラインに出力

**画面遷移**：本コマンドは単独実行可能です。出力結果は `Format-Table`、`Export-Csv` などの他のPowerShellコマンドにパイプで渡すことができます。

**権限による表示制御**：sys.dm_os_performance_counters動的管理ビューへのVIEW SERVER STATE権限が必要です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 117 | Get-DbaDeprecatedFeature | 主機能 | 非推奨機能の取得 |

## 画面種別

コマンドライン出力（一覧表示）

## URL/ルーティング

PowerShellコマンド: `Get-DbaDeprecatedFeature`

## 入出力項目

| パラメータ名 | 型 | 必須 | 説明 |
|-------------|---|------|------|
| SqlInstance | DbaInstanceParameter[] | Yes | 対象SQL Serverインスタンス |
| SqlCredential | PSCredential | No | 認証用資格情報 |
| EnableException | switch | No | 例外処理モードの有効化 |

## 表示項目

| 項目名 | 型 | 説明 |
|--------|---|------|
| ComputerName | string | SQL Serverホストのコンピュータ名 |
| InstanceName | string | SQL Serverインスタンス名 |
| SqlInstance | string | 完全なSQL Serverインスタンス名 |
| DeprecatedFeature | string | 非推奨機能の名前 |
| UsageCount | int | 機能の使用回数 |

## イベント仕様

### 1-コマンド実行

1. SqlInstanceパラメータを検証
2. 指定されたインスタンスに接続（MinimumVersion 9 = SQL Server 2005以上）
3. sys.dm_os_performance_counters に対してSELECTクエリを実行
   - object_name LIKE '%SQL%Deprecated Features%' でフィルタリング
   - cntr_value > 0 で使用された機能のみ取得
4. 各行に対してPSCustomObjectを生成しパイプラインに出力

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

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| コマンド実行 | sys.dm_os_performance_counters | SELECT | パフォーマンスカウンター情報の取得 |

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

本コマンドは読み取り専用であり、データベースの更新は行いません。

## メッセージ仕様

| メッセージID | 種別 | 条件 | メッセージ内容 |
|-------------|------|------|--------------|
| M001 | Error | 接続失敗 | "Failure" |

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| 接続失敗 | Stop-Functionでエラーを出力し、次のインスタンスに継続 |
| SQL Server 2005未満 | Connect-DbaInstanceのMinimumVersionで接続拒否 |

## 備考

- 使用回数が0の機能は出力されません
- 非推奨機能の使用回数はSQL Serverインスタンスの再起動でリセットされます
- 詳細情報: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-deprecated-features-object

---

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

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

### 推奨読解順序

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

出力オブジェクトのプロパティ構成を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaDeprecatedFeature.ps1 | `public/Get-DbaDeprecatedFeature.ps1` | 80-86行目：出力オブジェクトのプロパティ定義 |

**読解のコツ**: シンプルな構造で、パフォーマンスカウンターの値をそのまま出力しています。

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

processブロックの処理フローを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaDeprecatedFeature.ps1 | `public/Get-DbaDeprecatedFeature.ps1` | 70-89行目：processブロック |

**主要処理フロー**:
1. **71-76行目**: インスタンスへの接続（SQL Server 2005以上必須）
2. **78行目**: SQLクエリ実行
3. **79-87行目**: 結果のオブジェクト変換と出力

#### Step 3: SQLクエリを理解する

パフォーマンスカウンターから非推奨機能を取得するクエリを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaDeprecatedFeature.ps1 | `public/Get-DbaDeprecatedFeature.ps1` | 78行目：クエリ本体 |

**クエリ解説**:
```sql
SELECT LTRIM(RTRIM(instance_name)) AS DeprecatedFeature,
       cntr_value AS UsageCount
FROM sys.dm_os_performance_counters
WHERE object_name LIKE '%SQL%Deprecated Features%'
  AND cntr_value > 0
```
- instance_name: 非推奨機能の名前
- cntr_value: 使用回数（カウンター値）
- LTRIM/RTRIM: 前後の空白を除去

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

```
Get-DbaDeprecatedFeature
    |
    +-- Connect-DbaInstance (接続、MinimumVersion=9)
    |
    +-- $server.Query() (SQLクエリ実行)
    |
    +-- PSCustomObject (結果オブジェクト生成)
```

### データフロー図

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

SqlInstance   ---> Connect-DbaInstance ---> $server
                        |
                        v
                   Query: SELECT from
                   sys.dm_os_performance_counters
                   (Deprecated Features)
                        |
                        v
                   foreach ($feature)      ---> PSCustomObject
                                                (整形された結果)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaDeprecatedFeature.ps1 | `public/Get-DbaDeprecatedFeature.ps1` | ソース | メイン関数実装 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続処理 |
