# 画面設計書 50-ビルドタイプ取得（served/getBuildType）

## 概要

本ドキュメントは、serve-d LSPサーバーにおける現在ビルドタイプ取得機能（`served/getBuildType`）の画面設計書である。クライアントからのカスタムリクエストにより、アクティブなDUBプロジェクトの現在のビルドタイプを返却する。

### 本画面の処理概要

本機能は、DUBプロジェクトで現在選択されているビルドタイプの名称をクライアントに返却するカスタムLSPメソッドハンドラである。

**業務上の目的・背景**：エディタのステータスバーや設定UIで現在選択中のビルドタイプを表示するために、現在のビルドタイプ名を取得する必要がある。これにより開発者は、debug/release/unitest等のどのビルドタイプでビルドが行われているかを即座に確認できる。No.48（ビルドタイプ一覧取得）やNo.49（ビルドタイプ切り替え）と組み合わせて使用される。No.44（getConfig）やNo.47（getArchType）と同じGetter系の機能パターンである。

**画面へのアクセス方法**：エディタのステータスバー更新時や設定管理UIの初期表示時に`served/getBuildType`リクエストがserve-dに送信される。

**主要な操作・処理内容**：
1. クライアントから`served/getBuildType`リクエストを受信する
2. activeInstanceの存在とDubComponentの有無を確認する
3. DubComponentからbuildTypeプロパティ（現在のビルドタイプ名）を取得する
4. ビルドタイプ名の文字列をクライアントに返却する

**画面遷移**：
- 遷移元：エディタのステータスバー、設定管理UI
- 遷移先：なし（情報取得のみ）
- 関連画面：No.48 ビルドタイプ一覧取得、No.49 ビルドタイプ切り替え

**権限による表示制御**：LSPプロトコル上の権限制御は存在しない。アクティブなDUBプロジェクトが存在しない場合はnullが返却される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 49 | 現在ビルドタイプ取得 (served/getBuildType) | 主機能 | 現在のDUBビルドタイプを返却する |

## 画面種別

カスタムLSPリクエストハンドラ（protocolMethod）- 情報取得

## URL/ルーティング

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

## 入出力項目

### 入力パラメータ

| 項目名 | 型 | 必須 | 説明 |
|--------|-----|------|------|
| （なし） | - | - | 本リクエストはパラメータを受け取らない |

### 出力パラメータ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| （戻り値） | string \| null | 現在のビルドタイプ名（例："debug", "release"等）。DubComponentが存在しない場合はnull |

## 表示項目

クライアント側でステータスバーや設定UIに表示される。

| 項目名 | 型 | 説明 |
|--------|-----|------|
| 現在のビルドタイプ | string | 現在選択されているDUBビルドタイプ名 |

## イベント仕様

### 1-getBuildType リクエスト受信

クライアントから`served/getBuildType`リクエストを受信すると、以下の処理が実行される。

1. `activeInstance`がnullでないか確認する
2. `activeInstance.has!DubComponent`でDUBコンポーネントの有無を確認する
3. 上記いずれかがfalseの場合、`null`を返却する
4. `activeInstance.get!DubComponent.buildType`で現在のビルドタイプ名を取得する
5. 取得した文字列をそのままレスポンスとして返却する

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

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

本機能はデータベースへのアクセスを行わない。

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| - | - | - | データベースアクセスなし |

## メッセージ仕様

| メッセージID | 種別 | 表示条件 | メッセージ内容 |
|-------------|------|---------|--------------|
| - | - | - | 本リクエストは特にメッセージを送信しない |

## 例外処理

- activeInstanceがnullの場合：nullを返却
- DubComponentが存在しない場合：nullを返却

## 備考

- No.44（getConfig）、No.47（getArchType）と全く同じGetter系パターンで実装されている
- DubComponentのbuildTypeプロパティは読み取り専用であり、変更にはsetBuildType（No.49）を使用する
- ビルドタスク生成時（provideBuildTasks）でもdub.buildTypeが参照されており、`-b=`フラグとして使用される
- DUBの代表的なビルドタイプ：debug, plain, release, release-debug, release-nobounds, unittest, profile, profile-gc, docs, ddox, cov, unittest-cov

---

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

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

### 推奨読解順序

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

本機能の入出力はシンプルで、パラメータなし・戻り値がstringである。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | types.d | `source/served/types.d` | 463-474行目でactiveInstanceプロパティの定義 |

**読解のコツ**: `buildType`プロパティと`buildTypes`プロパティの違いに注意。前者は現在の単一のビルドタイプ名、後者は全ビルドタイプの配列である。getConfig/getArchTypeと同じパターンであるため、これらを先に理解しておくとスムーズに読める。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | dub.d | `source/served/commands/dub.d` | 108-114行目のgetBuildType関数。`@protocolMethod("served/getBuildType")`でLSPメソッドハンドラとして登録 |

**主要処理フロー**:
1. **108行目**: `@protocolMethod("served/getBuildType")`デコレータ
2. **109行目**: `string getBuildType()`関数定義
3. **111行目**: `if (!activeInstance || !activeInstance.has!DubComponent)` でガード条件チェック
4. **112行目**: ガード条件に該当した場合`return null`
5. **113行目**: `return activeInstance.get!DubComponent.buildType` で現在ビルドタイプ名を返却

#### Step 3: 使用箇所を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | dub.d | `source/served/commands/dub.d` | 390-509行目のprovideBuildTasks関数。ビルドタスク生成時に`dub.buildType`が`-b=`フラグとして使用される |
| 3-2 | types.d | `source/served/types.d` | 104行目のConfiguration.D.dubBuildType。クライアントから設定されるビルドタイプのデフォルト値 |

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

```
served/getBuildType (LSPリクエスト)
    │
    └─ getBuildType() [dub.d:109]
           │
           ├─ activeInstance チェック [null判定]
           │
           ├─ activeInstance.has!DubComponent [存在確認]
           │
           └─ activeInstance.get!DubComponent.buildType [現在ビルドタイプ取得]
                  │
                  └─ DubComponent内部 [workspace-d: 現在のDUBビルドタイプを返却]
```

### データフロー図

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

served/getBuildType ───▶ getBuildType()                  ───▶ string | null
リクエスト                    │                                  現在のビルドタイプ名
（パラメータなし）            ├─ activeInstance確認
                             │
                             └─ DubComponent.buildType
                                (現在のDUBビルドタイプ名を読み取り)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| dub.d | `source/served/commands/dub.d` | ソース | getBuildType関数の実装（108-114行目） |
| extension.d | `source/served/extension.d` | ソース | dub.dモジュールのpublic import・LSPルーター登録 |
| types.d | `source/served/types.d` | ソース | activeInstanceの定義（463-474行目）、Configuration.D.dubBuildType（104行目） |
