# 機能設計書 31-ミニマップ表示

## 概要

本ドキュメントは、Doom Emacsにおけるミニマップ表示機能の設計を記載する。この機能は、バッファ全体の縮小プレビューを表示し、コード全体の構造把握とナビゲーションを支援する。

### 本機能の処理概要

**業務上の目的・背景**：大規模なソースコードやドキュメントを編集する際、ファイル全体の構造を把握することが困難になる。ミニマップ機能は、バッファ全体の縮小表示を提供することで、開発者が現在位置を視覚的に確認し、目的の場所へ素早く移動できるようにする。これにより、コードレビューや大規模リファクタリング時の作業効率が向上する。

**機能の利用シーン**：
- 大規模なソースファイルの編集時にコード全体の構造を把握したい場合
- 特定の関数やクラスの位置を視覚的に確認したい場合
- ファイル内の特定箇所へ素早くジャンプしたい場合

**主要な処理内容**：
1. demapパッケージを使用してバッファの縮小表示ウィンドウを作成
2. ミニマップウィンドウのモードラインを非表示に設定
3. 現在のカーソル位置をミニマップ上でハイライト表示
4. ミニマップのクリックによる該当位置へのジャンプ

**関連システム・外部連携**：demapパッケージ（外部Emacsパッケージ）

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

## 関連画面

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

## 機能種別

UI表示 / ナビゲーション支援

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| buffer | buffer | Yes | 表示対象のバッファ | 有効なバッファであること |

### 入力データソース

現在編集中のバッファの内容

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| minimap-window | window | ミニマップを表示するウィンドウ |
| minimap-buffer | buffer | 縮小表示用のバッファ |

### 出力先

専用のサイドウィンドウ（通常は右側）

## 処理フロー

### 処理シーケンス

```
1. demap-minimap-window-set-hookの発火
   └─ ミニマップウィンドウが設定されたときに呼び出し
2. hide-mode-line-modeの有効化
   └─ ミニマップウィンドウのモードラインを非表示
3. バッファ内容の縮小レンダリング
   └─ demapパッケージによる処理
4. カーソル位置の同期
   └─ メインウィンドウとミニマップの位置を同期
```

### フローチャート

```mermaid
flowchart TD
    A[ミニマップ表示開始] --> B[demapパッケージ初期化]
    B --> C[ミニマップウィンドウ作成]
    C --> D[demap-minimap-window-set-hook発火]
    D --> E[hide-mode-line-mode有効化]
    E --> F[バッファ内容の縮小表示]
    F --> G[カーソル位置同期]
    G --> H[ユーザー操作待機]
    H -->|クリック| I[対象位置へジャンプ]
    H -->|スクロール| J[表示範囲更新]
    I --> G
    J --> G
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-31-1 | モードライン非表示 | ミニマップウィンドウではモードラインを非表示にする | ミニマップウィンドウ表示時 |
| BR-31-2 | 位置同期 | メインウィンドウのスクロールに合わせてミニマップの表示範囲を同期 | 常時 |

### 計算ロジック

縮小比率はdemapパッケージのデフォルト設定に依存

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

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

該当なし（データベース操作を行わない）

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | パッケージ未ロード | demapパッケージが利用できない | モジュールのインストール確認 |

### リトライ仕様

該当なし

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

該当なし

## パフォーマンス要件

- 大規模ファイルでもスムーズにスクロール可能であること
- ミニマップの更新がメインバッファの編集操作を妨げないこと

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

特になし

## 備考

- demapパッケージのピン留めバージョン: c42ec4752544f80ca7c172ff65e705a56089bc96

---

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

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

### 推奨読解順序

#### Step 1: パッケージ定義を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | packages.el | `modules/ui/minimap/packages.el` | demapパッケージの依存関係とバージョン |

**読解のコツ**: `package!`マクロはDoom Emacsのパッケージ管理マクロ。`:pin`オプションでコミットハッシュを固定している。

#### Step 2: 設定ファイルを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.el | `modules/ui/minimap/config.el` | ミニマップ機能の設定とフック |

**主要処理フロー**:
- **3-4行目**: `use-package!`マクロでdemapパッケージを設定
- **4行目**: `demap-minimap-window-set-hook`に`hide-mode-line-mode`をフック

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

```
demap (外部パッケージ)
    │
    ├─ demap-minimap-window-set-hook
    │      └─ hide-mode-line-mode (Doom組み込み)
    │
    └─ ミニマップ表示処理
```

### データフロー図

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

バッファ内容 ───▶ demapパッケージ ───▶ ミニマップウィンドウ
                      │
カーソル位置 ───▶ 位置同期処理 ───▶ ハイライト表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/ui/minimap/config.el` | ソース | ミニマップの設定 |
| packages.el | `modules/ui/minimap/packages.el` | 設定 | 依存パッケージの定義 |
