# 機能設計書 79-YAMLサポート

## 概要

本ドキュメントは、Doom EmacsにおけるYAMLファイルの編集サポート機能について記述する。設定ファイル、CI/CD定義、Kubernetesマニフェストなど、様々な場面で使用されるYAMLの効率的な編集環境を提供する。

### 本機能の処理概要

**業務上の目的・背景**：YAMLはデータシリアライゼーション形式として広く使用されており、特にDevOps関連の設定ファイル（Docker Compose、Kubernetes、CI/CD設定等）で頻繁に使用される。インデントベースの構文であるため、適切なエディタサポートが生産性に直結する。

**機能の利用シーン**：
- Docker Compose設定ファイルの編集
- Kubernetesマニフェストの編集
- GitHub Actions/GitLab CI設定の編集
- Ansible Playbookの編集
- 各種アプリケーション設定ファイルの編集

**主要な処理内容**：
1. yaml-modeによるYAML編集サポート
2. Tree-sitterによる高度な構文解析（yaml-ts-mode）
3. LSPサポート（yaml-language-server）
4. tab-widthとyaml-indent-offsetの同期

**関連システム・外部連携**：
- yaml-language-server: YAML Language Server

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

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | YAMLバッファ | 主画面 | YAMLファイルの編集 |

## 機能種別

言語サポート / データフォーマット

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| +lsp | フラグ | No | LSPサポートを有効化 | doom!ブロックで指定 |
| +tree-sitter | フラグ | No | Tree-sitterサポートを有効化 | doom!ブロックで指定 |

### 入力データソース

- YAMLファイル（*.yaml, *.yml）
- Procfile

## 出力仕様

### 出力データ

本モジュールはファイル出力を行わない。

### 出力先

- エディタバッファ: シンタックスハイライト、インデント

## 処理フロー

### 処理シーケンス

```
1. YAMLファイルを開く
   └─ yaml-mode が起動
2. インデント設定
   └─ tab-width を yaml-indent-offset に同期
3. Tree-sitterモード有効時
   └─ yaml-ts-mode へリマップ
4. LSPモード有効時
   └─ lsp! フック実行
```

### フローチャート

```mermaid
flowchart TD
    A[YAMLファイルを開く] --> B[yaml-mode起動]
    B --> C[tab-width同期]
    C --> D{+tree-sitter?}
    D -->|Yes| E[yaml-ts-mode]
    D -->|No| F[yaml-mode継続]
    E --> G{+lsp?}
    F --> G
    G -->|Yes| H[yaml-language-server接続]
    G -->|No| I[開発作業]
    H --> I
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-01 | Procfileモード | Procfile を yaml-mode で開く | Procfileオープン時 |
| BR-02 | tab-width同期 | tab-width を yaml-indent-offset と同値に設定 | yaml-mode有効時 |

### 計算ロジック

特になし

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

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

データベース操作なし

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | なし | - | - |

### リトライ仕様

リトライ機能なし

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

トランザクション管理なし

## パフォーマンス要件

特になし

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

- YAML内の機密情報（パスワード、APIキー等）の管理に注意

## 備考

- yaml-ts-modeはEmacs 29.1+で利用可能
- Tree-sitter grammarはtree-sitter-grammars/tree-sitter-yamlを使用

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.el | `modules/lang/yaml/config.el` | モジュール全体の設定 |

**主要処理フロー**:
1. **3-4行目**: yaml-mode のモード設定（Procfile）
2. **6-7行目**: LSPフック設定
3. **8行目**: tab-width同期
4. **11-20行目**: yaml-ts-mode設定（Tree-sitter）

#### Step 2: Tree-sitter設定を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.el | `modules/lang/yaml/config.el` | yaml-ts-mode の set-tree-sitter! 設定 |

**主要処理フロー**:
- **15-17行目**: Tree-sitter grammarのURL設定
- **19-20行目**: yaml-ts-mode用のLSPフック

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

```
yaml-mode
    │
    ├─ yaml-mode-hook
    │      └─ tab-width設定
    │
    ├─ LSP (+lsp)
    │      └─ yaml-mode-local-vars-hook
    │             └─ lsp!
    │
    └─ Tree-sitter (+tree-sitter)
           └─ yaml-ts-mode
                  └─ yaml-ts-mode-local-vars-hook
                         └─ lsp!
```

### データフロー図

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

YAMLファイル ──────────▶ yaml-mode ─────────────────▶ シンタックスハイライト
        │                   │
        │                   ▼
        │              tab-width同期
        │
        └─ +tree-sitter ─▶ yaml-ts-mode ────────────▶ Tree-sitterハイライト
                              │
                              ▼
        +lsp ────────────▶ yaml-language-server ───▶ 補完/診断
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/lang/yaml/config.el` | ソース | モジュール設定 |
| packages.el | `modules/lang/yaml/packages.el` | ソース | 依存パッケージ定義 |
