# 画面設計書 18-Minimap

## 概要

本ドキュメントは、Doom EmacsにおけるMinimap（ミニマップ）画面の設計仕様を定義するものである。demapパッケージを利用したバッファの縮小プレビュー表示について、その表示仕様と操作方法を記載する。

### 本画面の処理概要

Minimap画面は、現在のバッファを縮小して表示するサイドパネルであり、コードの全体像把握とナビゲーションを支援する機能である。

**業務上の目的・背景**：大きなソースコードファイルを編集する際、ファイル全体の構造を把握することが困難な場合がある。本機能は、VSCodeやSublime Textで一般的なミニマップ機能をEmacsに提供し、コードの全体像を視覚的に確認しながら効率的にナビゲーションできるようにする。特に数百〜数千行のファイルでの作業効率向上に寄与する。

**画面へのアクセス方法**：`demap`コマンドまたはミニマップ関連コマンドでミニマップを表示。サイドウィンドウとして開く。

**主要な操作・処理内容**：
1. バッファの縮小プレビュー表示
2. 現在表示範囲のハイライト
3. ミニマップクリックによるジャンプ
4. 自動スクロール同期

**画面遷移**：ミニマップはメインバッファのサイドパネルとして表示される。メインバッファの変更に追従してプレビューが更新される。

**権限による表示制御**：本機能に権限による表示制御はない。全ユーザーが同一の機能を利用可能である。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 31 | ミニマップ表示 | 主機能 | バッファの縮小プレビュー表示 |

## 画面種別

サイドパネル（プレビュー）

## URL/ルーティング

Emacsモード: ミニマップ専用モード（demapパッケージ）
バッファ名: ミニマップ用バッファ

## 入出力項目

| 項目名 | 入力/出力 | データ型 | 説明 |
|--------|----------|---------|------|
| ソースバッファ | 入力 | バッファ | プレビュー対象のバッファ |
| 表示範囲 | 入力 | 範囲 | ソースバッファの現在表示範囲 |
| 縮小プレビュー | 出力 | ビットマップ | ソースバッファの縮小表示 |
| 範囲ハイライト | 出力 | オーバーレイ | 現在表示範囲を示すハイライト |

## 表示項目

| 項目名 | 表示位置 | 説明 |
|--------|---------|------|
| 縮小コード | 全体 | ソースバッファの縮小表示 |
| 可視範囲 | ハイライト | 現在画面に表示されている範囲 |
| シンタックスハイライト | 全体 | 元バッファのシンタックスを維持 |

## イベント仕様

### 1-ミニマップ表示トグル

ミニマップコマンドでサイドウィンドウにミニマップを表示/非表示。

### 2-クリックナビゲーション

ミニマップ上の位置をクリックすると、ソースバッファがその位置にスクロール。

### 3-自動スクロール同期

ソースバッファをスクロールすると、ミニマップの可視範囲ハイライトが自動的に更新。

### 4-ウィンドウサイズ変更

ウィンドウサイズを変更すると、ミニマップの縮尺が自動調整。

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

本機能はデータベースを使用しない。表示はリアルタイムでソースバッファから生成される。

## メッセージ仕様

| メッセージ種別 | メッセージ内容 | 表示条件 |
|--------------|--------------|---------|
| なし | - | ミニマップはメッセージを表示しない |

## 例外処理

| 例外状態 | 処理内容 |
|---------|---------|
| 画像対応なし | テキストベースの代替表示（環境依存） |
| 極小バッファ | ミニマップは有用性が低いが表示は可能 |

## 備考

- demapパッケージを使用
- ミニマップウィンドウではモードラインが非表示（`hide-mode-line-mode`）
- Doom Emacsでは非常にシンプルな設定のみを提供
- 詳細なカスタマイズはdemapパッケージのドキュメントを参照

---

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

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

### 推奨読解順序

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

ミニマップの基本設定を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.el | `modules/ui/minimap/config.el` | 全体: 設定の簡潔さを確認 |

**読解のコツ**: Doom Emacsのminimap設定は非常にシンプル。詳細な動作はdemapパッケージ本体のコードを参照。

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

demapパッケージの設定を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.el | `modules/ui/minimap/config.el` | 3-4行目: demapパッケージ設定 |

**主要処理フロー**:
1. **3行目**: `use-package! demap`でパッケージを読み込み
2. **4行目**: `demap-minimap-window-set-hook`で`hide-mode-line-mode`を有効化

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

```
demap (ミニマップ表示)
    │
    └─ demap-minimap-window-set-hook
           └─ hide-mode-line-mode (モードライン非表示)

ミニマップウィンドウ
    │
    ├─ ソースバッファ変更検知
    │      └─ プレビュー更新
    │
    ├─ スクロール検知
    │      └─ 可視範囲ハイライト更新
    │
    └─ クリック検知
           └─ ソースバッファスクロール
```

### データフロー図

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

ソースバッファ      ───▶ demap縮小処理          ───▶ ミニマップ表示

ウィンドウ          ───▶ 可視範囲計算           ───▶ ハイライト
スクロール位置

ミニマップ          ───▶ 位置計算               ───▶ ソースバッファ
クリック                                             スクロール
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/ui/minimap/config.el` | ソース | メイン設定ファイル（5行のみ） |
| packages.el | `modules/ui/minimap/packages.el` | 設定 | パッケージ依存関係定義 |
