# インフラ設計書

## 概要

本ドキュメントは、libuv（バージョン1.52.0）プロジェクトのインフラストラクチャ設計を記載する。libuvはマルチプラットフォーム対応の非同期I/Oライブラリであり、Cライブラリとして提供される。コンテナ化やクラウドインフラは使用せず、GitHub Actionsを中心としたCI/CDパイプラインと、複数プラットフォーム向けのビルドシステムで構成される。

## システム構成

### 全体構成

libuvはネイティブCライブラリであり、サーバーアプリケーションとしてのデプロイ構成は持たない。代わりに以下のインフラ要素で構成される：

- **ソースコード管理**: GitHub（github.com/libuv/libuv）
- **CI/CDパイプライン**: GitHub Actions（5つのワークフロー）
- **ドキュメントホスティング**: ReadTheDocs（Sphinx HTMLビルダー）
- **パッケージ配布**: pkg-config（libuv.pc / libuv-static.pc）
- **依存関係管理**: Dependabot（GitHub Actions自動更新）

### サーバー構成

| サーバー種別 | 役割 | スペック | 台数 |
| --- | --- | --- | --- |
| GitHub Actions Runner (Ubuntu) | Linux CI/CDビルド・テスト | ubuntu-22.04 / ubuntu-latest | オンデマンド |
| GitHub Actions Runner (macOS) | macOS CI/CDビルド・テスト | macos-14 / macos-15 / macos-15-large | オンデマンド |
| GitHub Actions Runner (Windows) | Windows CI/CDビルド・テスト | windows-2022 / windows-2025 | オンデマンド |
| ReadTheDocs | ドキュメントビルド・ホスティング | ubuntu-22.04 / Python 3.9 | 1（マネージド） |

### ネットワーク構成

本プロジェクトはライブラリであり、独自のネットワークインフラは持たない。CI/CDにおけるネットワーク要素は以下の通り：

- GitHub Actionsランナー間通信: ジョブ間アーティファクト共有（actions/upload-artifact / download-artifact）
- Android CI: adb（Android Debug Bridge）によるエミュレータ通信
- ReadTheDocs: GitHubリポジトリからのWebhook連携

## ミドルウェア

| ミドルウェア | バージョン | 用途 |
| --- | --- | --- |
| CMake | 3.10以上 | 主要ビルドシステム |
| Ninja | 最新 | CMakeジェネレータ（Unix/macOS） |
| Autotools (autoconf/automake/libtool) | 各種 | 代替ビルドシステム（後方互換性） |
| GCC | 各種 | Linux/Unixコンパイラ |
| Clang | 各種（17含む） | macOS/サニタイザー用コンパイラ |
| MSVC (Visual Studio) | 2022 / 2025 | Windowsコンパイラ |
| MinGW | i686 / x86_64 | Windowsクロスコンパイル |
| QEMU | 最新 | クロスアーキテクチャエミュレーション |
| Android NDK | API 30 | Androidビルド |
| Xcode | 最新 | iOS/macOSビルド |
| Sphinx | 最新 | ドキュメント生成 |
| clang-tidy | 最新 | 静的コード解析 |
| Python | 3.9 | ドキュメントビルド環境 |
| pkg-config | 各種 | ライブラリ検出・リンク支援 |

## 外部サービス連携

| サービス名 | 用途 | 接続方式 |
| --- | --- | --- |
| GitHub | ソースコード管理・Issue管理・PR管理 | HTTPS / Git |
| GitHub Actions | CI/CDパイプライン実行 | Webhook（push/PR トリガー） |
| ReadTheDocs | ドキュメントビルド・ホスティング | GitHub Webhook連携 |
| Dependabot | GitHub Actions依存関係の自動更新 | GitHub API |

## スケーリング設計

本プロジェクトはライブラリであるため、ランタイムのスケーリング設計は対象外である。CI/CDにおけるスケーリングは以下の通り：

- **並列ジョブ実行**: GitHub Actionsのマトリックス戦略により、複数のOS・アーキテクチャ・コンパイラ構成を並列実行
  - CI-unix: macOS 3バリアント + Linux autotools + Android + iOS + クロスコンパイル14アーキテクチャ
  - CI-win: Visual Studio 5構成 + MinGW 2構成
  - Sanitizer: Linux 4種 + macOS 3種 + Windows 1種
- **ジョブ依存関係**: MinGWテストはMinGWビルドジョブに依存（`needs: build-mingw`）
- **GitHub Actionsランナー**: GitHub提供のマネージドランナーを使用し、オンデマンドでスケール

## 可用性設計

- **GitHub**: SLA 99.9%のマネージドサービス
- **GitHub Actions**: GitHubプラットフォームの可用性に依存
- **ReadTheDocs**: マネージドサービスとして高可用性を提供
- **ビルドシステム冗長性**: CMakeとAutotoolsの2系統のビルドシステムを維持し、一方に問題が生じても代替可能

## バックアップ設計

| 対象 | 方式 | 頻度 | 保持期間 |
| --- | --- | --- | --- |
| ソースコード | Git分散リポジトリ | コミットごと | 永続（Git履歴） |
| CIアーティファクト | GitHub Actions Artifacts | ビルドごと | 2日間（MinGWバイナリ） |
| ドキュメント | ReadTheDocs自動ビルド | コミットごと | ReadTheDocs管理 |

## 監視設計

### CI/CDパイプライン監視

- **ビルド状態監視**: GitHub Actionsのステータスチェック（PR必須チェック）
- **テスト結果**: ctest実行結果をGitHub Actionsログに出力
- **サニタイザー検出**: ASAN / MSAN / TSAN / UBSAN による実行時エラー検出
- **静的解析**: clang-tidyによるコード品質監視（CMakeLists.txtにtidyターゲット定義）
- **依存関係監視**: Dependabotによる週次の依存関係チェック

### テストタイムアウト管理

- 標準テスト: デフォルトタイムアウト
- Androidテスト: タイムアウト乗数5倍（`UV_TEST_TIMEOUT_MULTIPLIER=5`）
- QEMUテスト: ビルドオプション`-DQEMU=ON`による調整

## CI/CDパイプライン詳細

### ワークフロー一覧

| ワークフロー | ファイル | トリガー | 対象 |
| --- | --- | --- | --- |
| CI-unix | CI-unix.yml | PR / Push (v*, master) | Linux, macOS, Android, iOS, QEMU |
| CI-win | CI-win.yml | PR / Push (v*, master) | Windows (MSVC, MinGW) |
| CI-docs | CI-docs.yml | PR (docs/**) | Sphinxドキュメント検証 |
| CI-sample | CI-sample.yml | PR / Push (docs/code/**) | サンプルコードビルド |
| Sanitizer | sanitizer.yml | PR / Push | ASAN, MSAN, TSAN, UBSAN |

### テスト対象アーキテクチャ（QEMU）

| アーキテクチャ | ツールチェーンプレフィックス |
| --- | --- |
| arm | arm-linux-gnueabihf |
| aarch64 | aarch64-linux-gnu |
| riscv64 | riscv64-linux-gnu |
| ppc | powerpc-linux-gnu |
| ppc64 | powerpc64-linux-gnu |
| ppc64le | powerpc64le-linux-gnu |
| s390x | s390x-linux-gnu |
| mips | mips-linux-gnu |
| mips64 | mips64-linux-gnuabi64 |
| mipsel | mipsel-linux-gnu |
| mips64el | mips64el-linux-gnuabi64 |
| arm (musl) | arm-linux-musleabihf |
| aarch64 (musl) | aarch64-linux-musl |
| riscv64 (musl) | riscv64-linux-musl |

## ビルドシステム構成

### CMake（主要ビルドシステム）

- **最小バージョン**: 3.10
- **C標準**: C11
- **ビルドターゲット**: 共有ライブラリ（uv）、静的ライブラリ（uv_a）、テスト、ベンチマーク
- **サニタイザーオプション**: ASAN, MSAN, TSAN, UBSAN（CMakeオプションで制御）
- **クロスコンパイル**: cmake-toolchains/cross-mingw32.cmake

### Autotools（代替ビルドシステム）

- **Autoconf**: configure.ac（バージョン1.52.0）
- **Automake**: Makefile.am
- **Libtool**: 共有/静的ライブラリ生成
- **autogen.sh**: Autotools初期化スクリプト

## 備考

- 本プロジェクトはCライブラリであり、Docker/Kubernetes/Terraform等のコンテナ・クラウドインフラは使用していない
- ビルドはすべてGitHub Actionsのマネージドランナー上で実行される
- セキュリティ対策として4種のサニタイザー（ASAN, MSAN, TSAN, UBSAN）とclang-tidy静的解析を併用
- ReadTheDocs連携により、ドキュメントはコミット時に自動ビルド・公開される
- Dependabotにより、GitHub Actionsのアクション依存関係が週次で自動更新される
