# 機能設計書 21-space-vim-dark

## 概要

本ドキュメントは、space-vimにおけるspace-vim-darkカラースキーム機能の設計仕様を定義する。

### 本機能の処理概要

space-vim-darkは、Spacemacsのダークテーマを模したVim/NeoVim向けカラースキームである。エディタの視認性を向上させ、長時間のコーディング作業における眼精疲労を軽減することを目的としている。

**業務上の目的・背景**：開発者が長時間コーディング作業を行う際、適切なカラースキームは視認性と作業効率に大きく影響する。Spacemacsで人気のあるダークテーマをVim環境でも利用可能にすることで、Spacemacsユーザーがスムーズにspace-vimへ移行できるようにする。また、ダークテーマは目の疲れを軽減し、集中力を維持しやすい環境を提供する。

**機能の利用シーン**：
- Vim/NeoVim起動時にデフォルトテーマとして自動適用される
- ユーザーが`:colorscheme space-vim-dark`コマンドを実行してテーマを切り替える
- 夜間や暗い環境での作業時に、目に優しいダークテーマを使用する

**主要な処理内容**：
1. space-vimのspacevimレイヤー読み込み時にプラグインを登録
2. Vim起動時にcolor space_vim_themeまたはspace-vim-darkコマンドでテーマを適用
3. シンタックスハイライト、UI要素（ステータスライン、行番号など）の色を定義
4. 256色ターミナルとTrue Color（24bit）の両方に対応した色設定を提供

**関連システム・外部連携**：
- vim-airline/lightlineとの連携（ステータスラインテーマ）
- Terminal emulator（256色/True Color対応）
- liuchengxu/space-vim-dark プラグイン

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

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 14 | Airline（ステータスライン） | 補助機能 | space-vim-darkテーマとの連携 |

## 機能種別

UI表示 / テーマ適用

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| colorscheme | String | No | カラースキーム名 | space-vim-dark |

### 入力データソース

- Vimコマンド（`:colorscheme`コマンド）
- spacevim/config.vimでの自動設定

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ハイライトグループ | Vim highlight | シンタックスハイライトの色定義 |
| UIカラー | Vim highlight | UI要素の色定義 |

### 出力先

- Vim画面全体の色表示

## 処理フロー

### 処理シーケンス

```
1. spacevimレイヤー読み込み
   └─ packages.vimでspace-vim-darkプラグインを登録
2. config.vimでカラースキーム適用
   └─ color space_vim_themeまたはspace-vim-darkを実行
3. カラースキームファイル読み込み
   └─ colors/space-vim-dark.vimが読み込まれる
4. ハイライトグループ定義
   └─ 各シンタックス要素、UI要素の色を設定
```

### フローチャート

```mermaid
flowchart TD
    A[Vim起動] --> B[spacevimレイヤー読み込み]
    B --> C[packages.vimでプラグイン登録]
    C --> D[config.vim実行]
    D --> E{space_vim_theme存在?}
    E -->|Yes| F[color space_vim_theme適用]
    E -->|No| G[color space-vim-dark適用]
    F --> H[ハイライトグループ設定完了]
    G --> H
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-21-01 | フォールバック | space_vim_themeがない場合はspace-vim-darkにフォールバック | テーマ適用時 |
| BR-21-02 | 余白ハイライト | 末尾の空白文字を赤色下線で表示 | 常時 |

### 計算ロジック

なし

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

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

データベース操作なし

### テーブル別操作詳細

該当なし

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| E-21-01 | カラースキーム未検出 | space_vim_themeが存在しない | space-vim-darkにフォールバック |

### リトライ仕様

なし

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

該当なし

## パフォーマンス要件

- カラースキーム適用は起動時に1回のみ実行
- 即座に適用されること

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

なし

## 備考

- space-vim-themeはspace-vim-darkの後継であり、ダーク/ライト両対応
- True Color非対応ターミナルでは256色モードで表示

---

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

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

### 推奨読解順序

#### Step 1: プラグイン登録を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | packages.vim | `layers/+distributions/spacevim/packages.vim` | space-vim-darkプラグインの登録処理 |

**読解のコツ**: `MP`マクロはvim-plugの`Plug`コマンドのラッパーである。

**主要処理フロー**:
1. **1行目**: `MP 'liuchengxu/space-vim-dark'` - space-vim-darkプラグインを登録
2. **2行目**: `MP 'liuchengxu/space-vim-theme'` - space-vim-themeプラグインを登録

#### Step 2: テーマ適用処理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.vim | `layers/+distributions/spacevim/config.vim` | カラースキーム適用ロジック |

**主要処理フロー**:
- **64-68行目**: try-catch文でspace_vim_themeを適用、失敗時はspace-vim-darkにフォールバック
- **71-72行目**: ExtraWhitespaceハイライトグループで末尾空白を強調表示

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

```
spacevim#bootstrap()
    │
    ├─ layers/+distributions/spacevim/packages.vim
    │      └─ MP 'liuchengxu/space-vim-dark'
    │
    └─ layers/+distributions/spacevim/config.vim
           └─ color space_vim_theme / space-vim-dark
```

### データフロー図

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

spacevimレイヤー ───▶ packages.vim登録 ───▶ プラグイン読み込み
                         │
                         ▼
                    config.vim ───▶ カラースキーム適用 ───▶ 画面表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| packages.vim | `layers/+distributions/spacevim/packages.vim` | ソース | プラグイン登録 |
| config.vim | `layers/+distributions/spacevim/config.vim` | ソース | テーマ適用処理 |
