---
generated_at: 2026-02-22 12:00:00
metrics:
  claims_total: 55
  claims_with_evidence: 51
  claims_without_evidence: 4
confidence_derived: 0.93
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.93**
  - 根拠あり：51 / 55、根拠なし：4
- 優先レビュー（高）
  1. **UT-OBJ-006（MRB_NO_FLOAT定義時の挙動）**：コンパイルフラグ依存のため実行時テストでの確認が困難
  2. **UT-OBJ-026（instance_execブロックなしエラー）**：エラー種別の特定が根拠不足
  3. **UT-OBJ-054（プライベートメソッドアクセス）**：テストコードに該当テストなし
  4. **UT-OBJ-055（gem_final正常終了）**：空関数のため動作確認が間接的

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `mrbgems/mruby-object-ext/src/object.c` - C言語ソース（NilClass拡張、Kernel#itself、BasicObject#instance_exec、gem初期化/終了関数）
- E-02: `mrbgems/mruby-object-ext/mrblib/object.rb` - Rubyソース（Kernel#yield_self、Kernel#tap）
- E-03: `mrbgems/mruby-object-ext/test/nil.rb` - NilClass拡張のテストコード
- E-04: `mrbgems/mruby-object-ext/test/object.rb` - Object拡張のテストコード（instance_exec、tap）
- E-05: `mrbgems/mruby-object-ext/test/object_ext.c` - C言語テストヘルパー（instance_exec_from_c）
- E-06: `mrbgems/mruby-object-ext/mrbgem.rake` - gem仕様定義
- E-07: `mrbgems/mruby-object-ext/README.md` - ドキュメント（メソッド仕様の説明）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | UT-OBJ-001: nil.to_aが空配列を返す | E-01 (nil_to_a関数 L17-20), E-03 (L1-3) | ○ |
| C-02 | UT-OBJ-002: to_aの戻り値がArray型 | E-01 (mrb_ary_new呼び出し L19) | ○ |
| C-03 | UT-OBJ-003: to_aが毎回新しい配列を返す | E-01 (mrb_ary_new呼び出し L19) | ○ |
| C-04 | UT-OBJ-004: nil.to_fが0.0を返す | E-01 (nil_to_f関数 L31-34), E-03 (L5-8) | ○ |
| C-05 | UT-OBJ-005: to_fの戻り値がFloat型 | E-01 (mrb_float_value呼び出し L33) | ○ |
| C-06 | UT-OBJ-006: MRB_NO_FLOAT時にto_fが利用不可 | E-01 (#ifndef MRB_NO_FLOAT L22, L104-106) | △ |
| C-07 | UT-OBJ-007: nil.to_hが空ハッシュを返す | E-01 (nil_to_h関数 L44-48), E-03 (L10-12) | ○ |
| C-08 | UT-OBJ-008: to_hの戻り値がHash型 | E-01 (mrb_hash_new呼び出し L47) | ○ |
| C-09 | UT-OBJ-009: to_hが毎回新しいハッシュを返す | E-01 (mrb_hash_new呼び出し L47) | ○ |
| C-10 | UT-OBJ-010: nil.to_iが0を返す | E-01 (nil_to_i関数 L57-61), E-03 (L14-16) | ○ |
| C-11 | UT-OBJ-011: to_iの戻り値がInteger型 | E-01 (mrb_fixnum_value呼び出し L60) | ○ |
| C-12 | UT-OBJ-012: itselfが自身を返す | E-01 (mrb_obj_itself L120), E-07 (README.md Kernel#itself説明) | ○ |
| C-13 | UT-OBJ-013: itselfのオブジェクトIDが一致する | E-07 (README.md: string.itself.object_id == string.object_id) | ○ |
| C-14 | UT-OBJ-014: 整数に対するitselfの動作 | E-01 (mrb_obj_itself L120), E-07 | ○ |
| C-15 | UT-OBJ-015: nilに対するitselfの動作 | E-01 (mrb_obj_itself L120) | ○ |
| C-16 | UT-OBJ-016: true/falseに対するitselfの動作 | E-01 (mrb_obj_itself L120) | ○ |
| C-17 | UT-OBJ-017: シンボルに対するitselfの動作 | E-01 (mrb_obj_itself L120) | ○ |
| C-18 | UT-OBJ-018: 配列に対するitselfの動作 | E-01 (mrb_obj_itself L120) | ○ |
| C-19 | UT-OBJ-019: instance_execでインスタンス変数にアクセスできる | E-01 (obj_instance_exec L94-98), E-04 (L1-9) | ○ |
| C-20 | UT-OBJ-020: 引数なしでinstance_execが動作する | E-01 (obj_instance_exec L94-98), E-04 (L56) | ○ |
| C-21 | UT-OBJ-021: 複数引数のinstance_exec | E-01 (MRB_ARGS_ANY L110), E-04 (L57) | ○ |
| C-22 | UT-OBJ-022: キーワード引数のinstance_exec | E-04 (L58) | ○ |
| C-23 | UT-OBJ-023: デフォルト引数値のinstance_exec | E-04 (L56) | ○ |
| C-24 | UT-OBJ-024: プリミティブ値でのクラス定義 | E-04 (L27-39) | ○ |
| C-25 | UT-OBJ-025: プリミティブ値でのモジュール定義 | E-04 (L41-52) | ○ |
| C-26 | UT-OBJ-026: ブロックなしのinstance_execでエラー | E-01 (mrb_object_exec呼び出し L97) | △ |
| C-27 | UT-OBJ-027: C経由のinstance_exec（引数なし） | E-04 (L62), E-05 (obj_instance_exec_from_c関数) | ○ |
| C-28 | UT-OBJ-028: C経由のinstance_exec（複数引数） | E-04 (L63), E-05 (obj_instance_exec_from_c関数) | ○ |
| C-29 | UT-OBJ-029: yield_selfの基本動作 | E-02 (L10-13), E-07 (README.md) | ○ |
| C-30 | UT-OBJ-030: yield_selfでの数値変換 | E-02 (block.call(self) L12) | ○ |
| C-31 | UT-OBJ-031: yield_selfのチェーン呼び出し | E-02 (L10-13), E-07 (README.md チェーン例) | ○ |
| C-32 | UT-OBJ-032: ブロックなしyield_selfでEnumerator返却 | E-02 (return to_enum(:yield_self) unless block L11) | ○ |
| C-33 | UT-OBJ-033: nilに対するyield_self | E-02 (L10-13) | ○ |
| C-34 | UT-OBJ-034: thenがyield_selfのエイリアス | E-02 (alias then yield_self L14) | ○ |
| C-35 | UT-OBJ-035: thenのチェーン呼び出し | E-02 (alias then yield_self L14) | ○ |
| C-36 | UT-OBJ-036: ブロックなしthenでEnumerator返却 | E-02 (alias then yield_self L14, L11) | ○ |
| C-37 | UT-OBJ-037: tapの基本動作（self返却） | E-02 (tap L29-32), E-04 (L11-24) | ○ |
| C-38 | UT-OBJ-038: tapのメソッドチェーン動作 | E-02 (L29-32), E-04 (L11-24) | ○ |
| C-39 | UT-OBJ-039: tap内のreturnの挙動 | E-04 (L24) | ○ |
| C-40 | UT-OBJ-040: 整数に対するtap | E-02 (yield self; self L30-31) | ○ |
| C-41 | UT-OBJ-041: nilに対するtap | E-02 (yield self; self L30-31) | ○ |
| C-42 | UT-OBJ-042: tapのブロック内副作用 | E-02 (yield self L30) | ○ |
| C-43 | UT-OBJ-043: gem初期化でNilClassメソッド登録 | E-01 (mrb_mruby_object_ext_gem_init L113-123, nil_ext_rom_entries L100-107) | ○ |
| C-44 | UT-OBJ-044: gem初期化でitselfメソッド登録 | E-01 (mrb_define_method_id L120) | ○ |
| C-45 | UT-OBJ-045: gem初期化でinstance_execメソッド登録 | E-01 (MRB_MT_INIT_ROM L122, bob_ext_rom_entries L109-111) | ○ |
| C-46 | UT-OBJ-046: to_aの戻り値サイズが0 | E-01 (mrb_ary_new L19) | ○ |
| C-47 | UT-OBJ-047: to_hの戻り値サイズが0 | E-01 (mrb_hash_new L47) | ○ |
| C-48 | UT-OBJ-048: to_iの戻り値が0と等しい | E-01 (mrb_fixnum_value(0) L60) | ○ |
| C-49 | UT-OBJ-049: to_fの戻り値が0.0と等しい | E-01 (mrb_float_value(mrb, 0.0) L33) | ○ |
| C-50 | UT-OBJ-050: yield_selfでブロックがnilを返す場合 | E-02 (block.call(self) L12) | ○ |
| C-51 | UT-OBJ-051: tapのブロック内例外伝播 | E-02 (yield self L30) | ○ |
| C-52 | UT-OBJ-052: yield_selfのブロック内例外伝播 | E-02 (block.call(self) L12) | ○ |
| C-53 | UT-OBJ-053: instance_exec内でselfが切り替わる | E-01 (mrb_object_exec with mrb_singleton_class_ptr L97) | ○ |
| C-54 | UT-OBJ-054: instance_exec内でプライベートメソッドアクセス | E-01 (obj_instance_exec L94-98) | △ |
| C-55 | UT-OBJ-055: gem_finalが正常終了する | E-01 (空の関数 L126-128) | △ |

## 4) 不足情報（Unknown / Missing）
- **C-06（MRB_NO_FLOAT定義時のto_f利用不可）**: コンパイルフラグによる条件コンパイルの挙動であり、実行時テストでの直接確認が困難。ソースコード上の`#ifndef MRB_NO_FLOAT`ガードは確認済みだが、実際にフラグを有効にしたビルドでのテスト結果は未確認。
  - 候補：MRB_NO_FLOAT有効ビルドでのテスト結果 / mruby buildconfigでの設定例 / CIでのバリアント確認
- **C-26（ブロックなしinstance_execのエラー種別）**: `mrb_object_exec`内部でブロック未指定時に発生するエラーの正確な種別（ArgumentError, LocalJumpError等）がソースコードから直接特定できない。`mrb_object_exec`はコアVM側の関数。
  - 候補：src/vm.cまたはsrc/kernel.cの`mrb_object_exec`実装 / CRubyのinstance_exec仕様
- **C-54（プライベートメソッドアクセス）**: instance_execがレシーバのプライベートメソッドにアクセスできるかどうかについて、既存テストコードに該当テストが存在しない。CRubyの仕様から推測。
  - 候補：CRubyのinstance_exec仕様 / mrubyのメソッド探索実装
- **C-55（gem_final正常終了）**: 関数本体が空であるため、テスト自体の意義は低いが、gem lifecycle管理の観点からは確認が望ましい。
  - 候補：mruby gem lifecycleのドキュメント / 他gemのgem_final実装パターン

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: NilClass拡張メソッド（to_a, to_f, to_h, to_i） - 実装が単純で根拠も十分
- **0（低リスク）**: Kernel#itself - 実装が自明で根拠も十分
- **0（低リスク）**: Kernel#tap, Kernel#yield_self/then - Rubyソースから直接確認可能
- **1（中リスク）**: BasicObject#instance_exec - コアVM関数（mrb_object_exec）への委譲が含まれ、内部挙動の完全な把握には追加調査が必要
- **1（中リスク）**: MRB_NO_FLOATフラグ依存のテストケース - ビルドバリアントへの依存があり検証が困難
- **0（低リスク）**: gem初期化/終了関数 - ソースコードから直接確認可能

## 6) レビュアーチェックリスト（最小）
- [ ] NilClass拡張メソッド（to_a, to_f, to_h, to_i）のテストケースがソースコードの実装と一致しているか確認
- [ ] MRB_NO_FLOAT条件分岐のテスト方針が適切か確認（UT-OBJ-006）
- [ ] instance_execのブロック未指定時のエラー種別が正確か確認（UT-OBJ-026）
- [ ] instance_exec内でのプライベートメソッドアクセス可否がmrubyの仕様と一致しているか確認（UT-OBJ-054）
- [ ] yield_self/thenのEnumerator返却テスト（UT-OBJ-032, UT-OBJ-036）がmrubyのEnumerator実装と整合するか確認
- [ ] テストケースの優先度付けがプロジェクトのテスト方針と合致しているか確認
- [ ] 全55テストケースのNo連番とテストID連番に欠番がないか確認
