# 画面設計書 8-アプリケーションプロパティページ

## 概要

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

### 本画面の処理概要

この画面は、F# プロジェクトの基本的なアプリケーション設定（アセンブリ名、ターゲットフレームワーク、出力タイプなど）を編集するためのプロパティページです。

**業務上の目的・背景**：F# プロジェクトの基本属性を設定するために必要な画面です。アセンブリ情報やターゲットフレームワークの設定は、プロジェクトのビルドと実行に直接影響するため、開発初期や環境移行時に頻繁に使用されます。

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

**主要な操作・処理内容**：
1. アセンブリ名の設定
2. ターゲットフレームワークの選択
3. 出力タイプ（コンソール、Windows、ライブラリ等）の選択
4. 既定の名前空間の設定
5. アセンブリ情報の編集

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

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 48 | MSBuildタスク（Fsc） | 主機能 | アセンブリ名、ターゲットフレームワークなどのプロジェクト設定 |
| 52 | アセンブリ参照解決 | 補助機能 | ターゲットフレームワーク設定によるアセンブリ参照解決 |

## 画面種別

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

## URL/ルーティング

Visual Studio 内部プロパティページのため、URLは存在しません。
- GUIDパス: `{6D2D9B56-2691-4624-A1BF-D07A14594748}`（FSharpApplicationPropPageComClass）
- プロパティページパス: プロジェクトプロパティ > アプリケーション

## 入出力項目

| 項目名 | 項目種別 | データ型 | 必須 | 説明 |
|--------|----------|----------|------|------|
| AssemblyName | 入力（テキスト） | string | 必須 | アセンブリの名前 |
| RootNamespace | 入力（テキスト） | string | - | 既定の名前空間 |
| TargetFramework | 入力（コンボボックス） | string | 必須 | ターゲットフレームワーク |
| OutputType | 入力（コンボボックス） | OutputType | 必須 | 出力タイプ（Exe/WinExe/Library） |

## 表示項目

本画面は `ApplicationPropPage` を継承しており、C#/VB と共通の基本レイアウトを使用しています。

| 項目名 | 表示形式 | 説明 |
|--------|----------|------|
| アセンブリ名 | TextBox | プロジェクトの出力アセンブリ名 |
| ターゲットフレームワーク | ComboBox | .NET Framework / .NET Core 等の選択 |
| 出力タイプ | ComboBox | Console Application / Windows Application / Class Library |
| 既定の名前空間 | TextBox | プロジェクトの既定名前空間 |
| アセンブリ情報ボタン | Button | アセンブリ情報ダイアログを開く |

## イベント仕様

### 1-設定値の保存

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

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

画面表示時、プロジェクトファイルから現在の設定値が読み込まれ、各コントロールに表示されます。

### 3-アセンブリ情報ダイアログ

アセンブリ情報ボタン押下で、アセンブリバージョン、製品情報などを編集するダイアログが表示されます。

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

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

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

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

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|--------------|------|----------------|----------|
| PPG_ApplicationTitle | タイトル | アプリケーション | ページタイトル |

## 例外処理

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

## 備考

- 本画面は VB.NET で実装されています（`FSharpApplicationPropPage.vb`）
- `FSharpApplicationPropPage` クラスは `ApplicationPropPage` を継承
- COM 公開クラス `FSharpApplicationPropPageComClass` は `FSharpPropPageBase` を継承
- プロパティページのヘルプコンテキストは VBREF.CHM に設定
- 設定変更は即座に適用されず、OK または適用ボタンで確定されます

---

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

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

### 推奨読解順序

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

まず、プロパティページの継承関係を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | FSharpApplicationPropPage.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/FSharpApplicationPropPage.vb` | クラス階層と継承関係を把握（22-75行目） |

**読解のコツ**: `FSharpApplicationPropPage` は `ApplicationPropPage` を継承しており、C#/VB 共通の基底クラスの機能を利用しています。

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

プロパティページとして Visual Studio に登録される仕組みを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | FSharpApplicationPropPage.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/FSharpApplicationPropPage.vb` | `FSharpApplicationPropPageComClass` クラス（91-113行目） |

**主要処理フロー**:
1. **91行目**: `[<Guid("6D2D9B56-2691-4624-A1BF-D07A14594748")>]` 属性で GUID を指定
2. **94行目**: `FSharpPropPageBase` を継承
3. **96-100行目**: `Title` プロパティでページタイトルを返す
4. **102-106行目**: `ControlType` プロパティでコントロール型を返す
5. **109-111行目**: `CreateControl()` でコントロールインスタンスを生成

#### Step 3: 基底クラスを理解する

F# プロパティページ共通の基底クラスを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | FSharpApplicationPropPage.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/FSharpApplicationPropPage.vb` | `FSharpPropPageBase` クラス（77-89行目） |

**主要処理フロー**:
- **77行目**: `PropPageBase` を継承
- **84-87行目**: ヘルプコンテキストとヘルプファイルの設定

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

```
Visual Studio プロジェクトプロパティ
    │
    ├─ FSharpApplicationPropPageComClass
    │      │
    │      ├─ Title プロパティ → "Application"
    │      ├─ ControlType プロパティ → FSharpApplicationPropPage 型
    │      └─ CreateControl() → FSharpApplicationPropPage インスタンス
    │
    └─ FSharpApplicationPropPage
           │
           ├─ ApplicationPropPage を継承
           │      └─ 共通 UI レイアウトと機能
           │
           └─ InitializeComponent()
                  └─ Windows Forms コントロール初期化
```

### データフロー図

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

ユーザー設定変更 ───▶ FSharpApplicationPropPage ───▶ プロパティ値
                              │
                              ▼
                    ApplicationPropPage（基底） ───▶ 設定検証
                              │
                              ▼
                    PropPageBase ─────────────────▶ プロジェクトファイル
                              │                     (.fsproj)
                              ▼
                    MSBuild プロパティ ────────────▶ ビルド設定
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| FSharpApplicationPropPage.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/FSharpApplicationPropPage.vb` | ソース | プロパティページ実装 |
| ApplicationPropPage.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/ApplicationPropPage.vb` | ソース | 基底クラス（C#/VB 共通） |
| PropPageBase.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/PropPageBase.vb` | ソース | プロパティページ基底クラス |
| SR.vb | `vsintegration/src/FSharp.ProjectSystem.PropertyPages/SR.vb` | ソース | 文字列リソース |
