# 画面設計書 1-画面なし

## 概要

本ドキュメントは、Hack Standard Library (HSL) プロジェクトにおける画面設計書です。HSLはUIを持たないライブラリプロジェクトであるため、本ドキュメントでは画面が存在しない理由と、プロジェクトの技術的構成について説明します。

### 本画面の処理概要

本プロジェクト（Hack Standard Library）はUIを持たないライブラリプロジェクトのため、画面は存在しません。HSLは、Hack言語プログラマー向けに一貫性のある、集中管理された、適切に型付けされたAPIセットを提供することを目的としたライブラリです。

**業務上の目的・背景**：HSLは、Hack言語でのプログラミングにおいて、特にHack arrays（`vec`、`keyset`、`dict`）を扱う際に有用な標準ライブラリを提供します。これにより、開発者は一貫したAPIを使用してコレクション操作、ファイル操作、非同期処理、ネットワーク通信などの機能を利用できます。UIを持たず、他のHack/HHVMアプリケーションから利用されるライブラリとして設計されています。

**画面へのアクセス方法**：本プロジェクトはライブラリであるため、画面へのアクセス方法は該当しません。ライブラリの機能は、Hack言語で記述されたアプリケーションから `use` 文でインポートして使用します。

**主要な操作・処理内容**：
1. **コレクション操作**: `vec`、`keyset`、`dict` に対する変換、選択、順序付け、結合などの操作
2. **文字列操作**: 文字列の結合、分割、検索、変換などの機能
3. **ファイル操作**: ファイルの読み書き、一時ファイルの作成、ロック機能
4. **非同期処理**: 非同期実行のためのセマフォ、条件変数、ポーリング機能
5. **ネットワーク通信**: TCP/Unixソケット通信機能
6. **数学関数**: 基本的な数学計算、比較、定数
7. **正規表現**: パターンマッチング機能
8. **入出力**: 標準入出力、パイプ、バッファリング機能

**画面遷移**：本プロジェクトはUIを持たないため、画面遷移は存在しません。

**権限による表示制御**：本プロジェクトはUIを持たないため、権限による表示制御は該当しません。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| N/A | 該当なし | - | 本プロジェクトはUIを持たないライブラリプロジェクトのため、画面機能マッピングは該当しません |

## 画面種別

該当なし（UIを持たないライブラリプロジェクト）

## URL/ルーティング

該当なし（UIを持たないライブラリプロジェクト）

## 入出力項目

該当なし（UIを持たないライブラリプロジェクト）

## 表示項目

該当なし（UIを持たないライブラリプロジェクト）

## イベント仕様

該当なし（UIを持たないライブラリプロジェクト）

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

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| 該当なし | - | - | 本ライブラリは独自のデータベースを持ちません |

### テーブル別更新項目詳細

該当なし（本ライブラリは独自のデータベースを持ちません）

## メッセージ仕様

該当なし（UIを持たないライブラリプロジェクト）

## 例外処理

本ライブラリでは、各モジュールで例外クラスが定義されています：

| 例外クラス | モジュール | 説明 |
|-----------|----------|------|
| `HErrnoException` | os | Cライブラリ関数のエラーを表す例外 |
| `AlreadyLockedException` | file | ファイルが既にロックされている場合の例外 |
| 正規表現例外 | regex | パターンマッチング失敗時の例外 |

## 備考

- 2021年5月4日以降、HSLはHHVMとタイプチェッカーに組み込まれる形で移行が進んでおり、このリポジトリには主にテストのみが含まれています。
- 本ライブラリへの貢献は、[HHVMリポジトリ](https://github.com/facebook/hhvm/)の`hphp/hsl`サブディレクトリで行うことが推奨されています。
- ライセンスはMITライセンスです。

---

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

本プロジェクトはUIを持たないライブラリであるため、画面関連のコードは存在しません。以下では、ライブラリの構成を理解するためのガイドを提供します。

### 推奨読解順序

#### Step 1: プロジェクト構成を理解する

まず、プロジェクトの全体構成を把握することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | README.md | `README.md` | プロジェクトの目的、現在のステータス、貢献方法を理解 |
| 1-2 | .hhconfig | `.hhconfig` | Hack言語の設定を確認 |

**読解のコツ**: HSLは現在HHVMに統合される過程にあり、このリポジトリは主にテスト目的で維持されています。

#### Step 2: ライブラリモジュールの構成を理解する

各モジュールの役割と公開APIを把握します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | srcディレクトリ | `src/` | 各サブディレクトリがモジュールに対応（async, c, dict, file, io, keyset, locale, math, network, os, random, regex, str, tcp, unix, vec） |

**主要モジュール構成**:
- **str/**: 文字列操作関数（combine, divide, format, introspect, select, transform）
- **vec/**: ベクター操作関数（cast, order, divide, transform, async, select, combine）
- **dict/**: 辞書操作関数
- **io/**: 入出力ハンドル（ReadHandle, WriteHandle, BufferedReader など）
- **file/**: ファイル操作（open, temporary_file, Lock など）
- **async/**: 非同期プリミティブ（Semaphore, Condition, Poll など）
- **network/**: ネットワーク抽象化（Server, Socket など）
- **tcp/**: TCP通信
- **unix/**: Unixソケット通信

#### Step 3: 典型的なモジュール構成を理解する

strモジュールを例に、各モジュールの内部構成を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | introspect.php | `src/str/introspect.php` | 文字列の検査・分析関数（length, contains, starts_with など） |
| 3-2 | transform.php | `src/str/transform.php` | 文字列の変換関数（uppercase, lowercase, replace など） |
| 3-3 | select.php | `src/str/select.php` | 文字列の部分選択関数（slice, trim など） |

**主要処理フロー**:
- 各関数はHack言語の組み込み関数をラップし、型安全なAPIを提供
- `*_l.php` ファイルはロケール対応版の関数を含む

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

本プロジェクトはライブラリのため、呼び出し階層はライブラリを利用するアプリケーションに依存します。

```
[利用アプリケーション]
    |
    +-- HSL Namespace
           |
           +-- HH\Lib\Str  (文字列操作)
           |      +-- combine.php
           |      +-- transform.php
           |      +-- introspect.php
           |      +-- ...
           |
           +-- HH\Lib\Vec  (ベクター操作)
           |      +-- cast.php
           |      +-- transform.php
           |      +-- ...
           |
           +-- HH\Lib\Dict (辞書操作)
           |
           +-- HH\Lib\IO   (入出力)
           |      +-- stdio.php
           |      +-- BufferedReader.php
           |      +-- ...
           |
           +-- HH\Lib\File (ファイル操作)
           |      +-- open.php
           |      +-- temporary_file.php
           |      +-- ...
           |
           +-- HH\Lib\Async (非同期処理)
           |      +-- Semaphore.php
           |      +-- Condition.php
           |      +-- ...
           |
           +-- HH\Lib\OS   (OS機能)
           |
           +-- HH\Lib\TCP  (TCP通信)
           |
           +-- HH\Lib\Unix (Unixソケット)
```

### データフロー図

本プロジェクトはライブラリのため、データフローはライブラリを利用するアプリケーションに依存します。以下は典型的な使用パターンの例です。

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

ユーザーアプリ ───▶ HSL関数呼び出し ───▶ 処理結果を返却

例: 文字列処理
string ───▶ Str\uppercase() ───▶ 大文字変換された文字列

例: ファイル読み込み
ファイルパス ───▶ File\open_read_only() ───▶ ReadHandle
ReadHandle ───▶ IO\BufferedReader ───▶ 行ごとのデータ
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| README.md | `README.md` | ドキュメント | プロジェクト概要、ステータス、貢献ガイド |
| .hhconfig | `.hhconfig` | 設定 | Hack言語プロジェクト設定 |
| LICENSE | `LICENSE` | ライセンス | MITライセンス文書 |
| dune | `dune` | ビルド設定 | OCaml/duneビルドシステム設定 |
| src/str/*.php | `src/str/` | ソース | 文字列操作モジュール |
| src/vec/*.php | `src/vec/` | ソース | ベクター操作モジュール |
| src/dict/*.php | `src/dict/` | ソース | 辞書操作モジュール |
| src/io/*.php | `src/io/` | ソース | 入出力モジュール |
| src/file/*.php | `src/file/` | ソース | ファイル操作モジュール |
| src/async/*.php | `src/async/` | ソース | 非同期処理モジュール |
| src/network/*.php | `src/network/` | ソース | ネットワーク抽象化モジュール |
| src/tcp/*.php | `src/tcp/` | ソース | TCP通信モジュール |
| src/unix/*.php | `src/unix/` | ソース | Unixソケット通信モジュール |
| src/os/*.php | `src/os/` | ソース | OS機能モジュール |
| src/math/*.php | `src/math/` | ソース | 数学関数モジュール |
| src/regex/*.php | `src/regex/` | ソース | 正規表現モジュール |
| src/locale/*.php | `src/locale/` | ソース | ロケールモジュール |
| src/keyset/*.php | `src/keyset/` | ソース | キーセット操作モジュール |
| src/random/*.php | `src/random/` | ソース | 乱数生成モジュール |
| tests/ | `tests/` | テスト | 各モジュールのテストコード |
| minitest/*.hack | `minitest/` | テスト | テストフレームワーク |
