# 画面設計書 25-Emoji

## 概要

本ドキュメントは、Doom EmacsのEmoji機能の画面設計について記述します。Emojiは、ASCII顔文字やGitHubスタイルの絵文字文字列をUnicode絵文字として表示・入力する機能を提供します。

### 本画面の処理概要

Emojiは、テキスト内の特定のパターン（`:smile:`、`:)`等）を対応する絵文字として表示し、また絵文字の入力補完機能を提供します。emojifyパッケージを利用して実装されています。

**業務上の目的・背景**：チャット、ドキュメント作成、コードコメントなどで絵文字を使用することで、コミュニケーションの表現力を豊かにします。GitHubのissueやPull Requestで使用される`:emoji:`形式の絵文字コードを、実際の絵文字として視覚的に表示することで、可読性を向上させます。また、ASCII顔文字（`:)`等）を絵文字に変換表示することで、レガシーなテキストの視認性を改善します。

**画面へのアクセス方法**：Emojiは自動的に動作するため、明示的な画面アクセスは不要です。バッファを開くと自動的にglobal-emojify-modeが有効化され、設定されたスタイルに応じて絵文字が表示されます。

**主要な操作・処理内容**：
1. バッファを開く
2. emojify-modeが自動的に有効化される
3. 設定されたスタイル（ascii、github、unicode）に応じてパターンをスキャン
4. マッチしたパターンを絵文字で表示（PNG画像またはUnicode文字）
5. 補完コマンドで絵文字を入力可能

**画面遷移**：Emojiは独立した画面ではなく、編集バッファ上で動作する視覚エフェクトです。他の画面への遷移機能はありません。

**権限による表示制御**：権限による制御はありません。モジュールフラグ（+ascii、+github、+unicode）によって表示スタイルが制御されます。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 27 | 絵文字サポート | 主機能 | 絵文字入力・表示支援 |

## 画面種別

視覚エフェクト（文字表示変換）

## URL/ルーティング

N/A（Emacsバッファ上で動作するため、URLの概念なし）

## 入出力項目

| 項目名 | 入力/出力 | データ型 | 説明 |
|--------|----------|----------|------|
| emojify-styles | 入力 | list | 有効化するスタイルのリスト |

## 表示項目

### スタイル別表示例

| スタイル | 入力例 | 表示 | フラグ |
|----------|--------|------|--------|
| ascii | `:)` | 笑顔絵文字 | +ascii |
| github | `:smile:` | 笑顔絵文字 | +github |
| unicode | U+1F600 | 直接Unicode表示 | +unicode |

## イベント仕様

### 1-モード有効化

バッファを開くとglobal-emojify-modeが自動的に有効化されます。

**処理フロー**：
1. `doom-first-buffer` フックが発火
2. `global-emojify-mode` が有効化される
3. `emojify-styles` に基づいてパターンマッチングが設定される
4. バッファ内の該当パターンが絵文字として表示される

### 2-スタイル設定

モジュールフラグに応じてemojify-stylesが設定されます。

**処理フロー**：
1. `emojify-styles` 変数を設定
2. `+ascii` フラグ有効時：`'ascii` を追加
3. `+github` フラグ有効時：`'github` を追加
4. `+unicode` フラグ有効時：`'unicode` を追加
5. `emojify-set-emoji-styles` で設定を適用

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

N/A（データベースを使用しない）

## メッセージ仕様

N/A（メッセージ表示なし）

## 例外処理

| 例外条件 | 処理内容 |
|----------|----------|
| フラグ未設定 | emojify-stylesが空になり、絵文字表示なし |
| PNG未サポート環境 | 絵文字が正しく表示されない可能性あり |

## 備考

- Emacs 29以降はネイティブのUnicode絵文字挿入機能を提供
- PNG表示にはImageMagickサポートが推奨される
- Windowsでは追加の設定が必要な場合がある
- emojifyパッケージのキャッシュ機能により、パフォーマンスが最適化される

---

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

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

### 推奨読解順序

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

emojify-stylesがスタイル設定の中心です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.el | `modules/ui/emoji/config.el` | `emojify-styles` の設定（行6-10） |

**読解のコツ**: `modulep!` はDoom Emacsのモジュールフラグ判定マクロです。`:ui emoji +ascii` のように設定されたフラグを確認します。

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

doom-first-bufferフックでのグローバルモード有効化がエントリーポイントです。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.el | `modules/ui/emoji/config.el` | `use-package! emojify` ブロック（行3-12） |

**主要処理フロー**:
1. **行4**: `doom-first-buffer` フックで `global-emojify-mode` を有効化
2. **行6-10**: `emojify-styles` の設定（フラグに応じてスタイルを追加）
3. **行12**: `emojify-set-emoji-styles` でスタイルを適用

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

```
Emacs起動
    │
    └─ doom-first-buffer ───▶ global-emojify-mode
                                     │
                                     ▼
                              emojify-styles 設定
                                     │
                    ┌────────────────┼────────────────┐
                    │                │                │
                    ▼                ▼                ▼
               +ascii           +github          +unicode
                    │                │                │
                    └────────────────┴────────────────┘
                                     │
                                     ▼
                         emojify-set-emoji-styles
                                     │
                                     ▼
                         バッファ内絵文字表示
```

### データフロー図

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

モジュールフラグ ───▶ emojify-styles 構築 ───▶ スタイルリスト
       │                                              │
       ├─ +ascii   → 'ascii                          │
       ├─ +github  → 'github                         │
       └─ +unicode → 'unicode                        │
                                                      ▼
バッファテキスト ───▶ パターンマッチング ───▶ 絵文字表示
       │                    │
       ├─ ":)"             │
       ├─ ":smile:"        │
       └─ U+1F600          │
                           ▼
              PNG画像 または Unicode文字
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/ui/emoji/config.el` | ソース | パッケージ設定、スタイル定義 |
| packages.el | `modules/ui/emoji/packages.el` | 設定 | emojifyパッケージの依存定義 |
| README.org | `modules/ui/emoji/README.org` | ドキュメント | モジュール説明書、フラグ説明 |
| .doommodule | `modules/ui/emoji/.doommodule` | 設定 | Doomモジュールメタデータ |
