# 画面設計書 9-ヘルプ画面

## 概要

本ドキュメントは、Nushell Exploreにおけるヘルプ画面の設計仕様を定義する。ヘルプ画面は、Exploreの操作方法やコマンド一覧を表示する画面である。

### 本画面の処理概要

ヘルプ画面は、Exploreで`:help`コマンドを実行した際に表示される画面である。Exploreのナビゲーション方法、データ操作、コマンド、検索機能などの使い方を説明するヘルプテキストを表示する。Preview形式で実装されており、テキストのスクロールが可能。

**業務上の目的・背景**：
Exploreには多くのキーバインドやコマンドがあり、初めて使うユーザーが操作方法を学ぶ手段が必要である。ヘルプ画面は、Explore内で即座に参照できるビルトインのヘルプドキュメントを提供し、ユーザーが効率的にExploreの機能を習得できるようサポートする。

**画面へのアクセス方法**：
- レコードビューで `:help` コマンドを入力
- exploreコマンドを引数なしで実行

**主要な操作・処理内容**：
1. ヘルプテキストの表示
2. スクロールによる閲覧
3. Escで呼び出し元に戻る

**画面遷移**：
- レコードビュー（画面No.4） → :help → ヘルプ画面
- explore（入力なし） → ヘルプ画面
- ヘルプ画面 → Esc → レコードビュー / メインREPL

**権限による表示制御**：
- 特になし。全ユーザーが同一の機能を利用可能

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 72 | ヘルプ表示 | 主機能 | Exploreのヘルプ情報（ナビゲーション・コマンド・検索）の表示 |
| 71 | 探索モード | 補助機能 | ヘルプテキストのPreview形式での表示・スクロール |

## 画面種別

TUI（Terminal User Interface）ヘルプビューア

## URL/ルーティング

N/A（CLI/TUIアプリケーションのためURL概念なし）

## 入出力項目

| 項目名 | 型 | 入力/出力 | 説明 |
|--------|-----|----------|------|
| なし | - | - | 静的なヘルプテキストを表示するのみ |

## 表示項目

| 項目名 | 説明 | 表示形式 |
|--------|------|----------|
| タイトル | "Explore Help" | 太字 |
| 概要 | Exploreの説明 | テキスト |
| Navigationセクション | ナビゲーション操作の説明 | リスト形式 |
| Data Manipulationセクション | データ操作の説明 | リスト形式 |
| Commandsセクション | コマンド一覧 | リスト形式 |
| Searchセクション | 検索機能の説明 | リスト形式 |

## イベント仕様

### 1-上下矢印キー（スクロール）

1. Preview.handle_inputに委譲
2. 表示位置を更新

### 2-Esc押下（戻る）

1. ヘルプ画面を終了
2. 呼び出し元に戻る

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

N/A（データベース操作なし）

## メッセージ仕様

なし（静的コンテンツ）

## 例外処理

なし（静的コンテンツ）

## 備考

- HELP_MESSAGEはLazyLockで遅延初期化
- ANSIカラーコードによる色付け表示
  - タイトル: bold
  - セクション: bold + cyan
  - キー: bold + green
  - コード: bold + blue
  - dim: 薄い色
- Preview形式で実装、スクロール可能

---

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

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

### 推奨読解順序

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

ヘルプ画面で扱う主要なデータ構造を把握する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | help.rs | `crates/nu-explore/src/explore/commands/help.rs` | HelpCmd構造体（13行） |
| 1-2 | help.rs | `crates/nu-explore/src/explore/commands/help.rs` | HELP_MESSAGE定義（22-86行） |

**読解のコツ**: HelpCmdはシンプルなコマンドで、view関数でPreviewを返す

#### Step 2: ヘルプテキスト生成を理解する

HELP_MESSAGEの構造を追う。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | help.rs | `crates/nu-explore/src/explore/commands/help.rs` | LazyLock初期化（22-86行） |

**主要処理フロー**:
- **23-27行**: スタイル定義（title, section, code, key, dim）
- **29-86行**: フォーマット文字列でヘルプテキスト生成

#### Step 3: ViewCommand実装を理解する

コマンド実装を追う。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | help.rs | `crates/nu-explore/src/explore/commands/help.rs` | ViewCommand for HelpCmd（117-141行） |

**主要処理フロー**:
- **120行**: name() = "help"
- **128行**: parse() = Ok(()) （引数なし）
- **138行**: spawn() = Ok(HelpCmd::view())

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

```
:help コマンド
    |
    +-- HelpCmd::spawn()                 [help.rs:132]
            |
            +-- HelpCmd::view()          [help.rs:17]
                    |
                    +-- Preview::new(&HELP_MESSAGE)
                            |
                            +-- LazyLock初期化
                            |       +-- nu_ansi_term::Style定義
                            |       +-- format! でヘルプテキスト生成
                            |
                            +-- Preview表示
```

### データフロー図

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

:help コマンド ───────────▶ HelpCmd
                            │
                            ▼
                      HelpCmd::view()
                            │
                            ▼
                      HELP_MESSAGE (LazyLock)
                            │
                            ▼
                      Preview::new() ────────────────▶ TUI画面描画
                            │                          - タイトル
                            │                          - Navigationセクション
                            │                          - Data Manipulationセクション
                            │                          - Commandsセクション
                            │                          - Searchセクション
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| help.rs | `crates/nu-explore/src/explore/commands/help.rs` | ソース | ヘルプコマンドとテキスト定義 |
| preview.rs | `crates/nu-explore/src/explore/views/preview.rs` | ソース | ヘルプ表示用Preview |
| mod.rs | `crates/nu-explore/src/explore/commands/mod.rs` | ソース | コマンドモジュール定義 |
