# 機能設計書 22-space-vim-theme

## 概要

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

### 本機能の処理概要

space-vim-themeは、space-vim-darkの後継カラースキームであり、ダーク/ライト両方のテーマに対応したVim/NeoVim向けカラースキームである。ユーザーの作業環境（明るい場所・暗い場所）や好みに応じて、適切なテーマを選択できる柔軟性を提供する。

**業務上の目的・背景**：開発者の作業環境は多様であり、昼間の明るいオフィスと夜間の暗い自宅では最適なテーマが異なる。ダーク/ライト両対応のテーマを提供することで、一貫した視覚体験を維持しながら、環境に応じた切り替えを可能にする。space-vim-darkの後継として、より柔軟なテーマ選択を実現する。

**機能の利用シーン**：
- Vim/NeoVim起動時にデフォルトテーマとして優先的に適用される
- ユーザーが`:colorscheme space_vim_theme`コマンドでテーマを切り替える
- `set background=dark`または`set background=light`で明暗を切り替える

**主要な処理内容**：
1. spacevimレイヤーでプラグインを登録
2. Vim起動時にspace_vim_themeを優先的に適用（フォールバックでspace-vim-dark）
3. backgroundオプションに応じてダーク/ライトテーマを自動選択
4. シンタックスハイライト、UI要素の色を統一的に定義

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

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

## 関連画面

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

## 機能種別

UI表示 / テーマ適用

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| colorscheme | String | No | カラースキーム名 | space_vim_theme |
| background | String | No | 背景色モード | dark / light |

### 入力データソース

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

## 出力仕様

### 出力データ

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

### 出力先

- Vim画面全体の色表示

## 処理フロー

### 処理シーケンス

```
1. spacevimレイヤー読み込み
   └─ packages.vimでspace-vim-themeプラグインを登録
2. config.vimでカラースキーム適用
   └─ try文でcolor space_vim_themeを実行
3. backgroundオプション確認
   └─ dark/lightに応じた色セットを適用
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{background設定?}
    H -->|dark| I[ダークテーマ適用]
    H -->|light| J[ライトテーマ適用]
    I --> K[完了]
    J --> K
    G --> K
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-22-01 | 優先適用 | space_vim_themeはspace-vim-darkより優先して適用 | テーマ適用時 |
| BR-22-02 | ダーク/ライト切替 | backgroundオプションで明暗を動的に切り替え可能 | 常時 |

### 計算ロジック

なし

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

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

データベース操作なし

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

該当なし

## エラー処理

### エラーケース一覧

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

### リトライ仕様

なし

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

該当なし

## パフォーマンス要件

- カラースキーム適用は起動時に1回のみ実行
- background切り替えは即座に反映されること

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

なし

## 備考

- space-vim-themeはspace-vim-darkの後継
- True Color（24bit）推奨、256色ターミナルでもサポート

---

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

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

### 推奨読解順序

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

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

**読解のコツ**: space-vim-themeはspace-vim-darkと同時に登録される。

**主要処理フロー**:
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行目**: `try` - エラーハンドリング開始
- **65行目**: `color space_vim_theme` - space_vim_themeを優先適用
- **66行目**: `catch` - エラー発生時
- **67行目**: `silent! color space-vim-dark` - フォールバック処理
- **68行目**: `endtry` - エラーハンドリング終了

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

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

### データフロー図

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

spacevimレイヤー ───▶ packages.vim登録 ───▶ プラグイン読み込み
                         │
                         ▼
                    config.vim ───▶ テーマ適用
                         │
                         ▼
                 background設定 ───▶ ダーク/ライト選択 ───▶ 画面表示
```

### 関連ファイル一覧

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