---
generated_at: 2026-02-22 11:30:00
metrics:
  claims_total: 16
  claims_with_evidence: 16
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：10-strftime 日時フォーマット

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：16 / 16、根拠なし：0
- 優先レビュー（高）
  - 全項目に根拠あり。

## 2) 参照した情報（Evidence一覧）

- E-01: `mrbgems/mruby-strftime/src/strftime.c` - mrb_time_strftime関数（42-105行目）
- E-02: `mrbgems/mruby-strftime/src/strftime.c` - MAX_BUFFER_SIZE定数（15行目）
- E-03: `mrbgems/mruby-strftime/src/strftime.c` - mrb_mruby_strftime_gem_init関数（108-114行目）
- E-04: `mrbgems/mruby-strftime/src/strftime.c` - コメントブロック（17-40行目）
- E-05: `include/mruby/time.h` - mrb_time_get_tm関数宣言
- E-06: `docs/code-to-docs/帳票一覧/帳票一覧.csv` - 帳票No.10の定義

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | C標準ライブラリのstrftime関数をラップしている | E-01 (87行目: `strftime(buf, MAX_BUFFER_SIZE, segment, tm)`) | ○ |
| C-02 | フォーマット文字列内のNULバイトが保持される | E-01 (54-101行目: NULバイト分割ループ), E-04 (23行目: コメント記載) | ○ |
| C-03 | mrb_get_argsで"s"指定によりフォーマット文字列を取得 | E-01 (47行目: `mrb_get_args(mrb, "s", &format, &format_len)`) | ○ |
| C-04 | mrb_time_get_tmでstruct tmを取得する | E-01 (48行目: `struct tm *tm = mrb_time_get_tm(mrb, self)`), E-05 | ○ |
| C-05 | 空のmruby Stringオブジェクトで結果を初期化 | E-01 (50行目: `mrb_str_new(mrb, NULL, 0)`) | ○ |
| C-06 | memchrでNULバイトを検索しセグメント分割する | E-01 (56行目: `memchr(fmt_ptr, '\0', (size_t)remaining)`) | ○ |
| C-07 | mrb_temp_allocでセグメントコピーを確保（例外安全性） | E-01 (67行目: `mrb_temp_alloc(mrb, (size_t)segment_len + 1)`) | ○ |
| C-08 | MAX_BUFFER_SIZEは4096バイト固定 | E-02 (15行目: `#define MAX_BUFFER_SIZE 4096`) | ○ |
| C-09 | mrb_str_catで結果文字列に追記 | E-01 (90行目: `mrb_str_cat(mrb, result, buf, n)`) | ○ |
| C-10 | NULバイトがあれば結果に追加してポインタを前進 | E-01 (94-97行目: `mrb_str_cat(mrb, result, "\0", 1)`, `fmt_ptr = nul_pos + 1`) | ○ |
| C-11 | MSVC環境で%-フラグ使用時にE_ARGUMENT_ERRORを発生 | E-01 (71-80行目: `#ifdef _MSC_VER`〜`mrb_raisef(mrb, E_ARGUMENT_ERROR, ...)`) | ○ |
| C-12 | MSVCエラーメッセージが"strftime format flag '%-' not supported on this platform" | E-01 (76-77行目: メッセージ文字列) | ○ |
| C-13 | gem初期化でTimeクラスにstrftimeメソッドを登録 | E-03 (112-113行目: `mrb_class_get_id`, `mrb_define_method_id`) | ○ |
| C-14 | MRB_ARGS_REQ(1)で引数1つを必須指定 | E-03 (113行目: `MRB_ARGS_REQ(1)`) | ○ |
| C-15 | %Y, %m, %d, %H, %M, %S, %%の指定子をサポート | E-04 (27-33行目: コメントに明記), E-01 (システムstrftimeへの委譲) | ○ |
| C-16 | strftimeの出力バッファもmrb_temp_allocで確保 | E-01 (84行目: `buf = (char *)mrb_temp_alloc(mrb, MAX_BUFFER_SIZE)`) | ○ |

## 4) 不足情報（Unknown / Missing）
- 特になし。

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - ソースファイルが120行と小規模であり、全処理が1関数に収まっているため網羅的に検証可能
- 0: 低リスク - struct tmのフィールドとフォーマット指定子の対応はC標準ライブラリの仕様に基づくものであり、ソースコード上のコメント（27-33行目）にも明記されている

## 6) レビュアーチェックリスト（最小）
- [ ] MAX_BUFFER_SIZE(4096)の値が15行目の定義と一致することを確認
- [ ] NULバイト分割ループのロジック（55-101行目）が設計書のフローチャートと整合することを確認
- [ ] MSVC環境での%-フラグチェック（71-80行目）が正しく記述されていることを確認
- [ ] mrb_temp_allocの使用箇所（67行目、84行目）が設計書のセキュリティ考慮事項と整合することを確認
