# 機能設計書 180-Measure-DbatoolsImport

## 概要

本ドキュメントは、dbatools PowerShellモジュールのMeasure-DbatoolsImport関数の機能設計を定義する。dbatoolsモジュールのインポート操作に関する詳細なタイミングメトリクスを測定・表示する機能を提供する。

### 本機能の処理概要

**業務上の目的・背景**：dbatoolsモジュールのインポートプロセス中に収集されたパフォーマンスデータを返し、各インポートステップの所要時間を表示する。モジュールの読み込みが遅い場合のトラブルシューティングを支援し、どのコンポーネントの初期化に最も時間がかかっているかを特定できる。dbatoolsライブラリ、型エイリアス、内部コマンド、外部コマンド、その他の初期化ステップの読み込み時間が含まれる。

**機能の利用シーン**：
- モジュールインポートが遅い場合のトラブルシューティング
- パフォーマンス最適化の分析
- モジュール初期化プロセスの理解
- インポート時間の監視

**主要な処理内容**：
1. `$script:dbatools_ImportPerformance` 変数から計測データを取得
2. Duration が '00:00:00' でないエントリをフィルタリング
3. 結果をパイプラインに出力

**関連システム・外部連携**：dbatools.psm1モジュールファイルで設定される`$script:dbatools_ImportPerformance`変数に依存。

**権限による制御**：特別な権限は不要。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | - | - | 画面機能マッピングに登録なし |

## 機能種別

診断 / パフォーマンス測定

## 入力仕様

### 入力パラメータ

なし（パラメータを取らない関数）

### 入力データソース

- `$script:dbatools_ImportPerformance` 変数（モジュールインポート時に設定）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| Name | string | 初期化ステップの名前 |
| Duration | TimeSpan | ステップの所要時間 |

### 出力先

- 標準出力（パイプライン）にPSCustomObjectを出力

## 処理フロー

### 処理シーケンス

```
1. $script:dbatools_ImportPerformance変数を参照

2. Duration が '00:00:00' でないエントリをフィルタリング
   └─ Where-Object Duration -ne '00:00:00'

3. 結果をパイプラインに出力
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[$script:dbatools_ImportPerformance参照]
    B --> C{各エントリ}
    C -->|次のEntry| D{Duration != 00:00:00?}
    D -->|Yes| E[出力]
    D -->|No| C
    E --> C
    C -->|完了| F[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-180-01 | ゼロ除外 | Duration が 00:00:00 のエントリは除外 | 常時 |
| BR-180-02 | モジュール依存 | Import-Module dbatools 後にのみ有効なデータ | 常時 |

### 計算ロジック

特になし。フィルタリングのみ。

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

データベース操作なし。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | データなし | Import-Module前に実行 | Import-Module dbatools を先に実行 |

### リトライ仕様

リトライ機能なし。

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

トランザクション処理なし。

## パフォーマンス要件

- 軽量な変数参照のみのため即時完了

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

- 特別なセキュリティ考慮なし

## 備考

- dbatoolsモジュールの開発・デバッグ目的
- $script:dbatools_ImportPerformance はdbatools.psm1で設定

---

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

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

### 推奨読解順序

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

出力オブジェクトと$script:dbatools_ImportPerformance変数の構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Measure-DbatoolsImport.ps1 | `public/Measure-DbatoolsImport.ps1` | 20-28行目: OUTPUTS説明 |

**読解のコツ**: Name（ステップ名）とDuration（所要時間）の2プロパティのみのシンプルな構造。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Measure-DbatoolsImport.ps1 | `public/Measure-DbatoolsImport.ps1` | 39行目: 関数本体（1行のみ） |

**主要処理フロー**:
- **39行目**: `$script:dbatools_ImportPerformance | Where-Object Duration -ne '00:00:00'`

#### Step 3: データソースを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | dbatools.psm1 | `dbatools.psm1` | $script:dbatools_ImportPerformance変数の設定箇所 |

**主要処理フロー**:
- モジュールインポート中の各ステップで計測データを追加

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

```
Measure-DbatoolsImport
    │
    └─ $script:dbatools_ImportPerformance
           │
           └─ Where-Object Duration -ne '00:00:00'
                  │
                  └─ パイプライン出力
```

### データフロー図

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

Import-Module dbatools
        │
        ▼
$script:dbatools_ImportPerformance
(モジュールインポート時に設定)
        │
        ▼
Measure-DbatoolsImport呼び出し
        │
        ▼
Where-Object Duration -ne '00:00:00'
        │
        ▼
┌───────────────────────────┐
│ PSCustomObject[]          │
│ - Name: "Loading..."      │
│ - Duration: TimeSpan      │
└───────────────────────────┘
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Measure-DbatoolsImport.ps1 | `public/Measure-DbatoolsImport.ps1` | ソース | メイン関数 |
| dbatools.psm1 | `dbatools.psm1` | ソース | $script:dbatools_ImportPerformance設定 |
