# 画面設計書 64-アクティブDUB設定取得（served/getActiveDubConfig）

## 概要

本ドキュメントは、serve-d LSPサーバーのカスタムリクエスト `served/getActiveDubConfig` の画面設計書である。現在アクティブなDUBプロジェクトの詳細なビルド設定情報（パス・フラグ・依存関係等）を返却する。

### 本画面の処理概要

本リクエストは、現在アクティブなDUBプロジェクトのルートパッケージビルド設定を詳細に返却する機能を提供する。

**業務上の目的・背景**：DUBプロジェクトのビルド設定は、コンパイルフラグ・インポートパス・リンカフラグ・ソースファイル一覧など多岐にわたる情報を含む。エディタ拡張やデバッグツールは、これらの情報を取得してプロジェクトの構成を把握し、適切なビルド・デバッグ環境を構築する必要がある。

**画面へのアクセス方法**：LSPクライアントから `served/getActiveDubConfig` カスタムリクエストを送信することでアクセスする。

**主要な操作・処理内容**：
1. クライアントからリクエストを受信する（パラメータなし）
2. アクティブインスタンスがDubComponentを持つか確認する
3. `rootPackageBuildSettings()` でルートパッケージのビルド設定を取得する
4. ビルド設定をJSON形式（StringMap!JsonValue）に変換して返却する

**画面遷移**：
- 遷移元：エディタのプロジェクト情報表示UI、デバッグ設定
- 遷移先：なし（設定情報の返却のみ）

**権限による表示制御**：特になし。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 52 | アクティブDUB設定取得 (served/getActiveDubConfig) | 主機能 | アクティブプロジェクトのDUBビルド設定詳細（パス・フラグ・依存関係等）を返却する |

## 画面種別

カスタムLSPリクエスト（設定情報返却型）

## URL/ルーティング

LSPカスタムメソッド: `served/getActiveDubConfig`

## 入出力項目

### リクエストパラメータ

パラメータなし。

### レスポンス

| 項目名 | 型 | 説明 |
|--------|------|------|
| (戻り値) | StringMap!JsonValue | DUBビルド設定のJSON表現 |

### レスポンス詳細フィールド

| フィールド名 | 型 | 説明 |
|-------------|------|------|
| packagePath | string | パッケージのルートパス |
| packageName | string | パッケージ名 |
| recipePath | string | レシピファイルのパス |
| targetPath | string | ビルドターゲットの出力パス |
| targetName | string | ビルドターゲット名 |
| targetType | string | ターゲットタイプ |
| workingDirectory | string | 作業ディレクトリ |
| mainSourceFile | string | メインソースファイル |
| dflags | string[] | Dコンパイラフラグ |
| lflags | string[] | リンカフラグ |
| libs | string[] | リンクするライブラリ |
| linkerFiles | string[] | リンカファイル |
| sourceFiles | string[] | ソースファイル一覧 |
| copyFiles | string[] | コピーファイル一覧 |
| versions | string[] | バージョン識別子 |
| debugVersions | string[] | デバッグバージョン識別子 |
| importPaths | string[] | インポートパス |
| stringImportPaths | string[] | 文字列インポートパス |
| importFiles | string[] | インポートファイル |
| stringImportFiles | string[] | 文字列インポートファイル |
| preGenerateCommands | string[] | 生成前コマンド |
| postGenerateCommands | string[] | 生成後コマンド |
| preBuildCommands | string[] | ビルド前コマンド |
| postBuildCommands | string[] | ビルド後コマンド |
| preRunCommands | string[] | 実行前コマンド |
| postRunCommands | string[] | 実行後コマンド |
| buildOptions | string[] | ビルドオプション |
| buildRequirements | string[] | ビルド要件 |

## 表示項目

クライアント側でプロジェクトのビルド設定情報を表示するUIに使用される。

## イベント仕様

### 1-アクティブDUB設定取得リクエスト受信

1. クライアントから `served/getActiveDubConfig` リクエストを受信する
2. `activeInstance` がnullまたはDubComponentを持たない場合、空のStringMapを返却する
3. `activeInstance.get!DubComponent.rootPackageBuildSettings()` でルートパッケージのビルド設定を取得する
4. 取得したビルド設定を `toJsonValue` でJSON形式に変換する
5. `StringMap!JsonValue` として返却する

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

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

本リクエストはデータベースへの更新を行わない。DUBプロジェクトの設定情報を読み取り専用で返却する。

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| アクティブDUB設定取得 | なし | SELECT（読み取り） | DUBプロジェクトの現在のビルド設定を取得 |

## メッセージ仕様

| メッセージID | 種別 | 表示条件 | メッセージ内容 |
|-------------|------|---------|--------------|
| なし | - | - | 本リクエストはエラーメッセージを直接クライアントに表示しない |

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| activeInstanceがnull | 空のStringMap!JsonValueを返却する |
| DubComponentが未ロード | 空のStringMap!JsonValueを返却する |

## 備考

- 本リクエストは常にアクティブなインスタンス（activeInstance）のビルド設定を返却する。特定のワークスペースを指定するパラメータは存在しない
- `rootPackageBuildSettings()` はDUBのルートパッケージの設定のみを返却し、サブパッケージの設定は含まない
- レスポンスの各フィールドはstatic assertで型の保証がされている（API保証のためのコンパイル時検証）

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | dub.d | `source/served/commands/dub.d` | 行130-164のコメントでレスポンスのJSON構造が記載されている |

**読解のコツ**: レスポンスは `rootPackageBuildSettings()` の戻り値をそのままJSON変換したもの。各フィールドの型はstatic assertで保証されている。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | dub.d | `source/served/commands/dub.d` | `getActiveDubConfig` 関数（行166-202）がエントリーポイント |

**主要処理フロー**:
1. **行166-167**: `@protocolMethod("served/getActiveDubConfig")` で定義。パラメータなし
2. **行169-170**: activeInstanceとDubComponentの存在確認
3. **行171**: `rootPackageBuildSettings()` でビルド設定取得
4. **行172-199**: static assertによる型保証（コンパイル時）
5. **行201**: `ret.toJsonValue.get!(StringMap!JsonValue)` でJSON変換して返却

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

```
served/getActiveDubConfig リクエスト
    |
    +-- getActiveDubConfig()                              [dub.d:167]
           |
           +-- activeInstance                              [現在アクティブなインスタンス]
           |
           +-- DubComponent.rootPackageBuildSettings()     [workspace-d]
           |
           +-- toJsonValue()                               [JSON変換]
```

### データフロー図

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

(パラメータなし) --> getActiveDubConfig()                 --> StringMap!JsonValue
                        |                                        |
                        +-- activeInstance取得                    +-- packagePath
                        +-- rootPackageBuildSettings()            +-- packageName
                        +-- toJsonValue変換                       +-- sourceFiles
                                                                  +-- importPaths
                                                                  +-- dflags, lflags
                                                                  +-- ... (計28フィールド)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| dub.d | `source/served/commands/dub.d` | ソース | getActiveDubConfig関数の実装 |
| extension.d | `source/served/extension.d` | ソース | activeInstance変数の管理 |
| types.d | `source/served/types.d` | ソース | 共通型定義 |
