# 画面設計書 37-バージョン表示

## 概要

本ドキュメントは、Lua Language ServerのCLIコマンド「バージョン表示（--version）」の画面設計書です。

### 本画面の処理概要

この画面（CLIコマンド）は、Lua Language Serverのバージョン情報を標準出力に表示する機能を提供します。

**業務上の目的・背景**：
開発者やシステム管理者がLua Language Serverのバージョンを確認するために使用します。バージョン情報は、問題報告、互換性確認、更新判断などの場面で必要となります。特に、Language Serverの機能やバグ修正がバージョンに依存する場合、正確なバージョン情報の取得が重要です。本コマンドは、changelog.mdからバージョン情報を抽出し、開発バージョンの場合は「-dev」サフィックスを付与して表示します。

**画面へのアクセス方法**：
本コマンドは、以下の方法でトリガーされます：
- コマンドラインで `lua-language-server --version` を実行

**主要な操作・処理内容**：
1. changelog.mdファイルを読み込む
2. 最新のバージョン番号を抽出（## X.Y.Z形式）
3. リリース済みか開発中かを判定
4. バージョン文字列を標準出力に出力
5. プロセス終了

**画面遷移**：
- 入力元：コマンドライン起動
- 出力先：標準出力（stdout）

**権限による表示制御**：
特別な権限制御はありません。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 1 | 初期化 (initialize) | 補助機能 | バージョン情報の取得元 |

## 画面種別

CLI（コマンドライン出力）

## URL/ルーティング

- CLIオプション: `--version`
- ハンドラファイル: `script/cli/version.lua`

## 入出力項目

### 入力パラメータ

| 項目名 | 型 | 必須 | 説明 |
|--------|-----|------|------|
| --version | flag | Yes | バージョン表示フラグ |

### 出力

| 項目名 | 型 | 説明 |
|--------|-----|------|
| stdout | text | バージョン文字列（例: `3.7.4` または `3.7.4-dev`） |

## 表示項目

| 項目名 | 表示内容 | 条件 |
|--------|---------|------|
| バージョン | `X.Y.Z` | リリース済みバージョン |
| バージョン | `X.Y.Z-dev` | 開発中バージョン |
| バージョン | `<Unknown>` | バージョン取得失敗時 |

## イベント仕様

### 1-バージョン表示実行

1. **version.getVersion()呼び出し**: バージョン情報を取得
2. **changelog.md読み込み**: ROOT/changelog.mdを読み込み
3. **バージョン抽出**: 正規表現でバージョン番号を抽出
4. **開発版判定**: バージョン行の直後がバッククォートで始まるかを確認
5. **サフィックス付与**: 開発版の場合は「-dev」を付与
6. **出力**: print()でバージョン文字列を出力
7. **終了**: プロセス終了

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

本機能はデータの更新を行いません。

## メッセージ仕様

本機能はバージョン文字列のみを出力します。

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| changelog.md読み込み失敗 | `<Unknown>`を返す |
| バージョン番号抽出失敗 | `<Unknown>`を返す |

## 備考

- バージョン情報はchangelog.mdの最初の`## X.Y.Z`行から取得されます
- リリース済みバージョンはバージョン行の直後にバッククォートで始まる行（日付など）があります
- 開発中バージョンはバッククォート行がなく、`-dev`サフィックスが付与されます
- バージョン情報はキャッシュされ、同一プロセス内では再読み込みされません

---

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

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

### 推奨読解順序

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

まず、バージョン情報の取得元を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | changelog.md | `changelog.md` | バージョン記載形式（## X.Y.Z）を理解 |

**読解のコツ**: changelog.mdの各バージョンセクションは`## X.Y.Z`で始まり、リリース済みの場合は直後に`` `YYYY-MM-DD` ``形式の日付行があります。

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

コマンドの起点となるファイルを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | version.lua | `script/cli/version.lua` | メイン処理（1-3行目） |

**主要処理フロー**:
1. **1行目**: version モジュールを読み込み
2. **2行目**: getVersion()を呼び出して出力

#### Step 3: バージョン取得処理を理解する

version.getVersion()の内部実装を追跡します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | version.lua | `script/version.lua` | loadVersion関数（3-18行目） |
| 3-2 | version.lua | `script/version.lua` | getVersion関数（22-28行目） |

**主要処理フロー**:
- **4行目**: changelog.mdを読み込み
- **9行目**: 正規表現でバージョン番号と位置を抽出
- **14-16行目**: 開発版判定（バッククォート行の有無）
- **17行目**: バージョン文字列を返す
- **22-28行目**: キャッシュ処理

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

```
lua-language-server --version
    │
    └─ cli/version.lua (エントリーポイント)
           │
           └─ version.getVersion()
                  │
                  ├─ loadVersion() [初回のみ]
                  │      │
                  │      ├─ fsu.loadFile(changelog.md)
                  │      │
                  │      ├─ match('## X.Y.Z')
                  │      │
                  │      └─ find('^[\r\n]+`')
                  │
                  └─ print(version)
```

### データフロー図

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

--version ───▶ cli/version.lua ───▶ stdout
                     │
                     ▼
              version.getVersion()
                     │
                     ▼
              loadVersion() [キャッシュなしの場合]
                     │
                     ▼
              fsu.loadFile(changelog.md)
                     │
                     ▼
              changelog内容
                     │
                     ▼
              match('## (X.Y.Z)()')
                     │
                     ▼
              version, position
                     │
                     ▼
              開発版判定
                     │
               ┌─────┴─────┐
               ▼           ▼
           リリース版    開発版
           "X.Y.Z"    "X.Y.Z-dev"
               │           │
               └─────┬─────┘
                     ▼
                 print()
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| version.lua | `script/cli/version.lua` | ソース | CLIエントリーポイント |
| version.lua | `script/version.lua` | ソース | バージョン取得ロジック |
| fs-utility.lua | `script/fs-utility.lua` | ソース | ファイル読み込みユーティリティ |
| changelog.md | `changelog.md` | データ | バージョン情報源 |
