# 機能設計書 24-Doomテーマ・視覚スタイル

## 概要

本ドキュメントは、Doom EmacsにおけるDoomテーマ・視覚スタイル機能の設計を記述する。doom-themesパッケージを中心に、Emacsの視覚的外観を統一的に管理し、美しく一貫性のあるUIを提供する機能群である。

### 本機能の処理概要

**業務上の目的・背景**：開発者が長時間のコーディング作業を快適に行えるよう、目に優しく美しいカラースキームを提供する。doom-themesは30以上のテーマを含み、ダークテーマ・ライトテーマ双方をサポートする。また、solaire-modeとの連携により、エディタ領域と非エディタ領域（サイドバー、ポップアップ等）の視覚的な区別を実現する。

**機能の利用シーン**：Emacs起動時のテーマ適用、テーマの動的切り替え（`load-theme`、`consult-theme`）、Org-modeでの視覚的強調、ファイルツリー（neotree/treemacs）でのファイルアイコン表示など。

**主要な処理内容**：
1. doom-themesパッケージによるテーマ定義とロード
2. solaire-modeによる実バッファと仮想バッファの視覚的区別
3. Org-mode向けの視覚的強調設定（doom-themes-org-config）
4. ポップアップバッファでのsolaire-mode自動有効化
5. テーマロード時のフック実行

**関連システム・外部連携**：Org-modeとの連携による視覚的強調、neotree/treemacsとの連携によるファイルアイコン表示、pos-tipとの連携によるツールチップ表示。

**権限による制御**：本機能は全ユーザーが利用可能であり、権限による制御は行わない。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 27 | Doom Theme | 主機能 | doom-themesによるテーマ管理 |
| 1 | Doom Dashboard | 補助機能 | ダッシュボードのテーマ適用、フェイス定義 |

## 機能種別

UI設定 / テーマ管理 / 視覚スタイル

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| doom-theme | symbol | No | 使用するテーマ名（デフォルト: doom-one） | doom-themesで定義されたテーマ |
| pos-tip-internal-border-width | integer | No | ツールチップの内部ボーダー幅（デフォルト: 6） | 0以上の整数 |
| pos-tip-border-width | integer | No | ツールチップのボーダー幅（デフォルト: 1） | 0以上の整数 |

### 入力データソース

- ユーザー設定（config.el）
- Emacsテーマシステム
- doom-load-theme-hook

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| フェイス定義 | face | バッファ、モードライン、ポップアップ等の色設定 |
| フレーム設定 | frame-parameter | フレームの背景色、フォアグラウンド色 |

### 出力先

- Emacsフレームとウィンドウの視覚的外観
- すべてのバッファのシンタックスハイライト

## 処理フロー

### 処理シーケンス

```
1. Doom Emacs起動
   └─ doom-init-ui-hookの実行
2. doom-themesパッケージのロード
   └─ doom-themeの値に基づくテーマロード
3. doom-load-theme-hookの実行
   └─ doom-themes-org-configの呼び出し
4. solaire-global-modeの有効化
   └─ バッファ種別に応じた背景色調整
5. テーマ適用完了
   └─ すべてのフェイスが更新
```

### フローチャート

```mermaid
flowchart TD
    A[Emacs起動] --> B[doom-init-ui-hook]
    B --> C[doom-themes ロード]
    C --> D{doom-theme設定}
    D -->|設定あり| E[load-theme実行]
    D -->|設定なし| F[doom-one適用]
    E --> G[doom-load-theme-hook]
    F --> G
    G --> H[doom-themes-org-config]
    H --> I[solaire-global-mode有効化]
    I --> J[テーマ適用完了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-24-01 | デフォルトテーマ | doom-themeが未設定の場合、doom-oneを使用 | doom-theme変数がnil |
| BR-24-02 | Org-mode統合 | テーマロード時にdoom-themes-org-configを実行 | doom-load-theme-hook |
| BR-24-03 | solaire自動適用 | ポップアップバッファでsolaire-modeを有効化 | +popup-buffer-mode有効時 |

### 計算ロジック

特になし

## データベース操作仕様

本機能はデータベース操作を行わない。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| ERR-24-01 | テーマ未検出 | 指定されたテーマが存在しない | デフォルトテーマにフォールバック |

### リトライ仕様

リトライ処理は実装されていない

## トランザクション仕様

該当なし

## パフォーマンス要件

- テーマロードは起動時に1回のみ実行
- solaire-modeはバッファ作成時に軽量な処理のみ実行

## セキュリティ考慮事項

- テーマファイルはElispコードであり、信頼できるソースからのみロード
- doom-themesパッケージはstraight.elで管理されたバージョンを使用

## 備考

- doom-themesには30以上のテーマが含まれる（doom-one、doom-dracula、doom-solarized-light等）
- テーマは`M-x load-theme`または`M-x consult-theme`で動的に切り替え可能

---

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

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

### 推奨読解順序

#### Step 1: 設定を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.el | `modules/ui/doom/config.el` | doom-themesとsolaire-modeの設定 |
| 1-2 | packages.el | `modules/ui/doom/packages.el` | 依存パッケージの定義 |

**読解のコツ**: `use-package!`の`:hook`でフック登録を、`:init`で初期設定を確認する。

**主要処理フロー**:
- **4-5行目**: pos-tip設定（ツールチップのボーダー）
- **8-18行目**: doom-themes設定（doom-theme変数、org-config統合）
- **21-23行目**: solaire-mode設定（テーマロード時とポップアップ時の有効化）

#### Step 2: パッケージ依存を確認する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | packages.el | `modules/ui/doom/packages.el` | doom-themesとsolaire-modeのバージョン固定 |

**主要処理フロー**:
- **4行目**: doom-themesパッケージのpin
- **5行目**: solaire-modeパッケージのpin

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

```
doom-init-ui-hook
    │
    ├─ doom-themes (use-package)
    │      ├─ doom-load-theme-hook
    │      │      └─ doom-themes-org-config
    │      └─ load-theme (doom-theme変数)
    │
    └─ solaire-mode (use-package)
           ├─ doom-load-theme-hook
           │      └─ solaire-global-mode
           └─ +popup-buffer-mode-hook
                  └─ turn-on-solaire-mode
```

### データフロー図

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

doom-theme変数 ───▶ load-theme ───▶ フェイス定義 ───▶ バッファ表示

doom-load-theme-hook
       │
       ├─▶ doom-themes-org-config ───▶ Org-mode視覚設定
       │
       └─▶ solaire-global-mode ───▶ バッファ背景色調整
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/ui/doom/config.el` | ソース | メイン設定ファイル |
| packages.el | `modules/ui/doom/packages.el` | 設定 | パッケージ依存定義 |
