# 機能設計書 451-New-DbaReplCreationScriptOptions

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおける`New-DbaReplCreationScriptOptions`関数の機能設計を定義する。この関数はSQL Serverレプリケーションにおいて、アーティクル作成時にどのデータベースオブジェクトやプロパティをサブスクライバーにスクリプト化するかを制御するオプションオブジェクトを生成する。

### 本機能の処理概要

**業務上の目的・背景**：SQL Serverのトランザクションレプリケーションでは、パブリケーションにテーブルをアーティクルとして追加する際、インデックス、制約、トリガーなどのスキーマ要素をサブスクライバーにどのように複製するかを制御する必要がある。この関数は、その制御を行うための`CreationScriptOptions`オブジェクトを生成し、レプリケーション構成の柔軟性を提供する。

**機能の利用シーン**：
- レプリケーションアーティクル追加時に、特定のスキーマ要素のみを複製したい場合
- パフォーマンス最適化のため、非クラスター化インデックスや統計情報を含めたい場合
- SSMSのデフォルト設定と異なるカスタム設定が必要な場合

**主要な処理内容**：
1. `Microsoft.SqlServer.Replication.CreationScriptOptions`オブジェクトの新規作成
2. デフォルトオプションの適用（`-NoDefaults`スイッチが指定されない限り）
3. ユーザー指定のオプションを追加して最終的なオプションセットを構築
4. 構成済みオブジェクトをパイプラインに出力

**関連システム・外部連携**：SQL Server Replication Management Objects (RMO)ライブラリを使用してレプリケーションオプションを設定する。生成されたオブジェクトは`Add-DbaReplArticle`コマンドレットと連携して使用される。

**権限による制御**：本関数自体はオブジェクトを生成するのみであり、SQL Server接続を必要としないため、特別な権限は不要。実際のレプリケーション操作は、生成されたオブジェクトを使用する後続のコマンドで実行される。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| N/A | SQL Server Management Studio - パブリケーションウィザード | 参照画面 | アーティクルプロパティのスキーマオプション設定に相当 |

## 機能種別

設定オブジェクト生成 / ユーティリティ関数

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| Options | String[] | No | サブスクライバーで複製するテーブル作成時に含めるデータベースオブジェクトプロパティを指定 | CreationScriptOptions列挙値として有効な値のみ受け付ける |
| NoDefaults | Switch | No | SSMSが自動適用する標準レプリケーションオプションを除外する | なし |

### 入力データソース

本関数への入力はパラメータのみであり、外部データソースからの取得は行わない。

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| CreationScriptOptions | Microsoft.SqlServer.Replication.CreationScriptOptions | 選択されたレプリケーションスキーマオプションをカプセル化した列挙オブジェクト |

### 出力先

パイプラインに直接出力。通常は変数に格納して`Add-DbaReplArticle`の`-CreationScriptOptions`パラメータに渡して使用する。

## 処理フロー

### 処理シーケンス

```
1. CreationScriptOptionsオブジェクトの初期化
   └─ New-Object Microsoft.SqlServer.Replication.CreationScriptOptions で空のオブジェクト作成
2. デフォルトオプションの適用判定
   └─ -NoDefaults スイッチが指定されていない場合のみ実行
3. デフォルトオプションの追加
   └─ PrimaryObject, CustomProcedures, Identity, KeepTimestamp, ClusteredIndexes,
      DriPrimaryKey, Collation, DriUniqueKeys, MarkReplicatedCheckConstraintsAsNotForReplication,
      MarkReplicatedForeignKeyConstraintsAsNotForReplication, Schema を順次追加
4. ユーザー指定オプションの追加
   └─ -Options パラメータで指定された各オプションを追加
5. オブジェクトの出力
   └─ 構成済みのCreationScriptOptionsオブジェクトを返却
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[CreationScriptOptions オブジェクト作成]
    B --> C{NoDefaults スイッチ?}
    C -->|No| D[デフォルトオプション追加]
    C -->|Yes| E{Options 指定あり?}
    D --> E
    E -->|Yes| F[ユーザー指定オプション追加]
    E -->|No| G[オブジェクト出力]
    F --> G
    G --> H[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | デフォルトオプション適用 | SSMSと同等のデフォルトスキーマオプションを自動適用 | -NoDefaultsが指定されない場合 |
| BR-002 | オプション累積 | 複数のオプションはビット単位で結合される | 常時適用 |

### 計算ロジック

本関数に複雑な計算ロジックはない。CreationScriptOptions列挙値はフラグ属性を持ち、ビット演算子（`+=`演算）により複数のオプションを組み合わせることができる。

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

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

本関数はデータベース操作を行わない。オブジェクト生成のみを行うユーティリティ関数である。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| N/A | 型変換エラー | 無効なオプション名が指定された場合 | 有効なCreationScriptOptionsオプション名を指定する |

### リトライ仕様

本関数はステートレスなオブジェクト生成関数であり、リトライは不要。

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

本関数はトランザクションを使用しない。

## パフォーマンス要件

即座に実行完了する軽量な関数。性能要件なし。

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

- 本関数自体はSQL Server接続を行わないため、認証・認可は不要
- 生成されたオブジェクトを使用する後続のレプリケーション操作では、適切な権限が必要

## 備考

- デフォルトオプションはSSMS（SQL Server Management Studio）がアーティクル追加時に適用するものと同一
- 利用可能な全オプションの一覧は Microsoft Docs の CreationScriptOptions ドキュメントを参照

---

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

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

### 推奨読解順序

#### Step 1: 関数全体の構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | New-DbaReplCreationScriptOptions.ps1 | `public/New-DbaReplCreationScriptOptions.ps1` | 関数全体の構造、パラメータ定義、ヘルプドキュメント |

**読解のコツ**: PowerShell関数は`function`キーワードで始まり、`param()`ブロックでパラメータを定義する。`<# ... #>`内のコメントブロックはGet-Helpで表示されるヘルプドキュメント。

#### Step 2: 処理ロジックを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | New-DbaReplCreationScriptOptions.ps1 | `public/New-DbaReplCreationScriptOptions.ps1` | 95-105行目のメイン処理ロジック |

**主要処理フロー**:
1. **95行目**: `New-Object Microsoft.SqlServer.Replication.CreationScriptOptions` でオブジェクト作成
2. **97-99行目**: `$NoDefaults`がfalseの場合、デフォルトオプションをForEach-Objectで追加
3. **101-103行目**: ユーザー指定の`$Options`を順次追加
4. **105行目**: オブジェクトを出力

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

```
New-DbaReplCreationScriptOptions
    │
    └─ [.NET Framework]
           └─ Microsoft.SqlServer.Replication.CreationScriptOptions (RMO)
```

### データフロー図

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

-Options パラメータ ───▶ ForEach-Object でオプション追加 ─▶ CreationScriptOptions
                              │                                オブジェクト
-NoDefaults スイッチ ───▶ デフォルト適用判定 ───────────────┘
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| New-DbaReplCreationScriptOptions.ps1 | `public/New-DbaReplCreationScriptOptions.ps1` | ソース | メイン関数定義 |
| Add-DbaReplArticle.ps1 | `public/Add-DbaReplArticle.ps1` | ソース | 生成オブジェクトの使用先 |
