---
generated_at: 2026-02-22 17:00:00
metrics:
  claims_total: 35
  claims_with_evidence: 33
  claims_without_evidence: 2
confidence_derived: 0.94
---

# 根拠レポート：アーキテクチャ設計書

## 本レポートについて

### 目的
本レポートは、生成されたアーキテクチャ設計書の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.94**
  - 根拠あり：33 / 35、根拠なし：2
- 優先レビュー（高）
  1. **C-34 io_uring対応ファイル操作の完全なリスト**：io_uringが対応する全操作の網羅性が完全には検証できない
  2. **C-35 プラットフォーム別I/Oバックエンド対応の完全性**：一部のプラットフォーム（Haiku, QNX等）のI/Oバックエンドはコードから推定

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。

- E-01: `include/uv.h` - パブリックAPIヘッダ（ハンドル型、リクエスト型、コールバック型、マクロ定義）
- E-02: `include/uv/version.h` - バージョン定義（1.52.1-dev）
- E-03: `include/uv/unix.h` - Unix固有構造体フィールド定義
- E-04: `include/uv/win.h` - Windows固有構造体フィールド定義
- E-05: `include/uv/errno.h` - エラーコード定義
- E-06: `src/uv-common.h` - 共通内部ヘッダ（ハンドルフラグ、マクロ、内部構造体）
- E-07: `src/uv-common.c` - 共通実装（メモリ管理、カスタムアロケータ）
- E-08: `src/timer.c` - タイマー実装（ヒープベース）
- E-09: `src/threadpool.c` - スレッドプール実装（ワーカースレッド、ワークキュー）
- E-10: `src/heap-inl.h` - 二分最小ヒープ実装
- E-11: `src/queue.h` - 侵入型双方向リスト実装
- E-12: `src/unix/core.c` - Unixイベントループ本体（`uv_run`）
- E-13: `src/unix/loop.c` - Unixループ初期化・終了（`uv_loop_init`）
- E-14: `src/unix/internal.h` - Unix内部ヘッダ（I/Oコールバック型、プラットフォーム分岐）
- E-15: `src/win/core.c` - Windowsイベントループ本体（`uv_run`）
- E-16: `src/random.c` - 乱数生成エントリポイント（プラットフォーム分岐）
- E-17: `CMakeLists.txt` - ビルド設定（ソースファイル一覧、プラットフォーム条件分岐、ライブラリ依存関係）
- E-18: `src/version.c` - バージョン情報実装
- E-19: `src/fs-poll.c` - ファイルシステムポーリング実装
- E-20: `src/inet.c` - IPアドレス変換実装
- E-21: `src/idna.c` - IDNA処理実装

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | libuvはバージョン1.52.1-devである | E-02 (`UV_VERSION_MAJOR 1`, `UV_VERSION_MINOR 52`, `UV_VERSION_PATCH 1`, `UV_VERSION_SUFFIX "dev"`) | ○ |
| C-02 | C言語（C11標準）で実装されている | E-17 (`CMAKE_C_STANDARD 11`) | ○ |
| C-03 | イベント駆動型アーキテクチャ・Reactor Patternを採用 | E-12 (`uv_run`のイベントループ構造), E-01 (コールバック型定義) | ○ |
| C-04 | epoll/kqueue/IOCP/event portsをI/Oバックエンドとして使用 | E-14 (I/Oコールバック定義), E-17 (プラットフォーム分岐), E-12 (`uv__io_poll`呼び出し) | ○ |
| C-05 | 3層レイヤードアーキテクチャ（パブリックAPI、共通実装、プラットフォーム固有） | E-01, E-06, E-07, E-12, E-14 (ファイル構造と依存関係) | ○ |
| C-06 | ハンドル型とリクエスト型の分離 | E-01 (`UV_HANDLE_TYPE_MAP`, `UV_REQ_TYPE_MAP`, `uv_handle_s`, `uv_req_s`) | ○ |
| C-07 | `uv_stream_t`はTCP/パイプ/TTYの基底型 | E-01 (`uv_stream_s`定義), E-14 (`uv__stream_init`宣言) | ○ |
| C-08 | タイマーは二分最小ヒープで管理される | E-08 (`timer_heap`, `heap_insert`, `heap_remove`), E-10 (`struct heap`定義) | ○ |
| C-09 | スレッドプールのデフォルトサイズは4 | E-09 (`default_threads[4]`, `nthreads = ARRAY_SIZE(default_threads)`) | ○ |
| C-10 | スレッドプールの最大サイズは1024 | E-09 (`MAX_THREADPOOL_SIZE 1024`) | ○ |
| C-11 | 環境変数`UV_THREADPOOL_SIZE`で設定可能 | E-09 (`uv_os_getenv("UV_THREADPOOL_SIZE", ...)`) | ○ |
| C-12 | ワーカースレッドのスタックサイズは8MB | E-09 (`config.stack_size = 8u << 20`) | ○ |
| C-13 | スローI/Oの同時実行スレッド数は`(nthreads + 1) / 2`に制限 | E-09 (`slow_work_thread_threshold()`) | ○ |
| C-14 | イベントループの処理順序（timers→pending→idle→prepare→poll→check→closing→timers） | E-12 (`uv_run`関数の実装) | ○ |
| C-15 | I/Oポーリング後の保留中コールバックは最大8回処理（飢餓防止） | E-12 (`for (r = 0; r < 8 && ...`) | ○ |
| C-16 | `uv__work_submit`でスレッドプールにタスクを投入 | E-09 (`uv__work_submit`関数定義) | ○ |
| C-17 | 完了通知は`uv_async_send`でイベントループに通知 | E-09 (`uv_async_send(&w->loop->wq_async)`) | ○ |
| C-18 | カスタムアロケータを`uv_replace_allocator`で設定可能 | E-07 (`uv__allocator_t`構造体), E-01 (`uv_replace_allocator`宣言) | ○ |
| C-19 | エラーは負の整数値で統一的に返される | E-06 (`UV__ERR(x)`マクロ), E-05 (エラーコード定義) | ○ |
| C-20 | `container_of`マクロによる侵入型データ構造 | E-06 (`container_of`マクロ定義), E-09 (使用例) | ○ |
| C-21 | `uv_buf_t`は`struct iovec`とABI互換 | E-12 (`STATIC_ASSERT`によるサイズ・オフセット検証) | ○ |
| C-22 | スレッドプールは遅延初期化（`uv_once`使用） | E-09 (`uv_once(&once, init_once)`) | ○ |
| C-23 | `UV_HANDLE_PRIVATE_FIELDS`マクロでプラットフォーム別の構造体レイアウト切り替え | E-01 (`UV_HANDLE_FIELDS`マクロ内の`UV_HANDLE_PRIVATE_FIELDS`参照) | ○ |
| C-24 | パブリックAPIは`uv_`接頭辞、内部関数は`uv__`接頭辞 | E-01, E-06, E-07, E-12 (全ソースファイルの命名規則) | ○ |
| C-25 | X-macros（`UV_HANDLE_TYPE_MAP`等）によるコード生成パターン | E-01 (`UV_HANDLE_TYPE_MAP`, `UV_REQ_TYPE_MAP`, `UV_ERRNO_MAP`定義) | ○ |
| C-26 | ハンドルの参照カウント方式（`uv_ref`/`uv_unref`） | E-06 (`uv__handle_ref`, `uv__handle_unref`マクロ), E-01 (`uv_ref`, `uv_unref`宣言) | ○ |
| C-27 | `uv__free`はerrnoを保護する | E-07 (`saved_errno = errno; ... errno = saved_errno;`) | ○ |
| C-28 | Linux環境でio_uringがオプションサポート | E-13 (`UV_LOOP_USE_IO_URING_SQPOLL`), E-14 (`uv__iou_fs_*`関数宣言), E-06 (`struct uv__iou`) | ○ |
| C-29 | macOSではFSEventsを使用 | E-17 (macOS条件で`src/unix/fsevents.c`を追加), E-14 (`uv__fsevents_init`宣言) | ○ |
| C-30 | メトリクスとして`uv_metrics_t`でループ回数・イベント数・アイドル時間を記録 | E-06 (`uv__loop_metrics_s`, `uv_metrics_t`), E-12 (`uv__metrics_inc_loop_count`, `uv__metrics_update_idle_time`) | ○ |
| C-31 | 共有ライブラリと静的ライブラリの両方としてビルド可能 | E-17 (`add_library(uv SHARED ...)`, `add_library(uv_a STATIC ...)`) | ○ |
| C-32 | サニタイザ（ASan, MSan, TSan, UBSan）がCMakeオプションでサポート | E-17 (`option(ASAN ...)`, `option(MSAN ...)`, `option(TSAN ...)`, `option(UBSAN ...)`) | ○ |
| C-33 | ビジビリティは`hidden`がデフォルトで、`UV_EXTERN`で公開 | E-17 (`CMAKE_C_VISIBILITY_PRESET hidden`), E-01 (`UV_EXTERN`マクロ定義) | ○ |
| C-34 | io_uringが対応するファイル操作の完全なリスト（open, read, write, close, stat, rename, symlink, unlink, mkdir, ftruncate, fsync, fdatasync, link） | E-14 (`uv__iou_fs_*`関数宣言リスト) | △ |
| C-35 | Haiku, QNX, GNU/HurdのI/Oバックエンドはpollベース | E-17 (`posix-poll.c`の条件コンパイル) | △ |

## 4) 不足情報（Unknown / Missing）
- C-34: io_uringが対応するファイル操作のリストは`src/unix/internal.h`の`uv__iou_fs_*`関数宣言から抽出したが、`src/unix/linux.c`の実装本体を完全に確認していないため、追加の操作が存在する可能性がある
  - 候補：`src/unix/linux.c` の io_uring関連実装コード全体の精査
- C-35: Haiku, QNX, GNU/Hurdについては`CMakeLists.txt`で`posix-poll.c`がソースに含まれることからpollベースと推定したが、各プラットフォーム固有の最適化が存在する可能性がある
  - 候補：`src/unix/haiku.c`, `src/unix/qnx.c`, `src/unix/hurd.c` の実装確認

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - アーキテクチャの基本構造（レイヤー構成、イベントループ、ハンドル/リクエスト分離）はソースコードから明確に確認可能
- 0: 低リスク - スレッドプールの実装詳細（サイズ、スタック、スロー I/O制限）は`src/threadpool.c`から正確に抽出
- 0: 低リスク - エラーハンドリングの方式はヘッダファイルとソースコードから一貫して確認可能
- 1: 中リスク - io_uringの対応操作リストは内部ヘッダの関数宣言から推定しており、実装レベルでの完全な検証は未実施
- 0: 低リスク - プラットフォーム対応はCMakeLists.txtの条件分岐から網羅的に確認

## 6) レビュアーチェックリスト（最小）
- [ ] イベントループの処理順序が`src/unix/core.c`および`src/win/core.c`の`uv_run`実装と一致しているか
- [ ] ハンドル型の継承階層が`include/uv.h`の構造体定義と一致しているか
- [ ] スレッドプールの動作仕様（デフォルトサイズ、最大サイズ、スローI/O制限）が`src/threadpool.c`と一致しているか
- [ ] io_uring対応ファイル操作のリストが`src/unix/linux.c`の実装と完全に一致しているか
- [ ] プラットフォーム別のI/Oバックエンド対応が`CMakeLists.txt`の条件分岐と一致しているか
- [ ] エラーコード体系が`include/uv/errno.h`および`src/uv-common.h`と一致しているか
