# 画面設計書 9-ビルドプロパティページ

## 概要

本ドキュメントは、F# プロジェクトのビルド設定を行う「ビルドプロパティページ」の設計仕様を記述するものです。

### 本画面の処理概要

この画面は、F# プロジェクトのコンパイルオプション、出力パス、デバッグ情報、警告設定などのビルド関連設定を編集するためのプロパティページです。

**業務上の目的・背景**：F# プロジェクトのビルド動作を詳細に制御するために必要な画面です。最適化設定、警告レベル、ドキュメント出力、条件付きコンパイルシンボルなど、ビルドプロセスに直接影響する設定を管理します。構成（Debug/Release）ごとに異なる設定を行うことができます。

**画面へのアクセス方法**：ソリューションエクスプローラーで F# プロジェクトを右クリックし、「プロパティ」を選択してプロジェクトプロパティウィンドウを開きます。左側のタブから「ビルド」を選択することで本画面にアクセスできます。

**主要な操作・処理内容**：
1. 条件付きコンパイルシンボルの設定
2. 最適化の有効化設定
3. Tail Calls の有効化設定
4. 警告レベルの設定
5. 警告をエラーとして扱う設定
6. XML ドキュメントファイルの出力設定
7. 出力パスの設定
8. デバッグ情報の生成設定

**画面遷移**：
- 遷移元：ソリューションエクスプローラー（プロジェクトプロパティ）
- 遷移先画面：同じプロジェクトプロパティ内の他のページ（アプリケーション、デバッグ、ビルドイベント、参照パス）へタブ切替で遷移可能

**権限による表示制御**：特になし。プロジェクトの編集権限を持つユーザーが設定を変更可能です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 1 | F#コンパイラ（fsc） | 主機能 | コンパイルオプション、出力パス、デバッグ情報等のビルド設定 |
| 6 | 最適化 | 補助機能 | ビルド時の最適化オプション設定 |
| 9 | XMLドキュメント生成 | 補助機能 | ドキュメントファイル出力設定 |
| 8 | 診断機能 | 補助機能 | 警告レベル、警告をエラーとして扱う設定 |

## 画面種別

プロパティページ（設定画面）

## URL/ルーティング

Visual Studio 内部プロパティページのため、URLは存在しません。
- GUIDパス: `BuildPropPage` クラス（COM 公開クラス別途定義）
- プロパティページパス: プロジェクトプロパティ > ビルド

## 入出力項目

| 項目名 | 項目種別 | データ型 | 必須 | 説明 |
|--------|----------|----------|------|------|
| DefineConstants | 入力（テキスト） | string | - | 条件付きコンパイルシンボル（セミコロン区切り） |
| Optimize | 入力（チェックボックス） | bool | - | 最適化を有効にするかどうか |
| TailCalls | 入力（チェックボックス） | bool | - | Tail Calls を有効にするかどうか |
| WarningLevel | 入力（コンボボックス） | int | - | 警告レベル（0-5） |
| TreatWarningsAsErrors | 入力（チェックボックス） | bool | - | すべての警告をエラーとして扱うかどうか |
| WarningsAsErrors | 入力（テキスト） | string | - | エラーとして扱う特定の警告番号 |
| NoWarn | 入力（テキスト） | string | - | 抑制する警告番号 |
| DocumentationFile | 入力（テキスト） | string | - | XML ドキュメントファイルのパス |
| OutputPath | 入力（テキスト） | string | 必須 | 出力ディレクトリパス |
| DebugSymbols | 入力（チェックボックス） | bool | - | デバッグシンボルを生成するかどうか |
| DebugType | 入力（コンボボックス） | string | - | デバッグ情報の種類（full/pdbonly/portable/embedded） |

## 表示項目

| 項目名 | 表示形式 | 説明 |
|--------|----------|------|
| 一般セクション | GroupBox | 基本的なビルド設定 |
| 条件付きコンパイルシンボル | TextBox | DefineConstants の編集 |
| コードの最適化 | CheckBox | Optimize の設定 |
| Tail Calls | CheckBox | TailCalls の設定 |
| 警告とエラーセクション | GroupBox | 警告関連の設定 |
| 警告レベル | ComboBox | WarningLevel の選択 |
| すべての警告をエラー | CheckBox | TreatWarningsAsErrors の設定 |
| 特定の警告をエラー | TextBox | WarningsAsErrors の設定 |
| 警告の抑制 | TextBox | NoWarn の設定 |
| 出力セクション | GroupBox | 出力関連の設定 |
| ドキュメントファイル | TextBox + CheckBox | DocumentationFile の設定 |
| 出力パス | TextBox + Browse | OutputPath の設定 |
| デバッグ情報 | ComboBox | DebugType の選択 |

## イベント仕様

### 1-設定値の保存

設定変更後、OK ボタン押下または適用ボタン押下で、設定値がプロジェクトファイル（.fsproj）に保存されます。構成（Debug/Release）ごとに異なる設定が保存されます。

### 2-設定値の読み込み

画面表示時、選択された構成に対応する設定値がプロジェクトファイルから読み込まれ、各コントロールに表示されます。

### 3-出力パス参照

出力パスの参照ボタン押下で、フォルダ選択ダイアログが表示されます。

### 4-ドキュメントファイル設定

ドキュメントファイルチェックボックスの状態に応じて、ファイルパス入力欄の有効・無効が切り替わります。

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

本画面はデータベースを使用しません。設定値はプロジェクトファイル（.fsproj）に XML 形式で保存されます。

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

該当なし（プロジェクトファイルを直接更新）

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|--------------|------|----------------|----------|
| PPG_BuildTitle | タイトル | ビルド | ページタイトル |

## 例外処理

| 例外状況 | 処理内容 |
|----------|----------|
| プロジェクトファイル読み込み失敗 | エラーメッセージを表示 |
| 設定保存失敗 | エラーメッセージを表示し、ロールバック |
| 無効な出力パス | 警告メッセージを表示 |

## 備考

- 本画面は VB.NET で実装されています（`BuildPropPage.vb`）
- `BuildPropPage` クラスは `PropPageUserControlBase` を継承
- 構成依存の設定（Debug/Release など）をサポート
- 設定変更は即座に適用されず、OK または適用ボタンで確定されます
- 大規模なコードファイルであり、2000行以上の実装が含まれます

---

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

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

### 推奨読解順序

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

まず、プロパティページで管理されるプロパティデータの構造を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | BuildPropPage.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildPropPage.vb` | クラス定義と継承関係（24-28行目） |

**読解のコツ**: `BuildPropPage` は `PropPageUserControlBase` を継承しており、プロパティページ共通の機能を利用しています。

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

プロパティページの初期化と設定読み込みの流れを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | BuildPropPage.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildPropPage.vb` | `New()` コンストラクタ（34-42行目） |

**主要処理フロー**:
1. **36行目**: `MyBase.New()` で基底クラスを初期化
2. **38行目**: `InitializeComponent()` でフォームコントロールを初期化
3. **41行目**: `AddChangeHandlers()` でイベントハンドラを登録

#### Step 3: プロパティバインディングを理解する

プロジェクトプロパティと UI コントロールのバインディングを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | BuildPropPage.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildPropPage.vb` | プロパティコントロールデータの定義（コード内で PropertyControlData の配列として定義） |

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

```
Visual Studio プロジェクトプロパティ
    │
    ├─ BuildPropPage
    │      │
    │      ├─ PropPageUserControlBase を継承
    │      │
    │      ├─ InitializeComponent()
    │      │      └─ Windows Forms コントロール初期化
    │      │
    │      ├─ AddChangeHandlers()
    │      │      └─ イベントハンドラ登録
    │      │
    │      └─ PropertyControlData[]
    │             └─ プロパティとコントロールのマッピング
    │
    └─ プロジェクトファイル (.fsproj)
           └─ MSBuild プロパティ
```

### データフロー図

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

ユーザー設定変更 ───▶ BuildPropPage ─────────────▶ プロパティ値
                              │
                              ▼
                    PropertyControlData ─────────▶ 検証処理
                              │
                              ▼
                    PropPageUserControlBase ─────▶ プロジェクトファイル
                              │                     (.fsproj)
                              ▼
                    MSBuild プロパティ ────────────▶ fsc コンパイラ
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| BuildPropPage.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildPropPage.vb` | ソース | プロパティページ実装 |
| PropPageUserControlBase.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/PropPageUserControlBase.vb` | ソース | 基底クラス |
| PropertyControlData.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/PropertyControlData.vb` | ソース | プロパティデータ管理 |
| SR.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/SR.vb` | ソース | 文字列リソース |
