# 画面設計書 45-koch --version

## 概要

本ドキュメントは、Nimビルドツール「koch」の`koch --version`コマンドによるバージョン情報表示画面の設計書である。

### 本画面の処理概要

この画面は、kochビルドツールのバージョン情報を表示するCLI画面である。kochはNimコンパイラ自体のビルドやメンテナンスを行うためのツールであり、この画面ではkochのバージョン（Nimのバージョンと連動）とビルド日時を確認できる。

**業務上の目的・背景**：kochはNimプロジェクトのメンテナンスツールであり、コンパイラのブートストラップやツール群のビルドに使用される。バージョン情報は、開発環境の確認やトラブルシューティング、コントリビューションの際の環境報告に必要である。kochのバージョンはNim本体のバージョンと同期しているため、どのバージョンのNimでビルドされたkochかを確認できる。

**画面へのアクセス方法**：
- `koch --version` コマンドを実行
- 注：kochは`-v`短縮形オプションをサポートしていない（ヘルプでは`--help, -h`のみ明示）

**主要な操作・処理内容**：
1. コマンドライン引数の解析
2. バージョン番号（VersionAsString = system.NimVersion）の取得
3. ヘルプメッセージのヘッダー部分（バージョン情報含む）の表示
4. プログラム終了

**画面遷移**：
- この画面へ遷移：コマンドラインから直接アクセス
- この画面から遷移：なし（バージョン表示後にプログラム終了）

**権限による表示制御**：なし（すべてのユーザーが同一の情報を閲覧可能）

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 20 | Koch | 主機能 | kochのバージョン情報表示 |

## 画面種別

バージョン情報表示（情報出力）

## URL/ルーティング

```
koch --version
```

## 入出力項目

### 入力項目

| 項目名 | 型 | 必須 | 説明 |
|--------|-----|------|------|
| --version | フラグ | - | バージョン表示を要求するオプション |

### 出力項目

| 項目名 | 説明 |
|--------|------|
| タイトルバナー | Maintenance program for Nimのタイトル枠 |
| バージョン情報 | kochのバージョン番号（Nimバージョンと同一） |
| コピーライト | 著作権表示 |
| ビルド日時 | kochがビルドされた日時 |

## 表示項目

### バージョン情報構成

```
+-----------------------------------------------------------------+
|         Maintenance program for Nim                             |
|             Version X.X.X                                       |
|             (c) 2024 Andreas Rumpf                              |
+-----------------------------------------------------------------+
Build time: YYYY-MM-DD, HH:MM:SS
```

### 各表示項目の詳細

| 項目 | 形式 | 例 |
|-----|------|-----|
| バージョン | X.X.X | 2.0.0 |
| 日付 | YYYY-MM-DD | 2024-01-15 |
| 時刻 | HH:MM:SS | 10:30:45 |

## イベント仕様

### 1-バージョンオプション検出

**トリガー**: kochのコマンドライン引数としてバージョン要求が指定された場合

**処理フロー**:
kochのソースコードを確認すると、明示的な`--version`オプションの処理は存在せず、不明なコマンドとして`showHelp`関数が呼ばれる動作となる。バージョン情報はヘルプメッセージの一部として表示される。

実際の動作：
1. `initOptParser`でコマンドライン引数を解析
2. コマンド引数がない、または認識できない場合、`showHelp`関数を呼び出し
3. HelpText（バージョン情報を含む）を表示
4. プログラム終了

**注意**：kochには専用の`--version`コマンド処理がないため、ヘルプ表示時にバージョン情報が確認できる設計となっている。

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

該当なし（データベース操作を行わない画面）

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|---------------|---------|
| HelpText | 情報 | バージョン情報含むヘルプ全文 | コマンド指定なしまたは不明コマンド時 |

## 例外処理

| 例外条件 | 処理内容 |
|----------|---------|
| 不明なオプション | ヘルプを表示（バージョン情報含む） |

## 備考

- kochのバージョン番号はNimコンパイラのバージョン（system.NimVersion）と同一
- VersionAsStringは`koch.nim`の先頭で定数として定義
- kochには明示的な`--version`専用処理がなく、ヘルプ表示の一部としてバージョン情報が確認できる
- 画面一覧.csvでは「koch --version」として定義されているが、実装上は`koch --help`と同様のヘルプ表示となる

---

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

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

### 推奨読解順序

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

まず、kochのバージョン情報に関連する定数を理解することが重要。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | koch.nim | `koch.nim` | VersionAsString定数、HelpText定数 |

**読解のコツ**: VersionAsStringはsystem.NimVersionを使用しており、Nimコンパイラ本体と同じバージョン番号が使われる。

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

処理の起点となる部分を特定。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | koch.nim | `koch.nim` | isMainModule内のmain処理（行720以降） |

**主要処理フロー**:
1. **行53**: `VersionAsString = system.NimVersion`の定義
2. **行56-111**: HelpText定数（バージョン情報を含む）
3. **行709-711**: `showHelp`関数 - HelpTextをフォーマットして出力
4. **行720-791**: メイン処理ループ

#### Step 3: ヘルプ/バージョン表示処理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | koch.nim | `koch.nim` | showHelp関数とHelpTextフォーマット |

**主要処理フロー**:
- **行56-62**: HelpTextの先頭部分（バージョン情報を含むバナー）
- **行709-711**: `showHelp`関数

```nim
proc showHelp(success: bool) =
  quit(HelpText % [VersionAsString & spaces(44-len(VersionAsString)),
                   CompileDate, CompileTime], if success: QuitSuccess else: QuitFailure)
```

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

```
koch (エントリーポイント)
    │
    ├─ isMainModule (koch.nim:720)
    │      │
    │      ├─ initOptParser()
    │      │
    │      ├─ コマンド解析
    │      │      │
    │      │      └─ 認識できないコマンド/引数なし
    │      │              │
    │      │              └─ showHelp (koch.nim:709)
    │      │                      │
    │      │                      ├─ HelpText % [VersionAsString, CompileDate, CompileTime]
    │      │                      │      （バージョン情報を含むヘルプメッセージ）
    │      │                      │
    │      │                      └─ quit(QuitSuccess または QuitFailure)
```

### データフロー図

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

コマンドライン引数 ───▶ initOptParser ───────────▶ OptParser
        │
        ▼
    引数解析 ───────────▶ コマンド判定
        │
        │  認識できないコマンド または 引数なし
        ▼
    showHelp ──────────▶ HelpText フォーマット ──────▶ stdout
        │                    │
        │                    ├─ VersionAsString (Nimバージョン)
        │                    ├─ CompileDate (ビルド日付)
        │                    └─ CompileTime (ビルド時刻)
        │
        ▼
    quit() ────────────────────────────────────────▶ プロセス終了
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| koch.nim | `koch.nim` | ソース | kochビルドツールのメインソース |

### HelpText定数の構造

```nim
const
  HelpText = """
+-----------------------------------------------------------------+
|         Maintenance program for Nim                             |
|             Version $1|
|             (c) 2024 Andreas Rumpf                              |
+-----------------------------------------------------------------+
Build time: $2, $3

Usage:
  koch [options] command [options for command]
...
"""
```

$1 = VersionAsString & spaces（右パディング用）
$2 = CompileDate
$3 = CompileTime
