# インフラ設計書

## 概要

本ドキュメントは、Hack Standard Library（HSL）プロジェクトのインフラ構成について記載する。本プロジェクトはHHVM上で動作するHack言語のライブラリであり、GitHub Actionsを用いたCI/CD環境およびVS Code Dev Containerによる開発環境を提供する。

## システム構成

### 全体構成

本プロジェクトはライブラリであり、独自のサーバーインフラを持たない。主に以下の構成要素で構成される：

1. **ソースコード管理**: GitHub
2. **CI/CD**: GitHub Actions
3. **開発環境**: VS Code Dev Container（Docker）
4. **ランタイム**: HHVM（HipHop Virtual Machine）

### サーバー構成

| サーバー種別 | 役割 | スペック | 台数 |
| --- | --- | --- | --- |
| GitHub Actions Runner | CI/CDパイプライン実行 | ubuntu-latest | 1（マトリックスビルドにより動的） |
| Dev Container | 開発環境 | hhvm/hhvm:nightly | 開発者ごとに1台 |

※ 本プロジェクトはライブラリであり、本番サーバー構成は存在しない

### ネットワーク構成

本プロジェクトは独立したネットワークインフラを持たない。

- **GitHub Actions**: GitHubの管理するネットワーク上で実行
- **Dev Container**: 開発者のローカルDocker環境上で実行

## ミドルウェア

| ミドルウェア | バージョン | 用途 |
| --- | --- | --- |
| HHVM | nightly（最新開発版） | Hack言語ランタイム / 型チェッカー |
| Watchman | apt経由（最新） | ファイル変更監視（hh_client用） |
| Docker | - | Dev Container実行環境 |

## 外部サービス連携

| サービス名 | 用途 | 接続方式 |
| --- | --- | --- |
| GitHub | ソースコード管理・CI/CD | HTTPS / Git |
| GitHub Actions | 継続的インテグレーション | GitHub Webhooks |
| Docker Hub | コンテナイメージ取得（hhvm/hhvm） | HTTPS |

## スケーリング設計

本プロジェクトはライブラリであり、スケーリング設計は適用されない。

CI/CDについては、GitHub Actionsのマトリックスビルドにより、複数のOS・HHVMバージョンでの並列テスト実行が可能な設計となっている。

## 可用性設計

本プロジェクトはライブラリであり、独自の可用性設計は存在しない。

- **CI/CD**: GitHub Actionsの可用性に依存
- **ソースコード**: GitHubの可用性に依存

## バックアップ設計

| 対象 | 方式 | 頻度 | 保持期間 |
| --- | --- | --- | --- |
| ソースコード | Git分散リポジトリ | コミットごと | 永続 |
| ビルド成果物 | GitHub Actions Artifacts | ビルドごと | GitHub標準（90日） |

## 監視設計

| 監視項目 | 方式 | アラート |
| --- | --- | --- |
| CI/CDビルド状況 | GitHub Actions UI | ビルド失敗時にGitHub通知 |
| 定期ビルド | cron（毎日15:42 UTC） | ビルド失敗時にGitHub通知 |

## CI/CDパイプライン

### ワークフロー構成

| ワークフロー名 | トリガー | 内容 |
| --- | --- | --- |
| Continuous Integration | push, pull_request, schedule | 型チェック・テスト実行 |

### ビルドマトリックス

| OS | HHVMバージョン |
| --- | --- |
| Ubuntu (latest) | nightly |

### ビルドステップ

1. リポジトリチェックアウト
2. HHVM/Hackインストール
3. Watchmanインストール（ファイル監視用）
4. ロケールサポートインストール（多言語テスト用）
5. 型チェック（hh_client）
6. テスト実行（minitest.sh）

## 開発環境（Dev Container）

### コンテナ構成

| 項目 | 値 |
| --- | --- |
| ベースイメージ | hhvm/hhvm:nightly |
| VS Code拡張機能 | pranayagarwal.vscode-hack |

### 初期化処理

コンテナ作成時に以下のパッケージがインストールされる：

- watchman
- language-pack-en
- language-pack-fr
- language-pack-tr
- language-pack-da

## 備考

- 本プロジェクトは2021年5月4日以降、HHVMおよび型チェッカーに組み込まれる形に移行中
- 現在のリポジトリには主にテストコードが含まれる
- 新規貢献はHHVMリポジトリ（facebook/hhvm）の`hphp/hsl`サブディレクトリに対して行う
