# 画面設計書 5-バージョン情報

## 概要

libuvのバージョン管理マクロと関数のAPIリファレンスページ（version.rst）に関する画面設計書。セマンティックバージョニングに基づくバージョン確認用マクロと関数を定義する。

### 本画面の処理概要

本画面はlibuvのバージョン確認APIを解説するリファレンスページである。コンパイル時のマクロによるバージョン条件分岐と、実行時のバージョン取得関数を提供する。

**業務上の目的・背景**：libuvはv1.0.0以降セマンティックバージョニングを採用しており、メジャーリリース間でABI互換性が保証される。新しいAPIが追加されることがあるため、開発者はバージョンを確認して条件付きコンパイルやランタイムチェックを行う必要がある。本画面はそのためのマクロと関数の使い方を提供する。

**画面へのアクセス方法**：APIドキュメント一覧ページ（api.rst）の "Version-checking macros and functions" リンク押下、または `/version.html` に直接アクセスする。

**主要な操作・処理内容**：
1. バージョンマクロの参照 - UV_VERSION_MAJOR/MINOR/PATCH/IS_RELEASE/SUFFIX/HEXの確認
2. バージョン関数の参照 - uv_version()/uv_version_string()のAPI仕様確認

**画面遷移**：
- 遷移元：APIドキュメント一覧（api.rst）
- 遷移先：なし（末端リファレンスページ）

**権限による表示制御**：なし。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 180 | バージョン情報取得 | 主機能 | uv_version()/uv_version_string()によるバージョン番号・文字列取得のAPI定義 |

## 画面種別

APIリファレンスページ（バージョン情報）

## URL/ルーティング

- ソースファイル: `docs/src/version.rst`
- 生成先URL: `/version.html`
- Sphinxアンカー: `.. _version:`

## 入出力項目

| 項目名 | 入出力 | 型 | 説明 |
|--------|--------|-----|------|
| ページタイトル | 出力 | テキスト | "Version-checking macros and functions" |
| マクロ定義一覧 | 出力 | 定義リスト | 6つのバージョンマクロ |
| 関数定義一覧 | 出力 | 関数シグネチャ+説明 | 2つのバージョン関数 |

## 表示項目

### Macros セクション

| マクロ名 | 説明 | 備考 |
|----------|------|------|
| UV_VERSION_MAJOR | メジャーバージョン番号 | 現在値: 1 |
| UV_VERSION_MINOR | マイナーバージョン番号 | 現在値: 52 |
| UV_VERSION_PATCH | パッチバージョン番号 | 現在値: 1 |
| UV_VERSION_IS_RELEASE | リリース版なら1、開発スナップショットなら0 | 現在値: 0 |
| UV_VERSION_SUFFIX | バージョンサフィックス（RC等） | 現在値: "dev" |
| UV_VERSION_HEX | バージョンをパックした整数値（例: 1.2.3 -> 0x010203） | v1.7.0追加 |

### Functions セクション

| 関数名 | シグネチャ | 説明 |
|--------|-----------|------|
| uv_version | `unsigned int uv_version(void)` | UV_VERSION_HEX を返却 |
| uv_version_string | `const char* uv_version_string(void)` | バージョン文字列を返却。非リリース版ではサフィックス付き |

## イベント仕様

### 1-セマンティックバージョニングリンク押下

ページ内のセマンティックバージョニング説明テキストに含まれる外部リンク（https://semver.org）を押下すると、semver.orgサイトへ遷移する。

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

### 操作別データベース影響一覧

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| N/A | N/A | N/A | データベースアクセスなし |

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|--------------|----------|
| N/A | N/A | N/A | 静的HTMLのため動的メッセージなし |

## 例外処理

本画面は静的リファレンスドキュメントのため、画面固有の例外処理は存在しない。

## 備考

- UV_VERSION_HEXは各コンポーネントに8ビットを使用し、パッチ番号が最下位8ビットに格納される
- 非リリース版では `uv_version_string()` が "1.52.1-dev" のようにサフィックス付き文字列を返す
- バージョン情報はコンパイル時にヘッダから埋め込まれるため、共有ライブラリのバージョンとヘッダのバージョンが異なる場合がある

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | version.h | `include/uv/version.h` | バージョンマクロの定義。MAJOR=1, MINOR=52, PATCH=1, IS_RELEASE=0, SUFFIX="dev" |

**読解のコツ**: `UV_VERSION_HEX` はビットシフト演算で3つのバージョン番号を1つの整数に格納している。`(MAJOR << 16) | (MINOR << 8) | PATCH` の構成を理解すれば、バージョン比較が容易になる。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | version.c | `src/version.c` | uv_version(), uv_version_string() の実装 |

**主要処理フロー**:
1. **version.c 24-25行目**: `UV_STRINGIFY` マクロでバージョン番号を文字列化
2. **version.c 27-29行目**: `UV_VERSION_STRING_BASE` でMAJOR.MINOR.PATCH形式の文字列を構成
3. **version.c 31-35行目**: `UV_VERSION_IS_RELEASE` の条件で `UV_VERSION_STRING` にサフィックスを付加
4. **version.c 38-40行目**: `uv_version()` が `UV_VERSION_HEX` を返却
5. **version.c 43-45行目**: `uv_version_string()` が `UV_VERSION_STRING` を返却

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

```
uv_version() [src/version.c:38]
    |
    +-- UV_VERSION_HEX [include/uv/version.h:39]
            +-- (UV_VERSION_MAJOR << 16) | (UV_VERSION_MINOR << 8) | UV_VERSION_PATCH

uv_version_string() [src/version.c:43]
    |
    +-- UV_VERSION_STRING [src/version.c:31-35]
            +-- UV_VERSION_STRING_BASE ("1.52.1")
            +-- (非リリース時) "-" UV_VERSION_SUFFIX ("-dev")
```

### データフロー図

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

include/uv/version.h  -->  プリプロセッサ展開   -->  UV_VERSION_HEX (0x013401)
(マクロ定義)                                          UV_VERSION_STRING ("1.52.1-dev")

uv_version()          -->  UV_VERSION_HEX返却   -->  unsigned int (0x013401)
uv_version_string()   -->  UV_VERSION_STRING返却 -->  const char* ("1.52.1-dev")
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| version.rst | `docs/src/version.rst` | テンプレート | バージョン情報ページのRSTソース |
| version.h | `include/uv/version.h` | ソース | バージョンマクロ定義ヘッダ |
| version.c | `src/version.c` | ソース | uv_version(), uv_version_string() の実装 |
