# serve-d 業務運用マニュアル

## 目次

**【基本操作】**
1. [システム概要](#1-システム概要)
2. [セットアップ・起動手順](#2-セットアップ起動手順)
3. [エディタ初期画面（ワークスペース）](#3-エディタ初期画面ワークスペース)

**【業務フローに沿った機能】**
4. [【STEP1】プロジェクト初期化・通知確認（環境準備と通知の受信）](#4-step1プロジェクト初期化通知確認環境準備と通知の受信)
5. [【STEP2-3】コード編集・補完機能（コードの入力・編集）](#5-step2-3コード編集補完機能コードの入力編集)
6. [【STEP3-4】コードナビゲーション・検索機能（コードの調査・参照）](#6-step3-4コードナビゲーション検索機能コードの調査参照)
7. [【STEP4-5】ビルド・診断・リファクタリング（品質管理・処理完了）](#7-step4-5ビルド診断リファクタリング品質管理処理完了)

**【サポート機能】**
8. [DUB依存関係管理機能](#8-dub依存関係管理機能)
9. [DCD管理・設定機能](#9-dcd管理設定機能)
10. [カスタマイズ・設定管理機能](#10-カスタマイズ設定管理機能)

**【運用ガイド】**
11. [日常業務の流れ](#11-日常業務の流れ)
12. [よくある質問と対処法](#12-よくある質問と対処法)
13. [トラブルシューティング](#13-トラブルシューティング)

---

## 1. システム概要

### 1.1 serve-dとは

serve-dは、D言語向けのLanguage Server Protocol（LSP）サーバーです。Microsoft Language Server Protocolの実装であり、Visual Studio Codeの拡張機能「code-d」のバックエンドとして動作します。LSPをサポートする任意のエディタに対して、D言語のIDE機能（コード補完、定義ジャンプ、リファクタリング、静的解析など）を提供します。

serve-dは以下のコア技術と連携して動作します。

- **DCD（D Completion Daemon）**: コード補完と定義ジャンプのエンジン
- **D-Scanner**: D言語ソースコードの静的解析ツール
- **dfmt**: D言語コードフォーマッタ
- **DUB**: D言語パッケージマネージャ・ビルドシステム

### 1.2 本システムで行う主要業務

本システムは、主に以下の業務を支援します。

| 業務カテゴリ | 具体的な業務内容 |
|------------|----------------|
| **コード補完** | D言語コードの自動補完、スニペット補完、自動インポート補完 |
| **コードナビゲーション** | 定義ジャンプ、参照検索、シンボル検索、ホバー情報表示 |
| **コード編集支援** | リネーム、コードフォーマット、インポート整理、インターフェース自動実装 |
| **静的解析・診断** | D-Scannerによるコード品質チェック、DUBビルドエラー検出、dfmtルールチェック |
| **ビルド・テスト** | DUBビルドタスク実行（Run / Test / Build / Rebuild） |
| **依存関係管理** | DUBパッケージの追加・更新・削除、依存関係ツリー管理 |
| **設定管理** | コンパイラ・アーキテクチャ・ビルド設定の切り替え |

### 1.3 業務フロー概要

本システムにおけるD言語開発業務は、以下の流れで進行します。

```
+------------------------------------------------------------------+
|                     D言語開発 業務フロー                            |
+------------------------------------------------------------------+
|                                                                    |
|  【STEP 1】エディタ起動・プロジェクト初期化                          |
|    serve-dが自動起動し、ワークスペースを初期化する                    |
|    DCD・DUBの設定を読み込み、通知を確認する                          |
|      |                                                             |
|  【STEP 2】コード編集・補完                                         |
|    コード補完、スニペット補完、自動インポートを利用して                |
|    D言語のソースコードを効率的に記述する                              |
|      |                                                             |
|  【STEP 3】コードナビゲーション・調査                                |
|    定義ジャンプ、参照検索、シンボル検索で                             |
|    コードベースを調査・理解する                                      |
|      |                                                             |
|  【STEP 4】静的解析・診断の確認                                      |
|    D-Scanner、DUBビルド、dfmtの診断結果を確認し                      |
|    コード品質を改善する                                              |
|      |                                                             |
|  【STEP 5】リファクタリング・ビルド・処理完了                         |
|    リネーム、フォーマット、インポート整理を行い                       |
|    ビルド・テストを実行して開発タスクを完了する                       |
|                                                                    |
+------------------------------------------------------------------+
```

**役割別の業務概要：**

| 役割 | 主な業務 |
|------|---------|
| **開発者（一般ユーザー）** | コード編集、補完利用、定義ジャンプ、参照検索、診断確認、ビルド・テスト実行 |
| **プロジェクト管理者** | DUB設定管理、依存関係管理、ビルド設定切り替え、DCD管理 |

### 1.4 主な機能

| 機能 | 説明 | 業務フローでの位置 |
|------|------|------------------|
| プロジェクト初期化 | エディタ起動時にワークスペースを初期化し、DCD・DUBを設定する | STEP 1 |
| コード補完 | DCD・スニペット・自動インポートによるコード補完を提供する | STEP 2 |
| シグネチャヘルプ | 関数呼び出し時にパラメータ情報をツールチップで表示する | STEP 2 |
| 定義ジャンプ | シンボルの定義元へ移動する | STEP 3 |
| 参照検索 | シンボルの全参照箇所をプロジェクト横断で検索する | STEP 3 |
| ホバー情報 | カーソル位置のシンボルのドキュメントを表示する | STEP 3 |
| シンボル検索 | ワークスペース全体からシンボルをファジー検索する | STEP 3 |
| 静的解析 | D-Scannerによるコード品質チェックを実行する | STEP 4 |
| コードフォーマット | dfmtによるコード自動整形を実行する | STEP 5 |
| リネーム | シンボルの一括リネームを実行する | STEP 5 |
| DUBビルドタスク | Run/Test/Build/Rebuildのビルドタスクを実行する | STEP 5 |
| 依存関係管理 | DUBパッケージの追加・更新・削除を行う | 随時利用 |
| DCD管理 | DCDサーバーの起動・停止・更新を行う | 随時利用 |
| 設定管理 | コンパイラ・アーキテクチャ等の設定を管理する | 随時利用 |

### 1.5 ユーザー種別

serve-dのユーザーは以下のように分類されます。

| ユーザー種別 | 説明 |
|-------------|------|
| D言語開発者 | D言語のソースコードを編集する一般ユーザー。コード補完、定義ジャンプ、静的解析などのIDE機能を日常的に利用する |
| プロジェクト管理者 | DUBプロジェクトの設定管理、依存関係管理、ビルド設定切り替えなどの管理操作を行うユーザー |

### 1.6 対応エディタ

serve-dは、LSP（Language Server Protocol）をサポートする以下のエディタで利用できます。

| エディタ | 設定方法 |
|---------|---------|
| Visual Studio Code | code-d拡張機能をインストール（推奨） |
| Vim / Neovim | LSPクライアントプラグインを設定 |
| Sublime Text | LSPパッケージを使用 |
| Emacs | lsp-modeまたはeglotを使用 |
| Helix | 内蔵LSPクライアントを使用 |
| Nova | LSP拡張を使用 |
| Lite-XL | LSPプラグインを使用 |

---

## 2. セットアップ・起動手順

### 2.1 前提条件

serve-dを利用するには以下が必要です。

| 必要なもの | 説明 |
|-----------|------|
| D言語コンパイラ | DMDまたはLDC（LDC推奨） |
| DUB | D言語パッケージマネージャ（D言語コンパイラに同梱） |
| LSP対応エディタ | Visual Studio Code、Vim、Emacs等 |

### 2.2 インストール方法

**方法1: プリビルトバイナリの取得（推奨）**

1. [GitHub Releasesページ](https://github.com/Pure-D/serve-d/releases)にアクセスします
2. お使いのOS（Windows / Linux / macOS）に対応するバイナリをダウンロードします
3. ダウンロードしたバイナリを任意のディレクトリに配置します
4. PATHにバイナリの配置先を追加します

**方法2: ソースからのビルド**

1. serve-dのソースコードを取得します
2. 以下のコマンドでビルドします

```
dub build
```

> **注意**: リリースビルドの場合は `dub build --compiler=ldc2 --build=release` を使用してください。

**方法3: Visual Studio Codeでの自動インストール**

1. Visual Studio Codeを開きます
2. 拡張機能マーケットプレイスで「code-d」を検索します
3. 「インストール」をクリックします
4. code-d拡張がserve-dを自動的にダウンロード・設定します

### 2.3 エディタでの起動

serve-dはエディタのLSPクライアントによって自動的に起動されます。手動で起動する必要はありません。

**Visual Studio Code（code-d拡張）の場合：**

1. Visual Studio Codeを起動します
2. D言語のプロジェクトフォルダを開きます
3. code-d拡張が自動的にserve-dを起動し、初期化を開始します
4. ステータスバーに進捗状況が表示されます

**コマンドライン起動オプション：**

serve-dは以下のコマンドラインオプションで動作を構成できます。

| オプション | デフォルト | 説明 |
|-----------|-----------|------|
| `-v` / `--version` | - | バージョン情報を表示して終了する |
| `--logfile` | - | ログ出力先ファイルを指定する |
| `--loglevel` | verbose（デバッグ）/ info（リリース） | ログレベルを設定する |
| `--lang` | en | GUIメッセージの言語を設定する（en / de / fr / ja / ru） |
| `-p` / `--provide` | - | エディタ拡張機能フラグを指定する |
| `-r` / `--require` | - | 必須機能セットを指定する |

### 2.4 終了方法

1. エディタを終了すると、serve-dも自動的にシャットダウンされます
2. LSPクライアントがshutdownリクエストを送信し、serve-dが全コンポーネントを停止します

> **注意**: エディタを正常に終了することで、DCDサーバーやバックグラウンドタスクも正しく停止されます。プロセスを強制終了した場合、DCDサーバーが残存する可能性があります。

---

## 3. エディタ初期画面（ワークスペース）

### 3.1 開発者向け初期画面

エディタでD言語プロジェクトを開くと、serve-dは以下の初期化処理を自動的に実行します。

1. **グローバルスタートアップ**: DCD、D-Scanner、dfmt等のコンポーネントを登録・初期化する
2. **ワークスペーススタートアップ**: プロジェクト内のdub.json/dub.sdlを検出し、DUBプロジェクトを初期化する
3. **DCDサーバー起動**: コード補完のためのDCDサーバーを起動する
4. **バックグラウンドインデックス**: ソースコードのシンボルインデックスを構築する

初期化完了後、以下の機能が利用可能になります。

| エディタ上の表示 | 提供される機能 |
|----------------|--------------|
| コード入力エリア | コード補完、シグネチャヘルプ、インレイヒント |
| サイドバー（アウトライン） | ドキュメントシンボル一覧 |
| エラー表示パネル | D-Scanner・DUB・dfmtの診断結果 |
| ステータスバー | DUB設定情報、serve-dの状態 |
| コードレンズ（インライン表示） | インポートコンパイル時間、GCプロファイル情報 |

### 3.2 プロジェクト管理者向け初期画面

プロジェクト管理者は、上記に加えて以下の操作にアクセスできます。

| 操作 | アクセス方法 |
|------|------------|
| DUB設定一覧・切り替え | コマンドパレットから `served/listConfigurations`、`served/switchConfig` |
| アーキテクチャ切り替え | コマンドパレットから `served/switchArchType` |
| ビルドタイプ切り替え | コマンドパレットから `served/switchBuildType` |
| コンパイラ切り替え | コマンドパレットから `served/switchCompiler` |
| 依存関係ツリー | code-dの依存関係ツリービューで表示 |

---

## 4. 【STEP1】プロジェクト初期化・通知確認（環境準備と通知の受信）

> **業務フローでの位置**: エディタ起動時にserve-dがプロジェクトを初期化し、必要な通知・確認ダイアログに対応するステップです。

### 4.1 プロジェクトの自動初期化

**業務シーン**: D言語プロジェクトの開発を開始する場合

**前提条件**: プロジェクトディレクトリにdub.json（またはdub.sdl）が存在すること

**やるべきこと**:
- エディタでプロジェクトフォルダを開く
- 初期化の通知・ダイアログに対応する

**システムでの操作手順**:

1. エディタでD言語プロジェクトのフォルダを開きます
2. serve-dが自動的に起動し、「グローバルスタートアップ」処理が開始されます
3. ステータスバーに進捗状況が表示されます
4. 初期化が完了すると、コード補完などのIDE機能が利用可能になります

**関連画面**: LSPサーバー初期化、グローバルスタートアップ、ワークスペーススタートアップ

### 4.2 DCD更新確認ダイアログへの対応

**業務シーン**: DCDのバージョンが古い場合に、更新を促すダイアログが表示される

**システムでの操作手順**:

1. serve-dがDCDのバージョンを確認します
2. DCDが古い場合、以下の選択肢がダイアログで表示されます
   - 「コンパイル/ダウンロード」: DCDを最新版に更新する
   - 「無視」: 更新をスキップする（既存のDCDを継続使用する）
3. 「コンパイル/ダウンロード」を選択すると、DCDの更新処理が開始されます
4. 更新の進捗がインストールログとして表示されます
5. 更新完了後、DCDサーバーが自動的に再起動されます

> **注意**: DCDを更新することで、最新のコード補完・定義ジャンプ機能を利用できます。特別な理由がなければ更新を推奨します。

### 4.3 DUB依存関係ダウンロード確認ダイアログへの対応

**業務シーン**: DUBパッケージがローカルに見つからない場合に、ダウンロードを確認するダイアログが表示される

**システムでの操作手順**:

1. プロジェクトのDUB依存関係がローカルに存在しない場合、以下の選択肢が表示されます
   - 「Upgrade」: 今回のみ依存関係をダウンロードする
   - 「Always」: 今後も常に自動ダウンロードする
   - 「Never」: ダウンロードしない
2. 「Upgrade」または「Always」を選択すると、依存関係のダウンロードが開始されます
3. ダウンロード完了後、DUBツリー初期化通知がエディタに送信されます
4. インポートパスが自動的に更新されます

### 4.4 サブプロジェクト読み込み確認ダイアログへの対応

**業務シーン**: ワークスペース内のサブプロジェクト数が閾値（デフォルト6個）を超えた場合に表示される

**システムでの操作手順**:

1. サブプロジェクト数が閾値を超えた場合、以下の選択肢が表示されます
   - 「Load」: プロジェクトを読み込む
   - 「Skip」: プロジェクトの読み込みをスキップする
2. 「Load」を選択すると、プロジェクトの読み込みが続行されます
3. 「Skip」を選択した場合、後からコマンドパレットの「served/forceLoadProjects」で強制読み込みが可能です

**注意点・Tips**:
- `manyProjectsAction` 設定で、ask（毎回確認）/ skip（自動スキップ）/ load（自動読み込み）を事前に設定できます
- `manyProjectsThreshold` 設定で閾値を変更できます

### 4.5 エラー通知の確認

初期化時に発生する可能性のあるエラー通知は以下のとおりです。

| 通知種別 | 内容 | 対処方法 |
|---------|------|---------|
| DCD起動失敗通知 | DCDサーバーの起動に失敗した | DCDの再インストールまたはパスの確認を行う |
| dubスタートアップ失敗通知 | DUBの初期化に失敗した | dub.json/dub.sdlの構文を確認する。fsworkspaceにフォールバックされる |
| コンポーネント読み込み失敗通知 | workspace-dのコンポーネント読み込みに失敗した | エディタを再起動する。解決しない場合はserve-dを再インストールする |
| 設定変更通知（エラー） | 無効な設定値が指定された | 設定値を正しい値に修正する |

**次のステップ**: 初期化が完了したら、STEP 2のコード編集・補完機能を利用して開発を進めます。

---

## 5. 【STEP2-3】コード編集・補完機能（コードの入力・編集）

> **業務フローでの位置**: 開発者がD言語のソースコードを入力・編集する際に、コード補完やシグネチャヘルプなどの支援機能を利用するステップです。

### 5.1 コード補完の利用

**業務シーン**: D言語のソースコードを編集する際に、変数名・関数名・型名等の入力を支援する

**前提条件**: serve-dが正常に初期化されていること。DCDサーバーが起動していること。

**やるべきこと**:
- コード入力時に表示される補完候補から適切な項目を選択する

**システムでの操作手順**:

1. D言語のソースファイル（.d / .di）を開きます
2. コードの入力を開始します
3. 以下のトリガー文字を入力すると、自動的に補完候補が表示されます
   - `.`（ドット）: メンバーアクセス補完
   - `=` / `*` / `+` / `-`: 演算子補完
   - `/`: パス・コメント補完
4. 補完候補リストから目的の項目を選択します（矢印キーで移動、Enterで確定）
5. 選択した項目がコードに挿入されます

**補完の種類**:

| 補完種別 | 説明 | 設定 |
|---------|------|------|
| DCD補完 | DCDエンジンによる識別子・メンバー補完 | `d.enableAutoComplete` で制御 |
| スニペット補完 | コンテキストに応じたコードテンプレート | `--provide context-snippets` で有効化 |
| 自動インポート補完 | 未インポートモジュールのシンボルを候補に含め、自動的にimport文を追加する | `d.enableAutoImportCompletions` で制御 |
| Ddocドキュメント補完 | コメント内でDdocキーワード（Params: / Returns:等）を補完する | コメントブロック内でのみ動作 |

**注意点・Tips**:
- 補完アイテムを選択すると、`completionItem/resolve`により詳細情報（ドキュメント、追加テキスト編集）が遅延解決されます
- 自動インポート補完では、`std.*` のモジュールが優先的にソートされます
- `d.enableIndex` が有効な場合、インデックスに基づくより広範な補完候補が提供されます

### 5.2 シグネチャヘルプの利用

**業務シーン**: 関数を呼び出す際に、引数の情報を確認する

**システムでの操作手順**:

1. 関数名の後に `(` を入力します
2. シグネチャヘルプのツールチップが自動的に表示されます
3. 引数の型、名前、説明が表示されます
4. 引数を入力中に `,` を入力すると、次の引数情報にハイライトが移動します
5. `)` を入力すると、シグネチャヘルプが閉じます

**トリガー文字**: `(` `[` `,`

### 5.3 コードフォーマットの利用

**業務シーン**: コードのインデントやスタイルを統一する

**システムでの操作手順**:

**ドキュメント全体のフォーマット**:

1. フォーマット対象のD言語ソースファイルを開きます
2. エディタのフォーマットコマンドを実行します（VSCode: `Shift+Alt+F`）
3. dfmt（D言語）またはsdlfmt（SDLファイル）がコード全体をフォーマットします

**選択範囲のフォーマット**:

1. フォーマットしたい範囲を選択します
2. エディタの「選択範囲のフォーマット」コマンドを実行します
3. 選択範囲のみがフォーマットされます

**注意点・Tips**:
- `d.enableFormatting` 設定でフォーマット機能の有効/無効を制御できます
- `.editorconfig` ファイルの設定がdfmtの設定を上書きします
- SDLファイル（dub.sdl等）にはsdlfmtが使用されます

### 5.4 インポート整理

**業務シーン**: import文のソートや重複排除を行う

**システムでの操作手順**:

1. D言語ソースファイルを開きます
2. import文が含まれるブロック内にカーソルを置きます
3. コマンドパレットから「Sort Imports」を実行します（またはコードアクションから選択）
4. import文がアルファベット順にソートされ、重複が除去されます
5. public importは先頭に配置されます

### 5.5 コード折りたたみの利用

**業務シーン**: 大きなソースファイルで見通しを良くするためにコードブロックを折りたたむ

**システムでの操作手順**:

1. D言語ソースファイルを開きます
2. エディタの行番号の横に表示される折りたたみアイコンをクリックします
3. 以下のブロックが折りたたみ可能です
   - 関数・クラス・構造体等のコードブロック
   - コメントブロック
   - importブロック
   - リージョン（`//region` / `//endregion`）

### 5.6 インレイヒントの利用

**業務シーン**: 型推論結果やパラメータ名をコード上にインラインで確認する

**システムでの操作手順**:

1. D言語ソースファイルを開きます
2. エディタがインレイヒントの表示をサポートしている場合、コード中に自動的に補助情報が表示されます
3. 型推論の結果がtypeヒントとして表示されます

### 5.7 DMLファイル・dietテンプレートの編集

**業務シーン**: DlangUI DMLファイルやvibe.d dietテンプレートを編集する

**DMLファイルの補完**:

1. `.dml` 拡張子のファイルを開きます
2. クラス名、プロパティ、列挙値の補完が利用可能です
3. HEXカラーコード（`#RRGGBB` / `#AARRGGBB`）にはカラーピッカーが連携します

**dietテンプレートの補完**:

1. `.dt`（diet）ファイルを開きます
2. D言語のコード部分に対する補完とシグネチャヘルプが利用可能です

**次のステップ**: コードの入力が進んだら、STEP 3のコードナビゲーション機能を使ってコードベースを調査します。

---

## 6. 【STEP3-4】コードナビゲーション・検索機能（コードの調査・参照）

> **業務フローでの位置**: 開発者がコードベースを理解・調査するために、定義ジャンプ、参照検索、シンボル検索などのナビゲーション機能を利用するステップです。

### 6.1 定義ジャンプ

**業務シーン**: 変数や関数の定義元を確認する

**前提条件**: DCDサーバーが正常に起動していること

**システムでの操作手順**:

1. 定義を確認したいシンボル（変数名、関数名、型名等）の上にカーソルを置きます
2. エディタの「定義へ移動」コマンドを実行します（VSCode: `F12` またはCtrl+クリック）
3. シンボルの定義元にジャンプします
4. 定義が別ファイルにある場合、そのファイルが自動的に開かれます

**注意点・Tips**:
- 現在のファイル内と外部ファイルの両方に対応しています
- DCDが定義位置を特定し、DCDExtが範囲を精緻化します

### 6.2 ホバー情報の表示

**業務シーン**: シンボルのドキュメントや宣言情報を素早く確認する

**システムでの操作手順**:

1. 情報を確認したいシンボルの上にマウスカーソルを移動します
2. ツールチップにシンボルのDdocドキュメントとコード宣言がMarkdown形式で表示されます
3. dfmtにより宣言が整形表示されます（60文字上限）

### 6.3 参照検索

**業務シーン**: シンボルがプロジェクト内のどこで使用されているかを確認する

**システムでの操作手順**:

1. 参照を検索したいシンボルの上にカーソルを置きます
2. エディタの「すべての参照を検索」コマンドを実行します（VSCode: `Shift+F12`）
3. プロジェクト全体でシンボルが使用されている箇所が一覧表示されます
4. 一覧から任意の参照箇所をクリックして移動できます

**注意点・Tips**:
- プロジェクト横断で非同期検索が実行されます
- DCDの定義ジャンプとインデックスのimportグラフによる再帰的テキスト検索が行われます
- `includeDeclaration` パラメータにより定義箇所を含めるかを制御できます

### 6.4 ドキュメントハイライト

**業務シーン**: 同一シンボルの出現箇所をファイル内で視覚的に確認する

**システムでの操作手順**:

1. ハイライトしたいシンボルの上にカーソルを置きます
2. 同一シンボルの全出現箇所が自動的にハイライトされます
3. 定義箇所はwriteハイライト、使用箇所はreadハイライトとして表示されます

### 6.5 ドキュメントシンボル（アウトライン）

**業務シーン**: 現在のファイル内の関数やクラスの構造を俯瞰する

**システムでの操作手順**:

1. D言語ソースファイルを開きます
2. エディタのアウトラインビュー（サイドバー）を表示します
3. ファイル内の全シンボル（関数、クラス、構造体等）が階層的に表示されます
4. 任意のシンボルをクリックして該当箇所にジャンプできます

**注意点・Tips**:
- deprecatedシンボルにはタグが付与されます
- クライアントの `hierarchicalDocumentSymbolSupport` に応じて階層表示またはフラット表示が切り替わります

### 6.6 ワークスペースシンボル検索

**業務シーン**: ワークスペース全体から特定のシンボルを検索する

**システムでの操作手順**:

1. エディタのシンボル検索コマンドを実行します（VSCode: `Ctrl+T`）
2. 検索ボックスにシンボル名（またはその一部）を入力します
3. ファジーマッチングにより候補が一覧表示されます
4. 候補を選択してジャンプします

**注意点・Tips**:
- 標準ライブラリのシンボルは除外されます
- インポート可能なシンボルのみが対象です
- IndexComponentが有効な場合のみ利用可能です

### 6.7 ファイル検索・モジュール検索

**業務シーン**: ファイル名やモジュール名からファイルを特定する

**ファイル名で検索**:

1. コマンドパレットから「served/searchFile」を実行します
2. ファイル名（またはサブフォルダを含むパス）を入力します
3. プロジェクトと依存関係（標準ライブラリ含む）からマッチするファイルが一覧表示されます

**モジュール名で検索**:

1. コマンドパレットから「served/findFilesByModule」を実行します
2. モジュール名（例: `std.stdio`）を入力します
3. 対応するファイルが一覧表示されます

**次のステップ**: コードの調査が終わったら、STEP 4-5のビルド・診断・リファクタリング機能を使って品質を確認し、開発を完了します。

---

## 7. 【STEP4-5】ビルド・診断・リファクタリング（品質管理・処理完了）

> **業務フローでの位置**: 開発者がコードの品質を確認し、リファクタリングを行い、ビルド・テストを実行して開発タスクを完了するステップです。

### 7.1 D-Scanner静的解析の確認

**業務シーン**: コードの品質問題や潜在的なバグを検出する

**システムでの操作手順**:

1. D言語ソースファイルを編集・保存します
2. D-Scannerが自動的に静的解析を実行します
3. 検出された問題がエディタの「問題」パネルに表示されます
4. エラー・警告の該当箇所には波線（下線）が表示されます
5. 波線にカーソルを合わせると、問題の詳細が表示されます

**手動でD-Scannerを実行**:

1. コマンドパレットから「served/doDscanner」を実行します
2. 指定ファイルに対してD-Scanner静的解析が実行されます

**D-Scannerの設定**:

- `d.enableLinting` でリンティング全体の有効/無効を制御します
- `d.enableStaticLinting` でD-Scanner静的解析の有効/無効を制御します
- `dscanner.ini` ファイルで個別のチェック項目を有効/無効に設定できます
- `@suppress` アノテーションで特定箇所の警告を抑制できます

### 7.2 DUBビルドエラー診断の確認

**業務シーン**: ビルド時のコンパイルエラーや警告を確認する

**システムでの操作手順**:

1. D言語ソースファイルを保存します
2. DUBビルドが自動的に実行されます
3. コンパイルエラー・警告が「問題」パネルに表示されます
4. 補足情報（「instantiated from here」等）が関連付けられて表示されます

> **注意**: DUBビルド診断には排他制御があり、二重実行は防止されます。

### 7.3 dfmtコメント診断の確認

**業務シーン**: dfmtの制御コメント（`//dfmt on` / `//dfmt off`）の冗長・無効コメントを検出する

**システムでの操作手順**:

1. D言語ソースファイルを編集します
2. 冗長または無効なdfmtコメントが警告として表示されます
3. 不要なコメントを削除して警告を解消します

**設定**: `d.enableFormatting` で制御されます。

### 7.4 コードアクション（クイックフィックス）の利用

**業務シーン**: 診断で検出された問題を自動修正する

**システムでの操作手順**:

1. 診断で検出された問題の箇所にカーソルを置きます
2. エディタの電球アイコン（コードアクション）をクリックします（またはVSCode: `Ctrl+.`）
3. 利用可能なコードアクションが一覧表示されます
4. 目的のアクションを選択して適用します

**利用可能なコードアクション**:

| アクション | 説明 |
|-----------|------|
| インポート追加 | 未定義の識別子に対して適切なimport文を自動挿入する |
| インターフェース実装 | 継承元の抽象メソッドを自動生成する |
| インポートソート | import文をアルファベット順にソートする |
| `==` を `is` に変更 | 演算子の修正提案 |
| DScanner自動修正 | D-Scannerの警告に基づく自動修正 |
| DScanner警告の抑制 | 行単位またはファイル単位でDScanner診断を無視する設定を追加する |

### 7.5 シンボルリネーム

**業務シーン**: 変数名や関数名を安全に一括変更する

**システムでの操作手順**:

1. リネームしたいシンボルの上にカーソルを置きます
2. エディタの「名前の変更」コマンドを実行します（VSCode: `F2`）
3. 新しい名前を入力します
4. プロジェクト内の全出現箇所が自動的に更新されます

**注意点・Tips**:
- リネームは定義箇所（write）でのみ実行可能です
- 使用箇所（read）でリネームを試みた場合はエラーになります
- `prepareRename` によりリネーム可能かどうかの事前判定が行われます

### 7.6 ビルドタスクの実行

**業務シーン**: プロジェクトのビルド、実行、テストを行う

**システムでの操作手順**:

1. コマンドパレットから「served/buildTasks」を実行します
2. 以下のビルドタスクが一覧表示されます

| タスク | 説明 |
|-------|------|
| Run | プロジェクトを実行する |
| Build | プロジェクトをビルドする |
| Rebuild | プロジェクトをクリーンしてからリビルドする |
| Test | プロジェクトのユニットテストを実行する |

3. 実行したいタスクを選択します
4. ビルドの結果がターミナルに表示されます
5. エラーが発生した場合は「問題」パネルに診断結果が表示されます

### 7.7 ユニットテストの検出・実行

**業務シーン**: プロジェクト内のユニットテストを検出し、実行する

**前提条件**: `--provide test-runner` オプションが有効であること

**システムでの操作手順**:

1. ファイル保存時にユニットテストが自動的に検出されます
2. 検出されたテストが `coded/pushProjectTests` 通知でエディタに送信されます
3. エディタのテストランナーUI（対応している場合）でテストが表示されます

### 7.8 コードレンズの確認

**業務シーン**: コード上のインライン情報を確認する

**システムでの操作手順**:

1. D言語ソースファイルを開きます
2. 以下の情報がコードレンズとしてインラインで表示されます

| コードレンズ | 説明 | 設定 |
|------------|------|------|
| インポートコンパイル時間 | import文のコンパイルにかかる時間を表示する | `d.enableDMDImportTiming` で制御 |
| GCプロファイラデコレーション | profilegc.logのメモリ割当量/回数を表示する | `d.enableGCProfilerDecorations` で制御 |

**注意点・Tips**:
- インポートコンパイル時間が10ms未満の場合は「影響なし」と表示されます
- GCプロファイラはprofilegc.logファイルが存在する場合のみ動作します

**次のステップ**: ビルド・テストが成功し、コード品質に問題がなければ、開発タスクが完了です。

---

## 8. DUB依存関係管理機能

### 8.1 依存関係の一覧表示

**業務シーン**: プロジェクトが使用しているDUBパッケージを確認する

**システムでの操作手順**:

1. コマンドパレットから「served/listDependencies」を実行します
2. パッケージ名を入力します（空の場合はルート依存関係が表示されます）
3. 以下の情報が一覧表示されます
   - パッケージ名
   - インストールバージョン
   - パス
   - 説明
   - ライセンス
   - サブパッケージの有無

### 8.2 依存関係の追加

**業務シーン**: プロジェクトに新しいDUBパッケージを追加する

**システムでの操作手順**:

1. コマンドパレットから「served/installDependency」を実行します
2. パッケージ名とバージョンを指定します
3. DUBレシピファイル（dub.json または dub.sdl）に依存関係が追加されます
4. `dub upgrade` が自動的に実行されます
5. インポートパスが自動的に更新されます
6. DUBツリー更新通知がエディタに送信されます

### 8.3 依存関係の更新

**業務シーン**: 既存のDUBパッケージのバージョンを更新する

**システムでの操作手順**:

1. コマンドパレットから「served/updateDependency」を実行します
2. パッケージ名と新しいバージョンを指定します
3. DUBレシピファイルのバージョンが更新されます
4. `dub upgrade` が自動的に実行されます
5. インポートパスが自動的に更新されます

### 8.4 依存関係の削除

**業務シーン**: 不要になったDUBパッケージを削除する

**システムでの操作手順**:

1. コマンドパレットから「served/uninstallDependency」を実行します
2. 削除するパッケージ名を指定します
3. DUBレシピファイルから依存関係が削除されます
4. `dub upgrade` が自動的に実行されます
5. インポートパスが自動的に更新されます

### 8.5 DUBレシピフォーマット変換

**業務シーン**: dub.jsonとdub.sdlを相互変換する

**システムでの操作手順**:

1. 変換対象のDUBレシピファイル（dub.jsonまたはdub.sdl）を開きます
2. コマンドパレットから「served/convertDubFormat」を実行します
3. 変換先のフォーマット（jsonまたはsdl）を指定します
4. 変換が成功すると、`workspace/applyEdit` により新しいファイルが作成されます

> **注意**: 変換に失敗した場合はエラーメッセージが表示されます。

### 8.6 インポートパスの手動更新

**業務シーン**: DUBの依存関係を手動で更新した後にインポートパスを同期する

**システムでの操作手順**:

1. コマンドパレットから「served/updateImports」を実行します
2. DUB依存関係がファイルシステムからリフレッシュされます
3. DCDのインポートパスが更新されます
4. DUBツリー更新通知がエディタに送信されます

---

## 9. DCD管理・設定機能

### 9.1 DCDサーバーの再起動

**業務シーン**: DCDサーバーが応答しなくなった場合や、設定変更後に再起動する

**システムでの操作手順**:

1. コマンドパレットから「served/restartServer」を実行します
2. 全DCDサーバーインスタンスが再起動されます
3. 再起動完了後、コード補完や定義ジャンプが再び利用可能になります

### 9.2 DCDサーバーの停止

**業務シーン**: DCDサーバーを明示的に停止する

**システムでの操作手順**:

1. コマンドパレットから「served/killServer」を実行します
2. 全DCDサーバーインスタンスが停止します

> **注意**: DCDサーバーを停止すると、コード補完や定義ジャンプが利用できなくなります。再度利用するには「served/restartServer」で再起動してください。停止時は2秒のタイムアウトで強制killされます。

### 9.3 DCDの更新

**業務シーン**: DCDを最新バージョンに更新する

**システムでの操作手順**:

1. コマンドパレットから「served/updateDCD」を実行します
2. 更新方法が自動的に選択されます
   - Windows/Linux/macOS（x86_64）: プリビルトバイナリをダウンロード
   - その他のプラットフォーム: ソースからコンパイル
3. 進捗がインストールログ通知（`coded/logInstall`）として表示されます
4. 更新完了後、DCDパスの設定が自動的に更新されます
5. DCDサーバーが自動的に再起動されます

### 9.4 サーバー情報の取得

**業務シーン**: serve-dの現在の状態や設定を確認する

**システムでの操作手順**:

1. コマンドパレットから「served/getInfo」を実行します
2. 以下の情報が返却されます
   - サーバーバージョン
   - 現在の設定
   - モジュールインデックスの内容
   - ワークスペースの状態
   - 実行中のタスク一覧

---

## 10. カスタマイズ・設定管理機能

### 10.1 DUBビルド設定の切り替え

**業務シーン**: プロジェクトのビルド設定（configuration）を切り替える

**システムでの操作手順**:

1. コマンドパレットから「served/listConfigurations」を実行して利用可能な設定を確認します
2. コマンドパレットから「served/switchConfig」を実行します
3. 切り替え先の設定名を入力します
4. ビルド設定が切り替わり、関連するインポートパスが更新されます

**現在の設定を確認**: コマンドパレットから「served/getConfig」を実行します

### 10.2 アーキテクチャの切り替え

**業務シーン**: ターゲットアーキテクチャ（x86, x86_64等）を変更する

**システムでの操作手順**:

1. コマンドパレットから「served/listArchTypes」を実行して利用可能なアーキテクチャを確認します
2. コマンドパレットから「served/switchArchType」を実行します
3. 切り替え先のアーキテクチャ名を入力します
4. アーキテクチャが切り替わります

**現在のアーキテクチャを確認**: コマンドパレットから「served/getArchType」を実行します

### 10.3 ビルドタイプの切り替え

**業務シーン**: ビルドタイプ（debug, release等）を変更する

**システムでの操作手順**:

1. コマンドパレットから「served/listBuildTypes」を実行して利用可能なビルドタイプを確認します
2. コマンドパレットから「served/switchBuildType」を実行します
3. 切り替え先のビルドタイプ名を入力します
4. ビルドタイプが切り替わります

**現在のビルドタイプを確認**: コマンドパレットから「served/getBuildType」を実行します

### 10.4 コンパイラの切り替え

**業務シーン**: 使用するD言語コンパイラ（DMD, LDC等）を変更する

**システムでの操作手順**:

1. コマンドパレットから「served/switchCompiler」を実行します
2. 切り替え先のコンパイラ名を入力します（例: `dmd`, `ldc2`）
3. コンパイラが切り替わり、DUBのビルド設定に反映されます

**現在のコンパイラを確認**: コマンドパレットから「served/getCompiler」を実行します

### 10.5 D-Scanner設定の確認・変更

**業務シーン**: D-Scannerの静的解析ルールを確認・変更する

**システムでの操作手順**:

1. コマンドパレットから「served/getDscannerConfig」を実行します
2. 現在のD-Scanner設定が表示されます（各セクションとfeatureの有効/無効状態）
3. 設定を変更するには、プロジェクトルートに `dscanner.ini` ファイルを配置します
4. 各featureは以下の状態に設定できます
   - `enabled`: 有効
   - `disabled`: 無効
   - `skip-unittest`: ユニットテスト内では無効

### 10.6 アクティブDUB設定の取得

**業務シーン**: 現在のDUBプロジェクトの詳細設定を確認する

**システムでの操作手順**:

1. コマンドパレットから「served/getActiveDubConfig」を実行します
2. 以下の詳細情報が返却されます
   - パッケージパス、パッケージ名
   - ターゲットパス、ターゲット名
   - dflags、lflags、libs
   - ソースファイル一覧
   - インポートパス一覧
   - バージョン情報

### 10.7 多言語設定

**業務シーン**: serve-dのGUIメッセージの表示言語を変更する

**設定方法**:

- serve-d起動時に `--lang` オプションで言語を指定します
- 対応言語: en（英語）、de（ドイツ語）、fr（フランス語）、ja（日本語）、ru（ロシア語）
- 未指定の場合は英語がデフォルトです
- Mozillaの複数形ルールに準拠した複数形処理が含まれます

---

## 11. 日常業務の流れ

本セクションでは、業務フローに沿った日常業務の流れを説明します。

```
業務フロー概要（再掲）
+------------------------------------------------------------------+
【STEP 1】エディタ起動・プロジェクト初期化 -> 4章参照
    |
【STEP 2】コード編集・補完 -> 5章参照
    |
【STEP 3】コードナビゲーション・調査 -> 6章参照
    |
【STEP 4】静的解析・診断の確認 -> 7章参照
    |
【STEP 5】リファクタリング・ビルド・処理完了 -> 7章参照
+------------------------------------------------------------------+
```

### 11.1 【開発者】STEP1: プロジェクトの起動と初期化

D言語開発プロジェクトの作業を開始するための手順です。

1. 使用するエディタを起動します
2. D言語プロジェクトのフォルダを「ファイル」>「フォルダーを開く」で開きます
3. serve-dの初期化が完了するのを待ちます（ステータスバーで確認）
4. DCD更新確認ダイアログが表示された場合は、4.2の手順に従って対応します
5. DUB依存関係ダウンロード確認ダイアログが表示された場合は、4.3の手順に従って対応します
6. 初期化が完了したら、コード補完が利用可能になったことを確認します

### 11.2 【開発者】STEP2: コードの編集と補完の利用

効率的にD言語コードを記述するための手順です。

1. 編集対象のDソースファイルを開きます
2. コード入力時に表示される補完候補を活用します
   - `.` を入力してメンバー補完を利用します
   - 関数名の後に `(` を入力してシグネチャヘルプを確認します
3. 自動インポート補完で提案されたimport文を確認し、必要に応じて適用します
4. スニペット補完を利用して定型的なコードパターンを素早く入力します
5. 定期的にファイルを保存し、診断結果を確認します

### 11.3 【開発者】STEP3: コードの調査と理解

既存のコードベースを理解するための手順です。

1. 調査対象のシンボルの上にカーソルを置きます
2. ホバー情報で概要を確認します
3. `F12`（定義ジャンプ）で定義元を確認します
4. `Shift+F12`（参照検索）で使用箇所を確認します
5. `Ctrl+T`（ワークスペースシンボル検索）で関連するシンボルを検索します
6. アウトラインビューでファイル全体の構造を把握します

### 11.4 【開発者】STEP4-5: 品質管理とタスク完了

コード品質を確認し、開発タスクを完了するための手順です。

1. ファイルを保存してD-Scannerの診断結果を確認します
2. 「問題」パネルに表示されたエラー・警告を確認します
3. コードアクション（電球アイコン）を利用して自動修正を適用します
4. 必要に応じてコードフォーマット（`Shift+Alt+F`）を実行します
5. リネームが必要な場合は `F2` で安全にリネームします
6. ビルドタスクを実行してコンパイルが成功することを確認します
7. テストタスクを実行してユニットテストが全て通過することを確認します

### 11.5 【プロジェクト管理者】プロジェクト設定の管理

1. 新しい依存関係が必要な場合は、8.2の手順で追加します
2. 依存関係のバージョンアップが必要な場合は、8.3の手順で更新します
3. ビルド設定やアーキテクチャの変更が必要な場合は、10章の手順で切り替えます
4. DCDの更新が必要な場合は、9.3の手順で更新します

---

## 12. よくある質問と対処法

### 12.1 コード補完に関するQ&A

**Q: コード補完が表示されません**

A: 以下を確認してください。
- DCDサーバーが正常に起動しているか確認してください。コマンドパレットから「served/restartServer」で再起動を試みてください。
- `d.enableAutoComplete` 設定が `true` になっているか確認してください。
- D言語ソースファイル（.d / .di）を編集しているか確認してください。

**Q: 自動インポート補完が動作しません**

A: 以下を確認してください。
- `d.enableIndex` 設定が `true` になっているか確認してください。
- `d.enableAutoImportCompletions` 設定が `true` になっているか確認してください。
- バックグラウンドインデックスが完了しているか確認してください（初回は時間がかかります）。

### 12.2 ナビゲーションに関するQ&A

**Q: 定義ジャンプが機能しません**

A: 以下を確認してください。
- DCDサーバーが正常に起動しているか確認してください。
- 対象のシンボルが有効なD言語の識別子であるか確認してください。
- プロジェクトのインポートパスが正しく設定されているか確認してください。コマンドパレットから「served/updateImports」を実行してインポートパスを更新してください。

**Q: ワークスペースシンボル検索の結果が少ないです**

A: IndexComponentが有効であることを確認してください。`d.enableIndex` 設定が `true` になっている必要があります。また、バックグラウンドインデックスが完了するまで待ってください。

### 12.3 診断・ビルドに関するQ&A

**Q: D-Scannerの警告が多すぎます**

A: プロジェクトルートに `dscanner.ini` ファイルを配置し、不要なチェック項目を `disabled` に設定してください。また、特定の行に対しては `@suppress` アノテーションを使用して警告を抑制できます。コードアクションからも「DScanner警告を無効化」を選択できます。

**Q: ビルドが成功しているのにエラーが表示されます**

A: 以下を試してください。
- コマンドパレットから「served/updateImports」を実行してインポートパスを更新してください。
- DCDサーバーを再起動してください（「served/restartServer」）。
- エディタを再起動してください。

---

## 13. トラブルシューティング

### 13.1 エラーメッセージと対処法

| エラー・症状 | 原因 | 対処法 |
|------------|------|--------|
| DCD起動失敗通知 | DCDバイナリが見つからない、またはバージョン不整合 | DCDを再インストールする。「served/updateDCD」を実行するか、パスを手動で設定する |
| dubスタートアップ失敗 | dub.json/dub.sdlの構文エラー | DUBレシピファイルの構文を修正する。fsworkspaceにフォールバックされる |
| コンポーネント読み込み失敗 | workspace-dのコンポーネントの依存関係が不足 | エディタを再起動する。解決しない場合はserve-dを再インストールする |
| 無効な設定値エラー | configuration/archType/buildType/compilerに無効な値を指定 | 正しい値に修正する。利用可能な値はlistConfigurations等で確認する |
| コード補完が遅い | ファイルサイズが大きい、または依存関係が多い | 50KiB超のファイルでは500msの遅延が発生する。大きなファイルの分割を検討する |
| インデックス構築が完了しない | プロジェクトのソースファイルが多い | バックグラウンドでの処理完了を待つ。ディスクキャッシュ（symbolindex.bin）が使用される |

### 13.2 よくあるトラブルと解決方法

**serve-dが起動しない**

1. serve-dのバイナリが正しくインストールされているか確認します
2. エディタのLSP設定でserve-dのパスが正しく指定されているか確認します
3. コマンドラインで `serve-d --version` を実行してバージョンが表示されるか確認します
4. `--logfile` オプションを指定してログファイルを確認します

**DCDサーバーが応答しない**

1. コマンドパレットから「served/restartServer」でDCDサーバーを再起動します
2. それでも解決しない場合は「served/killServer」で停止してから再起動します
3. DCDのバージョンが正しいか確認します（serve-dとの互換性）
4. ログファイルでエラー情報を確認します

**DUBプロジェクトの初期化に失敗する**

1. dub.json/dub.sdlの構文が正しいか確認します
2. DUBがインストールされており、PATHに含まれているか確認します
3. ネットワーク接続を確認します（依存関係のダウンロードに必要）
4. コマンドラインで `dub upgrade` を手動実行して問題を確認します

**大規模プロジェクトでの起動が遅い**

1. `manyProjectsThreshold` 設定を調整して、不要なサブプロジェクトの読み込みをスキップします
2. `manyProjectsAction` を `skip` に設定して自動的にスキップさせます
3. `disabledRootGlobs` 設定で不要なディレクトリを除外します
4. serve-dの遅延読み込み（LazyWorkspaceD/LazyInstance）パターンにより、コンポーネントは実際にアクセスされるまで初期化されないため、起動時間は最小限に抑えられています

### 13.3 サポートへの連絡方法

serve-dに関する問題や質問は以下の方法で報告・問い合わせできます。

| 連絡方法 | URL・連絡先 |
|---------|-----------|
| GitHub Issues | [https://github.com/Pure-D/serve-d/issues/new](https://github.com/Pure-D/serve-d/issues/new) |
| Discord | [Pure-D Discord](https://discord.gg/Bstj9bx) |
| メール（プロフェッショナルサポート） | dlang@wfr.software |

**Issue報告時に含めるべき情報**:
- serve-dのバージョン（`serve-d --version`）
- 使用しているエディタとそのバージョン
- 使用しているOSとアーキテクチャ
- 問題の再現手順
- エラーログ（`--logfile` で出力されたログ）

---

## 改訂履歴

| 版数 | 改訂日 | 改訂内容 |
|-----|--------|---------|
| 1.0 | 2026-02-20 | 初版作成 |

---

*本マニュアルは、serve-d（D言語LSPサーバー）のエンドユーザー向け業務運用マニュアルです。*
*システムの更新により、操作方法や機能が変更される場合があります。*
