---
generated_at: 2026-02-22 10:00:00
metrics:
  claims_total: 18
  claims_with_evidence: 16
  claims_without_evidence: 2
confidence_derived: 0.89
---

# 根拠レポート：11-print_puts出力

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.89**
  - 根拠あり：16 / 18、根拠なし：2
- 優先レビュー（高）
  1. **putsがIO gem必須かどうか**：src/print.cにputs実装が見当たらないが、IO gem不在時のputsの振る舞いについて完全な確認が必要
  2. **Windows UTF-16変換時のエラーハンドリング詳細**：MultiByteToWideCharの失敗時の挙動が明確でない

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

- E-01: `src/print.c` - mrb_print_m関数(行70-81)、printstr/printcstr関数
- E-02: `src/kernel.c` - Kernel#print/Kernel#pのメソッド登録(行697-699)、mrb_p_m関数(行652-665)
- E-03: `mrbgems/mruby-io/src/io.c` - io_print(行1062-1082)、io_puts(行1020-1052)、io_write(行954-976)
- E-04: `mrbgems/mruby-io/mrbgem.rake` - HAVE_MRUBY_IO_GEM定義(行6)
- E-05: `include/mruby/version.h` - バージョン情報定義
- E-06: `mrbgems/mruby-io/src/mruby_io_gem.c` - IO gem初期化
- E-07: `mrbgems/mruby-io/src/io.c` - io_puts_str(行978-994)、io_puts_ary(行996-1018)

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | mrb_print_mはKernel#printの軽量実装である | E-01, E-02 | ○ |
| C-02 | HAVE_MRUBY_IO_GEM未定義時にmrb_print_mが使用される | E-01(行68), E-02(行697-699) | ○ |
| C-03 | HAVE_MRUBY_IO_GEMはmrbgem.rakeで定義される | E-04 | ○ |
| C-04 | printは引数を連結して改行なしで出力する | E-01(行76-78) | ○ |
| C-05 | printstrは非String型をmrb_obj_as_stringで変換する | E-01(行48-49) | ○ |
| C-06 | Windows環境でtty接続時はUTF-16変換してWriteConsoleWで出力 | E-01(行28-40) | ○ |
| C-07 | tty接続時はfflushが実行される | E-01(行79) | ○ |
| C-08 | IO gem版io_printはfd_writeで直接書き込む | E-03(行1062-1082) | ○ |
| C-09 | IO gem版io_putsは改行を自動付加する | E-07(行990-993) | ○ |
| C-10 | io_puts_aryはArray引数を再帰展開する | E-07(行996-1018) | ○ |
| C-11 | io_prepare_writeがバッファ状態を調整する | E-03(行936-952) | ○ |
| C-12 | fd_writeはEINTRを再試行する | E-03(行925-932) | ○ |
| C-13 | ISO 15.3.1.3.35がKernel#printの規格番号 | E-02(行699) | ○ |
| C-14 | MRB_NO_STDIO定義時は空実装になる | E-01(行110-136) | ○ |
| C-15 | printcstrはfwriteを使用する(非Windows時) | E-01(行42) | ○ |
| C-16 | IO gem版のメソッドはio_rom_entriesで登録される | E-03(行2228-2231) | ○ |
| C-17 | putsはIO gem不在時には提供されない | **根拠なし** | △ |
| C-18 | Windows UTF-16変換失敗時の挙動 | **根拠なし** | △ |

## 4) 不足情報（Unknown / Missing）
- C-17: src/print.cにputs相当の関数がないことは確認できるが、mrblib等のRuby側実装でputsが提供されている可能性がある
  - 候補：mrblib/ 配下のRubyファイル / Kernel関連のmrblib / テストコード
- C-18: MultiByteToWideCharが0を返した場合のフォールバック処理が不明
  - 候補：Windowsのドキュメント / テストコード / 追加のエラーハンドリングコード

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - IO gem版実装の正確性(コードで明確に確認可能)
- 1: 中リスク - putsのIO gem不在時の挙動についての記述精度
- 0: 低リスク - Windows環境固有の処理パス

## 6) レビュアーチェックリスト（最小）
- [ ] src/print.cの#ifndef HAVE_MRUBY_IO_GEMブロックがmrb_print_mのみ定義していることを確認
- [ ] IO gem不在時にputsがどのように提供されるか(またはされないか)を確認
- [ ] io_puts_aryの再帰深度制限の有無を確認
- [ ] Windows環境でのMultiByteToWideChar失敗時の挙動を確認
