---
generated_at: 2026-02-22 12:00:00
metrics:
  claims_total: 107
  claims_with_evidence: 101
  claims_without_evidence: 6
confidence_derived: 0.94
---

# 根拠レポート：mruby-dir 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧（mruby-dir.csv）の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.94**
  - 根拠あり：101 / 107、根拠なし：6
- 優先レビュー（高）
  1. **C-039 (Dir.chroot 正常系)**: root権限が必要なため実際のテスト実行が困難
  2. **C-040 (Dir.chroot 権限不足)**: 環境依存のため検証が不確実
  3. **C-041 (Dir.chroot 未サポート)**: プラットフォーム依存で再現環境が限定的
  4. **C-101 (HAL chroot 正常系)**: root権限が必要
  5. **C-102 (HAL chroot 未サポート)**: プラットフォーム依存
  6. **C-036 (Dir.mkdir 権限不足)**: 環境構築の前提条件が特殊

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

- E-01: `mrbgems/mruby-dir/src/dir.c` — Dirクラスのネイティブ実装（C言語）。全クラスメソッド・インスタンスメソッドの実装
- E-02: `mrbgems/mruby-dir/mrblib/dir.rb` — Dir クラスのRuby実装。each, each_child, foreach, open, chdir、各エイリアス定義
- E-03: `mrbgems/mruby-dir/include/dir_hal.h` — HAL（Hardware Abstraction Layer）インターフェース定義。全HAL関数のプロトタイプ宣言とコメント
- E-04: `mrbgems/mruby-dir/test/dir.rb` — 既存の統合テストコード（Ruby）
- E-05: `mrbgems/mruby-dir/test/dirtest.c` — テストヘルパー（DirTestモジュール）のC実装
- E-06: `mrbgems/mruby-dir/README.md` — サポートメソッド一覧のドキュメント

## 3) Claims と根拠の対応（レビューの主戦場）

### Dir#initialize（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | 有効なパスでDirオブジェクトが生成される | E-01 (L73-97), E-04 (L61-65) | ○ |
| C-002 | 存在しないパスでSystemCallErrorが発生する | E-01 (L92-94) | ○ |
| C-003 | 空文字列でエラーが発生する | E-01 (L92-94) | ○ |
| C-004 | 既に初期化済みの場合に旧ハンドルが解放される | E-01 (L80-83) | ○ |

### Dir#close（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-005 | オープン中のディレクトリが正常にクローズされる | E-01 (L49-63), E-04 (L61-70) | ○ |
| C-006 | クローズ済みでIOErrorが発生する | E-01 (L55-56) | ○ |
| C-007 | 内部データ無効でnilが返却される | E-01 (L53-54) | ○ |

### Dir#read（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-008 | エントリ名が文字列で返却される | E-01 (L289-307), E-04 (L81-90) | ○ |
| C-009 | 全エントリ読了後にnilが返却される | E-01 (L304-306) | ○ |
| C-010 | クローズ済みでIOErrorが発生する | E-01 (L297-298) | ○ |
| C-011 | 内部データ無効でnilが返却される | E-01 (L295-296) | ○ |
| C-012 | 「.」と「..」が含まれる | E-01 (L300-301), E-04 (L81-90) | ○ |

### Dir#rewind（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-013 | ストリームが先頭に戻る | E-01 (L320-332), E-04 (L92-105) | ○ |
| C-014 | クローズ済みでIOErrorが発生する | E-01 (L327-328) | ○ |
| C-015 | 内部データ無効でnilが返却される | E-01 (L325-326) | ○ |

### Dir#seek（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-016 | 指定位置にシークできる | E-01 (L347-365), E-04 (L122-133) | ○ |
| C-017 | クローズ済みでIOErrorが発生する | E-01 (L354-356) | ○ |
| C-018 | 未サポートでNotImplementedErrorが発生する | E-01 (L359-362) | ○ |
| C-019 | 内部データ無効でnilが返却される | E-01 (L353-354) | ○ |

### Dir#tell（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-020 | 現在位置が整数で返却される | E-01 (L379-397), E-04 (L110-120) | ○ |
| C-021 | readの前後でtellの値が変化する | E-01 (L390-396) | ○ |
| C-022 | クローズ済みでIOErrorが発生する | E-01 (L387-388) | ○ |
| C-023 | 未サポートでNotImplementedErrorが発生する | E-01 (L391-394) | ○ |

### Dir.delete（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-024 | 空ディレクトリが削除され0が返却される | E-01 (L108-118), E-04 (L43-50) | ○ |
| C-025 | 空でないディレクトリでSystemCallErrorが発生する | E-01 (L114-116) | ○ |
| C-026 | 存在しないディレクトリでSystemCallErrorが発生する | E-01 (L114-116) | ○ |

### Dir.exist?（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-027 | 存在するディレクトリでtrueが返却される | E-01 (L129-141), E-04 (L19-22) | ○ |
| C-028 | 存在しないパスでfalseが返却される | E-01 (L138-140), E-04 (L21) | ○ |
| C-029 | ファイルのパスでfalseが返却される | E-01 (L135-140) | ○ |

### Dir.getwd（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-030 | カレントディレクトリが文字列で返却される | E-01 (L152-168), E-04 (L31-34) | ○ |
| C-031 | chdirとの整合性がある | E-01 (L152-168), E-04 (L9-11) | ○ |
| C-032 | バッファ自動拡張で長いパスも取得できる | E-01 (L155-165) | ○ |

### Dir.mkdir（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-033 | デフォルトパーミッションでディレクトリが作成される | E-01 (L182-194), E-04 (L36-41) | ○ |
| C-034 | パーミッション指定付きで作成される | E-01 (L188-189), E-04 (L40) | ○ |
| C-035 | 既存ディレクトリ名でSystemCallErrorが発生する | E-01 (L190-192) | ○ |
| C-036 | 書き込み権限不足でSystemCallErrorが発生する | E-01 (L190-192) | △ |

### Dir._chdir（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-037 | 作業ディレクトリが変更され0が返却される | E-01 (L197-207), E-04 (L9-11) | ○ |
| C-038 | 存在しないパスでSystemCallErrorが発生する | E-01 (L203-205) | ○ |

### Dir.chroot（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-039 | ルートディレクトリが変更され0が返却される | E-01 (L218-234) | △ |
| C-040 | 権限不足でSystemCallErrorが発生する | E-01 (L226-231) | △ |
| C-041 | 未サポートでNotImplementedErrorが発生する | E-01 (L227-229) | △ |

### Dir.empty?（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-042 | 空ディレクトリでtrueが返却される | E-01 (L255-275) | ○ |
| C-043 | 空でないディレクトリでfalseが返却される | E-01 (L267-270) | ○ |
| C-044 | 存在しないパスでSystemCallErrorが発生する | E-01 (L264-265) | ○ |

### Dir.entries（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-045 | 全エントリが配列で返却される | E-01 (L406-426), E-04 (L13-17) | ○ |
| C-046 | 「.」「..」が含まれる | E-01 (L420-421) | ○ |
| C-047 | 存在しないパスでSystemCallErrorが発生する | E-01 (L414-416) | ○ |
| C-048 | 空ディレクトリで「.」「..」のみの配列 | E-01 (L418-425) | ○ |

### Dir.children（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-049 | 「.」「..」を除いた子エントリが返却される | E-01 (L436-458) | ○ |
| C-050 | 存在しないパスでSystemCallErrorが発生する | E-01 (L443-445) | ○ |
| C-051 | 空ディレクトリで空配列が返却される | E-01 (L448-456) | ○ |

### skip_name_p（C実装・内部関数）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-052 | 「.」に対してTRUE | E-01 (L239-240) | ○ |
| C-053 | 「..」に対してTRUE | E-01 (L241-242) | ○ |
| C-054 | 通常ファイル名に対してFALSE | E-01 (L239) | ○ |
| C-055 | 「.hidden」に対してFALSE | E-01 (L241) | ○ |
| C-056 | 「...」に対してFALSE | E-01 (L243) | ○ |

### mrb_dir_free（C実装・内部関数）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-057 | ハンドル開放時にクローズされメモリ解放 | E-01 (L26-35) | ○ |
| C-058 | NULLハンドル時にメモリのみ解放 | E-01 (L30-33) | ○ |

### gem初期化（C実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-059 | Dirクラスが正しく定義される | E-01 (L460-487) | ○ |
| C-060 | IOErrorクラスが定義される | E-01 (L486) | ○ |

### Dir#each（Ruby実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-061 | ブロック付きで全エントリが渡される | E-02 (L15-21) | ○ |
| C-062 | ブロックなしでEnumeratorが返却される | E-02 (L16) | ○ |
| C-063 | 空ディレクトリで「.」「..」のみ | E-02 (L17-19) | ○ |

### Dir#each_child（Ruby実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-064 | 「.」「..」を除いたエントリが渡される | E-02 (L34-40), E-04 (L72-79) | ○ |
| C-065 | ブロックなしでEnumeratorが返却される | E-02 (L35) | ○ |
| C-066 | 空ディレクトリでブロックが呼ばれない | E-02 (L36-38) | ○ |

### Dir.foreach（Ruby実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-067 | ブロック付きで全エントリが渡される | E-02 (L58-63), E-04 (L24-29) | ○ |
| C-068 | ブロックなしでEnumeratorが返却される | E-02 (L59) | ○ |
| C-069 | 存在しないパスでSystemCallErrorが発生する | E-02 (L60) | ○ |

### Dir.open（Ruby実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-070 | ブロックなしでDirオブジェクトが返却される | E-02 (L87-88) | ○ |
| C-071 | ブロック付きで戻り値が返却されクローズされる | E-02 (L77-89), E-04 (L52-59) | ○ |
| C-072 | ブロック内例外でもクローズされる | E-02 (L81-85) | ○ |
| C-073 | 存在しないパスでSystemCallErrorが発生する | E-02 (L78) | ○ |

### Dir.chdir（Ruby実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-074 | ブロックなしで0が返却される | E-02 (L115-116), E-04 (L9-11) | ○ |
| C-075 | ブロック付きで一時的に変更され復帰する | E-02 (L106-117) | ○ |
| C-076 | ブロック内例外でも元に戻る | E-02 (L111-113) | ○ |
| C-077 | 存在しないパスでSystemCallErrorが発生する | E-02 (L109, L115) | ○ |
| C-078 | ブロックにパス文字列が渡される | E-02 (L110) | ○ |

### エイリアス（Ruby実装）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-079 | posがtellのエイリアス | E-02 (L42) | ○ |
| C-080 | pos=がseekのエイリアス | E-02 (L43) | ○ |
| C-081 | exists?がexist?のエイリアス | E-02 (L119) | ○ |
| C-082 | pwdがgetwdのエイリアス | E-02 (L120) | ○ |
| C-083 | rmdirがdeleteのエイリアス | E-02 (L121) | ○ |
| C-084 | unlinkがdeleteのエイリアス | E-02 (L122) | ○ |
| C-085 | DirがEnumerableをincludeしている | E-02 (L2) | ○ |

### HAL層インターフェース
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-086 | mrb_hal_dir_open 正常系 | E-03 (L26) | ○ |
| C-087 | mrb_hal_dir_open 異常系 | E-03 (L26) | ○ |
| C-088 | mrb_hal_dir_close 正常系 | E-03 (L29) | ○ |
| C-089 | mrb_hal_dir_read 正常系 | E-03 (L32) | ○ |
| C-090 | mrb_hal_dir_read 終端 | E-03 (L32) | ○ |
| C-091 | mrb_hal_dir_rewind 正常系 | E-03 (L35) | ○ |
| C-092 | mrb_hal_dir_seek 正常系 | E-03 (L42) | ○ |
| C-093 | mrb_hal_dir_seek 未サポート | E-03 (L42) | ○ |
| C-094 | mrb_hal_dir_tell 正常系 | E-03 (L45) | ○ |
| C-095 | mrb_hal_dir_tell 未サポート | E-03 (L45) | ○ |
| C-096 | mrb_hal_dir_mkdir 正常系 | E-03 (L52) | ○ |
| C-097 | mrb_hal_dir_rmdir 正常系 | E-03 (L55) | ○ |
| C-098 | mrb_hal_dir_chdir 正常系 | E-03 (L58) | ○ |
| C-099 | mrb_hal_dir_getcwd 正常系 | E-03 (L61) | ○ |
| C-100 | mrb_hal_dir_getcwd バッファ不足 | E-03 (L61) | ○ |
| C-101 | mrb_hal_dir_chroot 正常系 | E-03 (L64) | △ |
| C-102 | mrb_hal_dir_chroot 未サポート | E-03 (L64) | △ |
| C-103 | mrb_hal_dir_is_directory ディレクトリ | E-03 (L67) | ○ |
| C-104 | mrb_hal_dir_is_directory ファイル | E-03 (L67) | ○ |
| C-105 | mrb_hal_dir_is_directory 不在パス | E-03 (L67) | ○ |
| C-106 | mrb_hal_dir_init 正常系 | E-03 (L74) | ○ |
| C-107 | mrb_hal_dir_final 正常系 | E-03 (L77) | ○ |

## 4) 不足情報（Unknown / Missing）
- **Dir.chroot関連（C-039, C-040, C-041, C-101, C-102）**: chrootはroot権限が必要な特権操作であり、通常のテスト環境では実行・検証が困難。また、プラットフォームによっては未サポート（ENOSYSを返す）。ソースコードに実装は存在するが、テストでの再現性が低い。
  - 候補：root権限でのCI環境構築 / Dockerコンテナでのchroot検証 / モック化による単体テスト
- **Dir.mkdir 権限不足（C-036）**: 書き込み権限のないディレクトリへのmkdirテストは、テスト環境のファイルシステム構成に依存する。ソースコードのエラーパスは明確だが、テスト前提条件の構築が特殊。
  - 候補：一時ディレクトリの権限変更によるテスト / コンテナ環境での検証

## 5) リスクフラグ（レビュー観点）
- **リスク1（中リスク）**: chroot関連テストケース（C-039〜C-041, C-101〜C-102）は、root権限やプラットフォーム依存が強く、CI環境での自動テストが困難。手動テストまたはモック化の検討が必要。
- **リスク0（低リスク）**: seek/tell関連テストケース（C-016〜C-023, C-092〜C-095）は、プラットフォーム依存はあるがNotImplementedErrorで適切にハンドリングされており、既存テスト（E-04）でもtry/rescueで対応済み。
- **リスク0（低リスク）**: HAL層のテストケース（C-086〜C-107）は、HAL実装がプラットフォーム別に分離されているため、POSIX/Windows各環境でのテスト実行が必要だが、HALインターフェース自体は明確に定義されている。

## 6) レビュアーチェックリスト（最小）
- [ ] C実装（dir.c）の全public関数に対するテストケースが存在するか確認
- [ ] Ruby実装（dir.rb）の全publicメソッドに対するテストケースが存在するか確認
- [ ] 既存テスト（test/dir.rb）でカバーされているケースとの重複・不足を確認
- [ ] chroot関連テスト（C-039〜C-041）の実行可能性と代替手段を検討
- [ ] seek/tell関連テスト（C-016〜C-023）のプラットフォーム依存性を確認
- [ ] HAL層テスト（C-086〜C-107）がPOSIX/Windows両環境で網羅されているか確認
- [ ] エイリアスメソッド（C-079〜C-084）が正しく元メソッドを参照しているか確認
- [ ] 境界値テスト（空ディレクトリ、バッファサイズ超過等）の網羅性を確認
