---
generated_at: 2026-02-17 10:30:00
metrics:
  claims_total: 100
  claims_with_evidence: 98
  claims_without_evidence: 2
confidence_derived: 0.98
---

# 根拠レポート：config モジュール単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：98 / 100、根拠なし：2
- 優先レビュー（高）
  1. **UT-CFG-053**：空ファイル処理の期待動作が不明確
  2. **UT-CFG-064**：環境変数未設定時の_G状態確認が困難

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

- E-01: `script/config/init.lua` - モジュールエントリーポイント
- E-02: `script/config/config.lua` - 設定管理メインAPI (277行)
- E-03: `script/config/loader.lua` - 設定ファイルローダー (132行)
- E-04: `script/config/env.lua` - 環境変数処理 (68行)
- E-05: `script/config/template.lua` - 設定テンプレート定義 (441行)
- E-06: `docs/code-to-docs/単体テストケース一覧/plan.md` - モジュール構成情報

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

### config.lua (config.api) - 設定管理API

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | setByScope: 有効なキーと値でスコープに設定が保存される | E-02 (L56-71) | ○ |
| C-02 | setByScope: 同じ値を再設定した場合はfalseが返る | E-02 (L62-64) | ○ |
| C-03 | setByScope: 存在しないキーでfalseが返る | E-02 (L57-60) | ○ |
| C-04 | setByScope: checker検証失敗時はデフォルト値が設定される | E-02 (L65-69) | ○ |
| C-05 | set: URIとキーと値で設定が正しく保存される | E-02 (L76-88) | ○ |
| C-06 | set: URIがnilの場合はfallbackスコープに設定される | E-02 (L79), E-02 (L50) | ○ |
| C-07 | set: 存在しないキーでassertエラー | E-02 (L78) | ○ |
| C-08 | set: 値が変更されなかった場合はfalse | E-02 (L83-87) | ○ |
| C-09 | add: リストに値が正しく追加される | E-02 (L90-111) | ○ |
| C-10 | add: 既存値の追加はfalse | E-02 (L97-99) | ○ |
| C-11 | add: リスト型でないキーでassertエラー | E-02 (L94) | ○ |
| C-12 | add: 存在しないキーでassertエラー | E-02 (L92) | ○ |
| C-13 | remove: リストから値が正しく削除される | E-02 (L113-132) | ○ |
| C-14 | remove: 存在しない値の削除はfalse | E-02 (L127-131) | ○ |
| C-15 | remove: リスト型でないキーでassertエラー | E-02 (L117) | ○ |
| C-16 | prop: マップにプロパティが正しく設定される | E-02 (L134-155) | ○ |
| C-17 | prop: 同じ値の再設定はfalse | E-02 (L139-141) | ○ |
| C-18 | prop: マップ型でないキーでassertエラー | E-02 (L138) | ○ |
| C-19 | get: 設定された値が正しく取得できる | E-02 (L160-170) | ○ |
| C-20 | get: 未設定時はデフォルト値が返る | E-02 (L163-165) | ○ |
| C-21 | get: m.NULLが設定されている場合はnilが返る | E-02 (L166-168) | ○ |
| C-22 | get: overrideスコープが優先される | E-02 (L33-39) | ○ |
| C-23 | getRaw: 生の設定値が正しく取得できる | E-02 (L175-185) | ○ |
| C-24 | getRaw: 未設定時はデフォルト値が返る | E-02 (L178-180) | ○ |
| C-25 | getNowTable: スコープの現在の設定テーブルが取得できる | E-02 (L188-191) | ○ |
| C-26 | getNowTable: 初回呼び出し時は空のテーブルが作成される | E-02 (L189-190) | ○ |
| C-27 | getRawTable: スコープの生設定テーブルが取得できる | E-02 (L194-197) | ○ |
| C-28 | getRawTable: 初回呼び出し時は空のテーブルが作成される | E-02 (L195-196) | ○ |
| C-29 | update: 複数の設定テーブルから設定が正しく更新される | E-02 (L201-245) | ○ |
| C-30 | update: ネストしたテーブルが正しく展開される | E-02 (L207-225) | ○ |
| C-31 | update: 'Lua.'プレフィックスなしでも設定できる | E-02 (L219-220) | ○ |
| C-32 | update: nullシンボルがm.NULLに変換される | E-02 (L214-216) | ○ |
| C-33 | update: 設定変更時にイベントが発火する | E-02 (L235-244) | ○ |
| C-34 | update: 空のテーブルで設定がリセットされる | E-02 (L203-205) | ○ |
| C-35 | watch: コールバックがwatchListに登録される | E-02 (L248-250) | ○ |
| C-36 | event: 登録されたコールバックが遅延実行される | E-02 (L252-271) | ○ |
| C-37 | event: 複数のイベントがバッチ処理される | E-02 (L253-264) | ○ |
| C-38 | addNullSymbol: nullシンボルが正しく登録される | E-02 (L273-275) | ○ |
| C-39 | getScope: overrideスコープに値がある場合はoverrideが返る | E-02 (L34-39) | ○ |
| C-40 | getScope: URIに対応するフォルダスコープが返る | E-02 (L40-48) | ○ |
| C-41 | getScope: 該当スコープがない場合はfallbackが返る | E-02 (L50) | ○ |
| C-42 | getScope: URIがnilの場合はfallbackが返る | E-02 (L40, L50) | ○ |

### loader.lua (config.loader) - 設定ファイルローダー

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-43 | loadRCConfig: JSONCファイルが正しく読み込まれる | E-03 (L21-41) | ○ |
| C-44 | loadRCConfig: ファイルが存在しない場合はnil | E-03 (L28-32) | ○ |
| C-45 | loadRCConfig: パスが取得できない場合はnil | E-03 (L24-27) | ○ |
| C-46 | loadRCConfig: JSONパースエラー時はエラーメッセージ表示 | E-03 (L34-37) | ○ |
| C-47 | loadLocalConfig: JSON形式が正しく読み込まれる | E-03 (L63-72) | ○ |
| C-48 | loadLocalConfig: Lua形式が正しく読み込まれる | E-03 (L74-84) | ○ |
| C-49 | loadLocalConfig: filenameがnilの場合はnil | E-03 (L45-47) | ○ |
| C-50 | loadLocalConfig: ファイルが存在しない場合はnil | E-03 (L55-60) | ○ |
| C-51 | loadLocalConfig: JSONパースエラー時はエラーメッセージ表示 | E-03 (L65-68) | ○ |
| C-52 | loadLocalConfig: Lua実行エラー時はエラーメッセージ表示 | E-03 (L77-80) | ○ |
| C-53 | loadLocalConfig: 空ファイルの処理 | **根拠なし** | △ |
| C-54 | loadClientConfig: クライアントから設定が取得できる | E-03 (L90-129) | ○ |
| C-55 | loadClientConfig: URIがnilでも設定が取得できる | E-03 (L91-114) | ○ |
| C-56 | loadClientConfig: クライアントがnilを返した場合はnil | E-03 (L115-118) | ○ |
| C-57 | loadClientConfig: クライアントが空配列を返した場合はnil | E-03 (L115) | ○ |

### env.lua - 環境変数処理

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 | strToBool: 'true'がtrueに変換される | E-04 (L5-7) | ○ |
| C-59 | strToBool: 'false'がfalseに変換される | E-04 (L6) | ○ |
| C-60 | strToBool: 空文字列がfalseに変換される | E-04 (L6) | ○ |
| C-61 | strToBool: 'true'以外がfalseに変換される | E-04 (L6) | ○ |
| C-62 | 環境変数LLS_CHECK_LEVELが_G.CHECKLEVELに設定される | E-04 (L16-18, L58-66) | ○ |
| C-63 | LLS_FORCE_ACCEPT_WORKSPACEがboolに変換される | E-04 (L36-39, L61-63) | ○ |
| C-64 | 環境変数が未設定の場合は_Gに設定されない | **根拠なし** | △ |

### template.lua (config.unit, Type) - 設定テンプレート定義

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-65 | __call: callerが呼び出されてselfが返る | E-05 (L16-19) | ○ |
| C-66 | __shr: デフォルト値が設定される | E-05 (L21-25) | ○ |
| C-67 | __shl: enumsが設定される | E-05 (L27-30) | ○ |
| C-68 | checker: enumsに含まれる値でtrue | E-05 (L32-46) | ○ |
| C-69 | checker: enumsに含まれない値でfalse | E-05 (L41-43) | ○ |
| C-70 | checker: enumsがない場合は_checkerのみで判定 | E-05 (L45) | ○ |
| C-71 | Type.Boolean checker: boolean型でtrue | E-05 (L70-71) | ○ |
| C-72 | Type.Boolean checker: boolean型以外でfalse | E-05 (L71) | ○ |
| C-73 | Type.Boolean loader: 値がそのまま返る | E-05 (L72-74) | ○ |
| C-74 | Type.Integer checker: number型でtrue | E-05 (L76-77) | ○ |
| C-75 | Type.Integer checker: number型以外でfalse | E-05 (L77) | ○ |
| C-76 | Type.Integer loader: 小数点以下が切り捨て | E-05 (L78-80) | ○ |
| C-77 | Type.String checker: string型でtrue | E-05 (L82-83) | ○ |
| C-78 | Type.String checker: string型以外でfalse | E-05 (L83) | ○ |
| C-79 | Type.String loader: tostringで変換 | E-05 (L84-86) | ○ |
| C-80 | Type.Nil checker: nil型でtrue | E-05 (L88-89) | ○ |
| C-81 | Type.Nil checker: nil型以外でfalse | E-05 (L89) | ○ |
| C-82 | Type.Array checker: table型でtrue | E-05 (L94-95) | ○ |
| C-83 | Type.Array checker: table型以外でfalse | E-05 (L95) | ○ |
| C-84 | Type.Array loader: 配列形式が正しくロード | E-05 (L96-114) | ○ |
| C-85 | Type.Array loader: マップ形式からキー抽出 | E-05 (L98-103) | ○ |
| C-86 | Type.Array loader: 空テーブルで空配列 | E-05 (L97-98) | ○ |
| C-87 | Type.Array loader: 無効要素は除外 | E-05 (L100-101, L106-107) | ○ |
| C-88 | Type.Hash checker: 有効なハッシュでtrue | E-05 (L116-136) | ○ |
| C-89 | Type.Hash checker: 配列形式でsubvalueがbool受け入れる場合true | E-05 (L126-133) | ○ |
| C-90 | Type.Hash checker: 文字列形式で分割可能な場合true | E-05 (L137-140) | ○ |
| C-91 | Type.Hash checker: キーまたは値が不正な場合false | E-05 (L120-123) | ○ |
| C-92 | Type.Hash loader: ハッシュテーブルがそのまま返る | E-05 (L141-153) | ○ |
| C-93 | Type.Hash loader: 配列形式がハッシュに変換 | E-05 (L148-151) | ○ |
| C-94 | Type.Hash loader: 文字列形式がハッシュに変換 | E-05 (L155-161) | ○ |
| C-95 | Type.Or checker: いずれかのsubでtrueならtrue | E-05 (L168-174) | ○ |
| C-96 | Type.Or checker: 全てのsubでfalseならfalse | E-05 (L174) | ○ |
| C-97 | Type.Or loader: 最初にマッチしたsubのloaderで処理 | E-05 (L175-180) | ○ |
| C-98 | register: 新しい型がunitsに登録される | E-05 (L50-58) | ○ |
| C-99 | Type.__index: 登録された型のunitが取得できる | E-05 (L62-68) | ○ |
| C-100 | template: Lua.runtime.versionのデフォルト値が'Lua 5.4' | E-05 (L187-194) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-53 (UT-CFG-053)**: loadLocalConfigで空ファイルが渡された場合の動作がコードから明示的に読み取れない
  - 候補：空ファイルは`buf:match '%S'`でnilを返す可能性がある / JSONパース時にエラーになる可能性
- **C-64 (UT-CFG-064)**: 環境変数が未設定の場合、os.getenvがnilを返し、条件分岐でスキップされることは推測できるが、_Gの初期状態との関係が不明確
  - 候補：実行環境でのテストが必要 / _Gの初期状態を確認

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全体的にコードとテストケースの対応が明確
- **1: 中リスク** - loadLocalConfigの空ファイル処理について実動作確認が必要
- **0: 低リスク** - 環境変数処理は標準的なパターンで実装されている

## 6) レビュアーチェックリスト（最小）
- [ ] config.luaのスコープ解決ロジック（getScope関数）が正しく理解されているか
- [ ] loader.luaのJSON/Lua両形式の判定ロジック（先頭文字による分岐）が適切か
- [ ] template.luaの型システム（Type.Boolean, Type.Array等）のメタメソッド動作を確認
- [ ] 環境変数処理（env.lua）の変数リストが最新か確認
- [ ] loadLocalConfigの空ファイル処理について実動作テストで確認
- [ ] nullシンボル処理（m.NULL, m.nullSymbols）の使用箇所を確認
