# 画面設計書 36-ヘルプ表示

## 概要

本ドキュメントは、Lua Language ServerのCLIコマンド「ヘルプ表示（--help）」の画面設計書です。

### 本画面の処理概要

この画面（CLIコマンド）は、Lua Language Serverで利用可能なコマンドライン引数の一覧とその説明を標準出力に表示する機能を提供します。

**業務上の目的・背景**：
Lua Language Serverはコマンドライン経由で様々なオプションを指定して起動できます。開発者やシステム管理者が利用可能なオプションを確認するために、本コマンドは全てのコマンドライン引数の名前、説明、使用例、デフォルト値を表示します。これにより、マニュアルを参照せずに必要なオプションを素早く確認でき、効率的にLanguage Serverを設定・運用できます。

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

**主要な操作・処理内容**：
1. 定義済みの引数一覧を取得
2. 引数名でソートして順次処理
3. 各引数について名前、説明、型、デフォルト値、使用例を出力
4. 出力完了後にプロセス終了

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

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 76 | ヘルプ表示 | 主機能 | コマンドライン引数の一覧を表示するCLI処理 |

## 画面種別

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

## URL/ルーティング

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

## 入出力項目

### 入力パラメータ

| 項目名 | 型 | 必須 | 説明 |
|--------|-----|------|------|
| --help | flag | Yes | ヘルプ表示フラグ |

### 出力

| 項目名 | 型 | 説明 |
|--------|-----|------|
| stdout | text | フォーマットされたヘルプテキスト |

## 表示項目

各引数について以下の情報を表示：

| 項目名 | 表示内容 | 条件 |
|--------|---------|------|
| 引数名 | `--argname` または `--argname=<value>` | 型がbooleanかどうかで分岐 |
| 説明 | Markdown形式の説明文 | 常に表示 |
| 型一覧 | `Values: val1, val2, ...` | 型がテーブルの場合 |
| デフォルト値 | `Default: value` | デフォルト値がある場合 |
| 使用例 | `Example: --argname=value` | 使用例がある場合 |

### 表示される引数一覧

| 引数名 | 型 | 説明 | デフォルト値 |
|--------|-----|------|-------------|
| --help | (flag) | ヘルプを表示 | - |
| --check | string | 診断レポートを生成 | - |
| --checklevel | string | 診断レベルの最小値 | Warning |
| --check_format | json \| pretty | 出力形式 | pretty |
| --version | boolean | バージョン表示 | - |
| --doc | string | ドキュメント生成 | - |
| --doc_out_path | string | ドキュメント出力先 | - |
| --doc_update | string | 既存ドキュメント更新 | - |
| --logpath | string | ログ出力先 | ./log |
| --loglevel | string | ログレベル | - |
| --metapath | string | メタファイル出力先 | ./meta |
| --locale | string | 言語設定 | - |
| --configpath | string | 設定ファイルパス | - |
| --force-accept-workspace | boolean | ルートディレクトリ許可 | - |
| --socket | number | TCPポート | - |
| --develop | boolean | 開発モード | - |

## イベント仕様

### 1-ヘルプ表示実行

1. **引数定義読込**: args テーブルから全ての引数定義を取得
2. **ソート**: util.sortPairs()でアルファベット順にソート
3. **反復出力**: 各引数について以下を出力
   - 引数名（型に応じて `=<value>` を付与）
   - 正規化した説明文
   - 型一覧（該当する場合）
   - デフォルト値（該当する場合）
   - 使用例（該当する場合）
4. **終了**: 出力完了後にプロセス終了

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

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

## メッセージ仕様

本機能は定義済みの引数情報をそのまま出力するため、動的なメッセージはありません。

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| 例外なし | 本機能は単純な出力処理のため、例外は発生しない |

## 備考

- 引数の説明はMarkdown形式で記述されています
- 出力は標準出力（stdout）に行われます
- プロセスは出力完了後に正常終了します
- 引数はアルファベット順でソートされて表示されます

---

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

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

### 推奨読解順序

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

まず、引数定義で使用されるデータ構造を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | help.lua | `script/cli/help.lua` | cli.arg型の定義（3-7行目）を理解 |

**読解のコツ**: `cli.arg`は`type`, `description`, `example`, `default`のフィールドを持つテーブルです。typeはstring, boolean, string[], numberのいずれかです。

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

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

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

**主要処理フロー**:
1. **149行目**: util.sortPairs(args)で引数をソート
2. **150-153行目**: 引数名を出力（booleanか否かで分岐）
3. **155-158行目**: 説明文を正規化して出力
4. **159-162行目**: 型一覧を出力（テーブル型の場合）
5. **163-165行目**: デフォルト値を出力
6. **166-168行目**: 使用例を出力

#### Step 3: 引数定義を理解する

args テーブルの構造を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | help.lua | `script/cli/help.lua` | args テーブル（10-147行目） |

**主要処理フロー**:
- **11-15行目**: --help の定義
- **16-22行目**: --check の定義
- 以降、各引数の定義が続く

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

```
lua-language-server --help
    │
    └─ help.lua (エントリーポイント)
           │
           ├─ util.sortPairs(args)
           │
           └─ [for each arg]
                  │
                  ├─ print(argname)
                  │
                  ├─ print(description)
                  │
                  ├─ print(type values) [if table]
                  │
                  ├─ print(default) [if exists]
                  │
                  └─ print(example) [if exists]
```

### データフロー図

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

--help ───▶ help.lua ───▶ stdout
                │
                ▼
         util.sortPairs(args)
                │
                ▼
         sorted args[]
                │
                ▼
         [for each arg]
                │
           ┌────┼────┬────┬────┐
           ▼    ▼    ▼    ▼    ▼
         name  desc type def  ex
           │    │    │    │    │
           └────┴────┴────┴────┘
                │
                ▼
             print()
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| help.lua | `script/cli/help.lua` | ソース | ヘルプ表示メインロジック |
| utility.lua | `script/utility.lua` | ソース | sortPairsユーティリティ |
