# 機能設計書 71-Docker

## 概要

本ドキュメントは、space-vimの+tools/dockerレイヤーが提供するDocker関連ファイルの構文ハイライト機能について、その設計と実装を詳細に記述する。

### 本機能の処理概要

**業務上の目的・背景**：
コンテナ技術が普及した現代の開発環境において、Dockerfile や docker-compose.yml ファイルの編集は日常的な作業である。これらのファイルに適切な構文ハイライトを適用することで、開発者はファイル構造を視覚的に把握しやすくなり、記述ミスの早期発見や可読性の向上が期待できる。本機能は、Docker関連ファイルの編集効率を向上させるために提供される。

**機能の利用シーン**：
- Dockerfileを新規作成・編集する際に、命令（FROM、RUN、COPY等）をハイライト表示する
- docker-compose.ymlを編集する際に、YAML構造とDocker特有のキーワードをハイライト表示する
- Docker関連ファイルのコードレビュー時に、構文を視覚的に確認する

**主要な処理内容**：
1. ファイルタイプ（Dockerfile、docker-compose）の自動検出
2. Dockerfile.vimプラグインの遅延読み込み（ファイルタイプ検出時）
3. Docker命令およびdocker-compose構文への構文ハイライト適用

**関連システム・外部連携**：
- 外部プラグイン: ekalinin/Dockerfile.vim（Docker構文ハイライトプラグイン）
- vim-plugによるプラグイン管理との連携

**権限による制御**：
本機能に権限による制御は存在しない。+tools/dockerレイヤーを有効化することで全ユーザーが利用可能となる。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | Vimエディタ画面 | 主画面 | Dockerfile/docker-compose.yml編集時の構文ハイライト表示 |

## 機能種別

エディタ補助機能 / 構文ハイライト

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| ファイルタイプ | String | Yes | 開いたファイルのファイルタイプ（Dockerfile, docker-compose） | Vimが自動検出 |

### 入力データソース

- 編集対象ファイルのファイル名およびファイルタイプ（Vimが自動判定）
- ~/.spacevimにおけるレイヤー設定（+tools/dockerの有効化）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ハイライト表示 | Visual | Docker命令やYAMLキーワードへの色付け表示 |

### 出力先

- Vimエディタのバッファ画面（構文ハイライトとして視覚表示）

## 処理フロー

### 処理シーケンス

```
1. ユーザーがDockerfileまたはdocker-compose.ymlを開く
   └─ Vimがファイルタイプを自動検出
2. vim-plugがDockerfile.vimプラグインを遅延読み込み
   └─ packages.vimの'for'オプションによりファイルタイプ検出時にロード
3. プラグインが構文ハイライト定義を適用
   └─ Docker命令、引数、コメントなどに色が適用される
```

### フローチャート

```mermaid
flowchart TD
    A[ファイルを開く] --> B{ファイルタイプ判定}
    B -->|Dockerfile| C[Dockerfile.vimをロード]
    B -->|docker-compose| C
    B -->|その他| D[通常のハイライト]
    C --> E[Docker構文ハイライト適用]
    E --> F[編集可能]
    D --> F
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-71-1 | 遅延読み込み | Docker関連ファイルを開いたときのみプラグインをロード | ファイルタイプがDockerfileまたはdocker-composeの場合 |
| BR-71-2 | ファイルタイプ検出 | ファイル名パターンによる自動検出 | Dockerfile*、docker-compose*.yml等 |

### 計算ロジック

本機能に計算ロジックは存在しない。

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

本機能にデータベース操作は存在しない。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | プラグイン未インストール | Dockerfile.vimがインストールされていない | PlugInstallコマンドで再インストール |

### リトライ仕様

本機能にリトライ処理は存在しない。

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

本機能にトランザクション処理は存在しない。

## パフォーマンス要件

- 遅延読み込みにより、Docker関連ファイルを開かない限りプラグインはロードされない
- 起動時間への影響を最小化

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

本機能は表示のみの機能であり、セキュリティ上の考慮事項は特になし。

## 備考

- Dockerfile.vimはekalinin氏が開発・メンテナンスしている外部プラグイン
- docker-composeのYAML構文もサポート

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | packages.vim | `layers/+tools/docker/packages.vim` | プラグイン登録と遅延読み込み条件の定義 |

**読解のコツ**: `MP`はspace-vim独自のプラグイン登録マクロで、vim-plugの`Plug`コマンドをラップしている。`{ 'for': [...] }`オプションは、指定したファイルタイプを開いたときにのみプラグインをロードする遅延読み込み設定である。

**主要処理フロー**:
- **1行目**: `MP 'ekalinin/Dockerfile.vim', { 'for': ['Dockerfile', 'docker-compose'] }` - Dockerfileおよびdocker-composeファイルタイプ用にDockerfile.vimプラグインを登録

#### Step 2: 設定ファイルを確認する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.vim | `layers/+tools/docker/config.vim` | 追加設定の有無を確認（現状は空） |

**読解のコツ**: config.vimは空であり、Dockerfile.vimプラグインはデフォルト設定で動作する。カスタマイズが必要な場合はこのファイルに設定を追加する。

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

```
~/.spacevim（ユーザー設定）
    │
    └─ Layer('+tools/docker')
           │
           ├─ packages.vim
           │      └─ MP 'ekalinin/Dockerfile.vim'（プラグイン登録）
           │
           └─ config.vim（空）
```

### データフロー図

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

Dockerfileを開く    ───▶  ファイルタイプ検出    ───▶  構文ハイライト表示
                          ↓
                    Dockerfile.vimロード
                          ↓
                    syntax/dockerfile.vim適用
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| packages.vim | `layers/+tools/docker/packages.vim` | ソース | プラグイン登録定義 |
| config.vim | `layers/+tools/docker/config.vim` | ソース | 追加設定（現状空） |
