# 機能設計書 244-Test-DbaDbDataGeneratorConfig

## 概要

本ドキュメントは、SQL Serverデータベースにリアルなテストデータを生成するためのJSON構成ファイルを検証する機能 `Test-DbaDbDataGeneratorConfig` の設計仕様を記載する。

### 本機能の処理概要

この機能は、`New-DbaDbDataGeneratorConfig` で作成されたJSON構成ファイルを `Invoke-DbaDbDataGenerator` で使用する前に検証する。必須カラムプロパティのチェック、サポートされるデータ型の確認、Bogusライブラリでのマスキングタイプの存在確認、サブタイプの有効性検証など包括的な検証を実行する。

**業務上の目的・背景**：テストデータ生成ワークフローにおいて、構成エラーによる実行時エラーを防止するため、データ生成実行前に構成ファイルの検証を行う。構成問題を早期に発見することで、テストデータ作成の効率を向上させる。

**機能の利用シーン**：
- テストデータ生成構成ファイルの事前検証
- 構成ファイル修正後のバリデーション
- CI/CDパイプラインでの自動検証
- 開発・テスト環境での構成エラー診断

**主要な処理内容**：
1. JSON構成ファイルの読み込みとパース
2. 構成ファイルのタイプ（DataGenerationConfiguration）確認
3. 各テーブル・カラムの必須プロパティ存在確認
4. カラムタイプのサポート状況確認
5. マスキングタイプ・サブタイプの有効性確認
6. エラー情報の出力

**関連システム・外部連携**：Bogusランダム化ライブラリ（Get-DbaRandomizedType経由）。

**権限による制御**：ファイルシステムへの読み取りアクセスが必要。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 59 | データ生成 | 補助機能 | データ生成設定のテスト |

## 機能種別

バリデーション処理

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| FilePath | string | Yes | 検証するJSON構成ファイルへのパス | ファイルが存在すること |
| EnableException | switch | No | 例外のスロー有効化 | - |

### 入力データソース

- JSON構成ファイル（New-DbaDbDataGeneratorConfigで生成）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| Table | string | エラーが見つかった構成内のテーブル名 |
| Column | string | エラーが見つかったテーブル内のカラム名 |
| Value | string | 問題のある値またはプロパティ名のカンマ区切りリスト |
| Error | string | 検出されたバリデーションエラーの説明 |

### 出力先

- PowerShellパイプライン出力（PSCustomObject）
- 構成ファイルが有効でエラーがない場合は出力なし

## 処理フロー

### 処理シーケンス

```
1. beginブロックで初期検証
   └─ ファイル存在確認
   └─ JSONパースとタイプ確認
   └─ サポートデータ型・必須プロパティの定義
2. processブロックで各テーブル・カラムをループ
   └─ 必須プロパティの存在確認
   └─ 追加プロパティの検出
   └─ カラムタイプの検証
   └─ マスキングタイプの検証
   └─ サブタイプの検証
3. エラー情報をPSCustomObjectで出力
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{ファイル存在?}
    B -->|No| C[Stop-Function]
    B -->|Yes| D[JSONパース]
    D --> E{パース成功?}
    E -->|No| F[Stop-Function]
    E -->|Yes| G{Type確認}
    G -->|不正| H[Stop-Function]
    G -->|正常| I{各テーブルをループ}
    I --> J{各カラムをループ}
    J --> K[必須プロパティチェック]
    K --> L{不足あり?}
    L -->|Yes| M[エラー出力]
    L -->|No| N[追加プロパティチェック]
    N --> O{余分あり?}
    O -->|Yes| P[エラー出力]
    O -->|No| Q[カラムタイプチェック]
    Q --> R{無効?}
    R -->|Yes| S[エラー出力]
    R -->|No| T[マスキングタイプチェック]
    T --> U{無効?}
    U -->|Yes| V[エラー出力]
    U -->|No| W[サブタイプチェック]
    W --> X{無効?}
    X -->|Yes| Y[エラー出力]
    X -->|No| J
    J -->|完了| I
    I -->|完了| Z[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-244-1 | タイプ確認 | Type = "DataGenerationConfiguration" であること | 常時 |
| BR-244-2 | 必須プロパティ | 11個の必須プロパティが存在すること | 各カラムに対して |
| BR-244-3 | サポートデータ型 | ColumnTypeがサポートリストに含まれること | 各カラムに対して |
| BR-244-4 | マスキングタイプ有効性 | MaskingTypeがBogusライブラリで利用可能であること | 各カラムに対して |
| BR-244-5 | サブタイプ有効性 | SubTypeがBogusライブラリで利用可能であること | SubTypeが指定されている場合 |

### 必須カラムプロパティ

```
CharacterString, ColumnType, Composite, ForeignKey, Identity,
MaskingType, MaxValue, MinValue, Name, Nullable, SubType
```

### サポートされるデータ型

```
bigint, bit, bool, char, date, datetime, datetime2, decimal, int,
money, nchar, ntext, nvarchar, smalldatetime, text, time,
uniqueidentifier, userdefineddatatype, varchar
```

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

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

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| - | - | - | データベース操作なし |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| FileNotFound | ファイルエラー | 構成ファイルが見つからない | Stop-Functionで処理終了 |
| ParseError | パースエラー | JSONパース失敗 | Stop-Functionで処理終了 |
| TypeMissing | タイプエラー | Typeプロパティがない | Stop-Functionで処理終了 |
| InvalidType | タイプエラー | TypeがDataGenerationConfigurationでない | Stop-Functionで処理終了 |
| MissingProperty | プロパティエラー | 必須プロパティがない | エラー情報を出力 |
| ExtraProperty | プロパティエラー | 不要なプロパティがある | エラー情報を出力 |
| InvalidColumnType | データ型エラー | サポートされないカラムタイプ | エラー情報を出力 |
| InvalidMaskingType | マスキングエラー | 無効なマスキングタイプ | エラー情報を出力 |
| InvalidSubType | サブタイプエラー | 無効なサブタイプ | エラー情報を出力 |

### リトライ仕様

リトライ処理なし。ファイル読み込みエラーは即座に終了。

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

ファイルシステム操作のみのため、トランザクション管理は不要。

## パフォーマンス要件

- JSON構成ファイルのサイズに応じて処理時間が変動
- Get-DbaRandomizedTypeの呼び出しが1回のみ（beginブロック）

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

- ファイルシステムへの読み取りアクセス権限が必要
- JSON構成ファイルには機密情報を含めないこと推奨

## 備考

- sysadminアクセス権限がSQL Server操作時に必要（ドキュメントより）
- 構成ファイルはNew-DbaDbDataGeneratorConfigで生成されることを前提

---

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

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

### 推奨読解順序

#### Step 1: コマンド構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Test-DbaDbDataGeneratorConfig.ps1 | `public/Test-DbaDbDataGeneratorConfig.ps1` | パラメータ定義、コメントベースヘルプ |

**読解のコツ**: beginブロックで定義される検証用定数（サポートデータ型、必須プロパティ）に注目。

#### Step 2: beginブロックを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Test-DbaDbDataGeneratorConfig.ps1 | `public/Test-DbaDbDataGeneratorConfig.ps1` | ファイル検証、JSON読み込み、定数定義 |

**主要処理フロー**:
1. **73-78行目**: ファイル存在確認
2. **81-85行目**: JSONパース
3. **87-95行目**: 構成タイプの検証
4. **97行目**: サポートデータ型の定義
5. **99行目**: ランダム化タイプの取得
6. **101行目**: 必須カラムプロパティの定義

#### Step 3: processブロックを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Test-DbaDbDataGeneratorConfig.ps1 | `public/Test-DbaDbDataGeneratorConfig.ps1` | 各種検証ロジック |

**主要処理フロー**:
1. **107-134行目**: 必須・追加プロパティの検証
2. **136-144行目**: カラムタイプの検証
3. **146-154行目**: マスキングタイプの検証
4. **156-164行目**: サブタイプの検証

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

```
Test-DbaDbDataGeneratorConfig
    │
    ├─ Test-Path
    │      └─ ファイル存在確認
    │
    ├─ Get-Content | ConvertFrom-Json
    │      └─ JSON読み込みとパース
    │
    ├─ Get-DbaRandomizedType
    │      └─ 有効なマスキングタイプ一覧取得
    │
    ├─ Compare-Object
    │      └─ プロパティ比較
    │
    └─ PSCustomObject出力
           └─ エラー情報
```

### データフロー図

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

FilePath       ───▶ Test-Path ───▶ 存在確認
                           │
                           ▼
                    Get-Content ───▶ JSONテキスト
                           │
                           ▼
                    ConvertFrom-Json ───▶ $json
                           │
                           ▼
                    タイプ検証 ───▶ 検証結果
                           │
                           ▼
                    各カラム検証 ───▶ PSCustomObject（エラー情報）
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Test-DbaDbDataGeneratorConfig.ps1 | `public/Test-DbaDbDataGeneratorConfig.ps1` | ソース | メイン機能実装 |
| Get-DbaRandomizedType.ps1 | `public/Get-DbaRandomizedType.ps1` | ソース | マスキングタイプ一覧取得 |
| New-DbaDbDataGeneratorConfig.ps1 | `public/New-DbaDbDataGeneratorConfig.ps1` | ソース | 構成ファイル生成（関連） |
| Invoke-DbaDbDataGenerator.ps1 | `public/Invoke-DbaDbDataGenerator.ps1` | ソース | データ生成実行（関連） |
