---
generated_at: 2026-02-21 12:00:00
metrics:
  claims_total: 66
  claims_with_evidence: 62
  claims_without_evidence: 4
confidence_derived: 0.94
---

# 根拠レポート：src_lib 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.94**
  - 根拠あり：62 / 66、根拠なし：4
- 優先レビュー（高）
  1. **ir_is_logged_in（C-24）**：ソースコード公開版でスタブ化されており、実際の実装が不明
  2. **ir_login（C-25）**：同上、スタブ実装のため実際のログインロジックが不在
  3. **ir_send_score / ir_send_chart（C-26, C-27）**：同上、スタブ実装のためスコア/譜面送信ロジックが不在

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

- E-01: `src/bass.as` - BASS DLL関数宣言ファイル（#func/#cfunc定義、定数BASS_SAMPLE_LOOP）
- E-02: `src/bass_fx.as` - BASS FX DLL関数宣言ファイル（BASS_FX_GetVersion, BASS_FX_TempoCreate）
- E-03: `src/bass_vst.as` - BASS VST DLL関数宣言 + BASS_VST_SetParam_Rカスタム関数（L12-L23）
- E-04: `src/bassconv.as` - bassconv DLL関数宣言ファイル（位置・長さ変換関数）
- E-05: `src/filesystem_utils.as` - filesystem_utilsモジュール：fileExists(L9-L11), dirExists(L19-L34), safeChdir(L42-L47), safeChdirC_(L55-L67)
- E-06: `src/ir.hsp` - ksm_irモジュール：IR通信関連関数群（ir_is_logged_in, ir_login, ir_send_score, ir_send_chart, getChartIRHash, ir_popup_init, ir_popup_set_text, ir_popup_draw, url_utf8_enc, urlenc, urldec, utf8enc_auto）
- E-07: `src/kshlib.as` - kshlib DLL関数宣言 + KSHLib_GetChartMetaDataValueラッパー関数（L21-L24）
- E-08: `src/ksmcore.as` - ksmcore DLL関数宣言 + GetCurrentCamValueラッパー関数（L21-L24）、enum定義（CAM_ZOOM_TOP等）
- E-09: `src/kson.as` - kson DLL関数宣言ファイル（KSON_GetVersion, KSON_ToKSH等）
- E-10: `src/winapi.as` - Windows API関数宣言ファイル（user32, kernel32, gdi32, msvcrt, comctl32）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | BASS_VST_SetParam_R: 有効なVST IDでパラメータが正常設定される | E-03（L12-L23: if判定+repeat 5+BASS_ErrorGetCode確認） | ○ |
| C-02 | BASS_VST_SetParam_R: リトライで成功する場合 | E-03（L16-L21: repeat 5ループ+break条件） | ○ |
| C-03 | BASS_VST_SetParam_R: VST ID=-1でスキップ | E-03（L13: if (vst_a != -1) による分岐） | ○ |
| C-04 | BASS_VST_SetParam_R: 5回リトライ全失敗 | E-03（L16: repeat 5 でループ上限5回） | ○ |
| C-05 | BASS_VST_SetParam_R: vst_c=0.0境界値 | E-03（L12: double vst_c パラメータ型定義） | ○ |
| C-06 | BASS_VST_SetParam_R: vst_c=1.0境界値 | E-03（L12: double vst_c パラメータ型定義） | ○ |
| C-07 | fileExists: 存在するファイルでtrue | E-05（L9-L11: exist p1; return strsize != -1） | ○ |
| C-08 | fileExists: 存在しないファイルでfalse | E-05（L10-L11: exist→strsize=-1→false） | ○ |
| C-09 | fileExists: 空文字列 | E-05（L9: str p1パラメータ） | ○ |
| C-10 | dirExists: 存在するディレクトリでtrue | E-05（L19-L34: dirlist+空文字列チェック） | ○ |
| C-11 | dirExists: 存在しないディレクトリでfalse | E-05（L32-L34: dirlist結果が空→false） | ○ |
| C-12 | dirExists: 末尾スラッシュのトリム | E-05（L23: strtrim(path, 2, '/') ） | ○ |
| C-13 | dirExists: 末尾バックスラッシュのトリム | E-05（L24: strtrim(path, 2, '\\') ） | ○ |
| C-14 | dirExists: '.'相対パス | E-05（L27: if条件に "." を含む） | ○ |
| C-15 | dirExists: '..'相対パス | E-05（L27: if条件に ".." を含む） | ○ |
| C-16 | dirExists: '../..'相対パス | E-05（L27: if条件に "../.." を含む） | ○ |
| C-17 | dirExists: '..\\..'相対パス | E-05（L27: if条件に "..\\.." を含む） | ○ |
| C-18 | dirExists: 空文字列 | E-05（L19: str p1パラメータ） | ○ |
| C-19 | safeChdir: 存在するディレクトリへchdir | E-05（L42-L47: dirExists確認+chdir実行） | ○ |
| C-20 | safeChdir: 存在しないディレクトリでダイアログ表示 | E-05（L43-L44: dirExists=0→dialog表示） | ○ |
| C-21 | safeChdirC_: 存在するディレクトリで1返却 | E-05（L55-L59: dirExists→chdir→return 1） | ○ |
| C-22 | safeChdirC_: 存在しないディレクトリでp2=1、0返却+警告 | E-05（L60-L63: else→if(p2)→dialog→return 0） | ○ |
| C-23 | safeChdirC_: 存在しないディレクトリでp2=0、0返却+警告なし | E-05（L60-L63: else→p2=0→dialog非表示→return 0） | ○ |
| C-24 | ir_is_logged_in: 常に0返却 | E-06（L26-L28: return 0、コメント「公開版削除」） | △ |
| C-25 | ir_login: ログイン処理実行（スタブ） | E-06（L30-L36: コメント「公開版削除」、スタブ実装） | △ |
| C-26 | ir_send_score: 常に-1返却 | E-06（L38-L40: return -1、コメント「公開版削除」） | △ |
| C-27 | ir_send_chart: 常に-1返却 | E-06（L42-L44: return -1、コメント「公開版削除」） | △ |
| C-28 | getChartIRHash: 有効な譜面からMD5生成 | E-06（L51-L68: ignoreListフィルタ+varmd5呼出） | ○ |
| C-29 | getChartIRHash: メタデータ行のフィルタリング | E-06（L53: ignoreList定義、L56-L65: StartsWithフィルタ） | ○ |
| C-30 | getChartIRHash: コメント行のフィルタリング | E-06（L53: ignoreListに "//" を含む） | ○ |
| C-31 | getChartIRHash: 全ignoreListキーのフィルタリング | E-06（L53: 33個のignoreListキー定義） | ○ |
| C-32 | getChartIRHash: 全行フィルタ時の空データ | E-06（L52-L68: buf初期化+フィルタ後のvarmd5） | ○ |
| C-33 | getChartIRHash: 空文字列入力 | E-06（L52: sdim buf, strlen(p1)） | ○ |
| C-34 | ir_popup_init: ポップアップ初期化 | E-06（L70-L75: 変数初期化+alCreateImage） | ○ |
| C-35 | ir_popup_set_text: テキスト設定 | E-06（L77-L98: テキスト設定+タイマー計算+描画準備） | ○ |
| C-36 | ir_popup_set_text: エラー表示 | E-06（L89: getsize(170)*is_error でエラー画像オフセット） | ○ |
| C-37 | ir_popup_set_text: 空文字列リセット | E-06（L79-L84: text=""判定→リセット処理） | ○ |
| C-38 | ir_popup_draw: フェードイン | E-06（L103-L105: startt〜startt+200の条件分岐） | ○ |
| C-39 | ir_popup_draw: 完全表示 | E-06（L106-L108: startt+200〜endt の条件分岐） | ○ |
| C-40 | ir_popup_draw: フェードアウト | E-06（L109-L111: endt〜endt+200の条件分岐） | ○ |
| C-41 | ir_popup_draw: 表示期間外（終了後） | E-06（L112-L113: else→return） | ○ |
| C-42 | ir_popup_draw: 表示期間外（開始前） | E-06（L103: 開始前はどの条件にも合致せずL112のelseに到達） | ○ |
| C-43 | url_utf8_enc: ASCII文字列のエンコード | E-06（L119-L120: urlenc(utf8enc_auto(src_string))） | ○ |
| C-44 | url_utf8_enc: 日本語文字列のエンコード | E-06（L119-L120: utf8enc_auto→urlenc チェーン） | ○ |
| C-45 | url_utf8_enc: 空文字列 | E-06（L119: str src_string パラメータ） | ○ |
| C-46 | urlenc: 特殊文字のエンコード | E-06（L122-L127: urlencode呼出+strrep置換） | ○ |
| C-47 | urlenc: ハイフン非エンコード | E-06（L125: strrep url_string, "%2D", "-"） | ○ |
| C-48 | urlenc: ドット非エンコード | E-06（L126: strrep url_string, "%2E", "."） | ○ |
| C-49 | urlenc: 空文字列 | E-06（L122: str src_string パラメータ） | ○ |
| C-50 | urldec: URLデコード | E-06（L129-L132: urldecode呼出） | ○ |
| C-51 | urldec: 空文字列 | E-06（L129: str src_string パラメータ） | ○ |
| C-52 | utf8enc_auto: BOMなし文字列のUTF-8変換 | E-06（L134-L141: BOM判定else→utf8enc） | ○ |
| C-53 | utf8enc_auto: BOM付き文字列のBOM除去 | E-06（L136-L137: 0xBFBBEF判定→DeleteUTF8BOM） | ○ |
| C-54 | utf8enc_auto: 空文字列 | E-06（L134: str src_string パラメータ） | ○ |
| C-55 | utf8enc_auto: BOMのみの文字列 | E-06（L136: 3バイトBOM判定ロジック） | ○ |
| C-56 | KSHLib_GetChartMetaDataValue: 存在するキーの値取得 | E-07（L21-L24: sdim+GetChartMetaDataValue_呼出） | ○ |
| C-57 | KSHLib_GetChartMetaDataValue: 存在しないキーでデフォルト値 | E-07（L21-L24: defaultValueパラメータ） | ○ |
| C-58 | KSHLib_GetChartMetaDataValue: 無効ハンドル | E-07（L21: int pChart パラメータ、DLL側の挙動は不明） | ○ |
| C-59 | KSHLib_GetChartMetaDataValue: 空文字列キー | E-07（L21: str key パラメータ） | ○ |
| C-60 | GetCurrentCamValue: CAM_ZOOM_TOP取得 | E-08（L21-L24: GetCurrentCamValue_呼出、L14: enum CAM_ZOOM_TOP=0） | ○ |
| C-61 | GetCurrentCamValue: CAM_ZOOM_BOTTOM取得 | E-08（L15: enum CAM_ZOOM_BOTTOM） | ○ |
| C-62 | GetCurrentCamValue: CAM_ZOOM_SIDE取得 | E-08（L16: enum CAM_ZOOM_SIDE） | ○ |
| C-63 | GetCurrentCamValue: CAM_CENTER_SPLIT取得 | E-08（L17: enum CAM_CENTER_SPLIT） | ○ |
| C-64 | GetCurrentCamValue: CAM_MANUAL_TILT取得 | E-08（L18: enum CAM_MANUAL_TILT） | ○ |
| C-65 | GetCurrentCamValue: 無効ハンドル | E-08（L22: ret=0.0f初期化、DLL側の挙動は不明） | ○ |
| C-66 | GetCurrentCamValue: 範囲外camParam | E-08（L21: int camParam、DLL側の挙動は不明） | ○ |

## 4) 不足情報（Unknown / Missing）
- **IR通信機能のスタブ実装**（C-24〜C-27）：ソースコード公開版のため、`ir_is_logged_in`, `ir_login`, `ir_send_score`, `ir_send_chart` の実際のビジネスロジックが削除されている。テストケースはスタブ実装の返却値のみを対象としているが、本来のIR通信ロジックのテストは不可能。
  - 候補：非公開版ソースコード / IR API仕様書 / ネットワーク通信設計書
- **DLLの内部実装**（C-58, C-59, C-65, C-66）：kshlib.dll、ksmcore.dllの内部実装が不明なため、無効ハンドルや範囲外パラメータ時の正確な挙動は推測に基づく。
  - 候補：DLLのソースコード / APIドキュメント / DLLのヘッダファイル
- **bass.as, bass_fx.as, bassconv.as, kson.as, winapi.as**：これらのファイルはFFI宣言（#func/#cfunc/#define）のみで、HSP側のカスタムロジックが存在しない。DLL関数の単体テストはDLL側の責務であるため、テストケースの対象外とした。

## 5) リスクフラグ（レビュー観点）
- **リスク1（中）**：IR通信関連（ir_is_logged_in, ir_login, ir_send_score, ir_send_chart）はスタブ実装のため、本番コードでは別のロジックが実行される可能性がある。テストケースがスタブのみをカバーしている点に注意。
- **リスク1（中）**：DLLラッパー関数（KSHLib_GetChartMetaDataValue, GetCurrentCamValue）のエラーハンドリングはDLL内部の実装に依存する。HSP側のラッパーは値の受け渡しのみで、DLL側のエラーハンドリングの正確な挙動は確認できていない。
- **リスク0（低）**：filesystem_utilsモジュールは純粋なHSPコードで実装されており、ロジックの根拠が明確。テストケースの信頼度は高い。
- **リスク0（低）**：getChartIRHash関数のignoreListフィルタリングは明確にソースコードで定義されており、テストケースの根拠は十分。

## 6) レビュアーチェックリスト（最小）
- [ ] IR通信関連の4関数（C-24〜C-27）が本番環境ではスタブでない実装に置き換わることを確認
- [ ] DLLラッパー関数のエラーハンドリング（C-58, C-59, C-65, C-66）のテスト期待結果がDLLの実際の挙動と一致するか確認
- [ ] getChartIRHashのignoreList（C-29〜C-31）が最新のKSHフォーマット仕様と整合しているか確認
- [ ] filesystem_utilsのsafeChdir（C-20）でdirExists失敗後もchdirが実行される設計が意図通りか確認
- [ ] bass.as, bass_fx.as, bassconv.as, kson.as, winapi.asをテスト対象外とした判断が妥当か確認
- [ ] BASS_VST_SetParam_Rのリトライ回数5回（C-04）が要件として正しいか確認
