---
generated_at: 2026-02-25 10:30:00
metrics:
  claims_total: 102
  claims_with_evidence: 98
  claims_without_evidence: 4
confidence_derived: 0.96
---

# 根拠レポート：decap-cms-widget-code 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：98 / 102、根拠なし：4
- 優先レビュー（高）
  1. **C-048**：refreshCodeMirrorInstanceのcm未初期化時の挙動 - cmがundefinedの場合のオプショナルチェーンの動作推定
  2. **C-069**：componentDidUpdateの親リスト展開時リフレッシュ - componentDidUpdateの内部条件分岐の推定
  3. **C-041**：shouldComponentUpdateの非表示→表示遷移 - visibilityプロパティの初期化条件の推定
  4. **C-045**：updateCodeMirrorPropsの初回言語設定判定 - isLangInitializedとObject.keys(changedProps).length === 1の条件組み合わせ推定

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

- E-01: `packages/decap-cms-widget-code/src/index.js` - Widget関数、DecapCmsWidgetCodeエクスポート
- E-02: `packages/decap-cms-widget-code/src/CodeControl.js` - CodeControlクラス、getChangedProps関数、valueToOption関数
- E-03: `packages/decap-cms-widget-code/src/CodePreview.js` - toValue関数、CodePreviewコンポーネント
- E-04: `packages/decap-cms-widget-code/src/SettingsPane.js` - SettingsSelect, SettingsPaneコンポーネント
- E-05: `packages/decap-cms-widget-code/src/SettingsButton.js` - SettingsButtonコンポーネント
- E-06: `packages/decap-cms-widget-code/src/languageSelectStyles.js` - スタイルオブジェクト
- E-07: `packages/decap-cms-widget-code/src/schema.js` - スキーマ定義
- E-08: `packages/decap-cms-widget-code/package.json` - パッケージ設定、依存関係

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | Widget関数がデフォルトオプションで正しいオブジェクトを生成する | E-01 (L5-15) | ○ |
| C-002 | Widget関数がカスタムオプションで上書きできる | E-01 (L5-15: ...opts) | ○ |
| C-003 | Widget関数が空オブジェクトでデフォルト値を維持する | E-01 (L5-15) | ○ |
| C-004 | DecapCmsWidgetCodeに3つのプロパティが含まれる | E-01 (L17) | ○ |
| C-005 | getChangedPropsが変更プロパティを検出する | E-02 (L23-34) | ○ |
| C-006 | getChangedPropsがkeys引数でフィルタリングする | E-02 (L24) | ○ |
| C-007 | getChangedPropsが変更なしでundefinedを返す | E-02 (L31-33) | ○ |
| C-008 | getChangedPropsが空オブジェクト同士でundefinedを返す | E-02 (L23-34) | ○ |
| C-009 | getChangedPropsが全プロパティ変更時にすべて返す | E-02 (L25-30) | ○ |
| C-010 | valueToOptionが文字列をvalue/labelに変換する | E-02 (L49-54) | ○ |
| C-011 | valueToOptionがオブジェクト（labelあり）を変換する | E-02 (L53) | ○ |
| C-012 | valueToOptionがオブジェクト（labelなし）でnameをlabelに使用する | E-02 (L53: val.label \|\| val.name) | ○ |
| C-013 | valueToOptionが空文字列を処理する | E-02 (L50-51) | ○ |
| C-014 | getKeysがデフォルトキーを返す | E-02 (L182-195) | ○ |
| C-015 | getKeysがカスタムキーをマージする | E-02 (L193-194) | ○ |
| C-016 | getKeysがisEditorComponent時にデフォルトを強制する | E-02 (L189-191) | ○ |
| C-017 | valueIsMapがoutput_code_only=falseでtrueを返す | E-02 (L199-202) | ○ |
| C-018 | valueIsMapがoutput_code_only=trueでfalseを返す | E-02 (L201) | ○ |
| C-019 | valueIsMapがisEditorComponent=trueでtrueを返す | E-02 (L201: \|\| isEditorComponent) | ○ |
| C-020 | valueIsMapが未設定時にtrueを返す | E-02 (L201: !field.get('output_code_only')) | ○ |
| C-021 | getLanguageByNameが存在する言語を返す | E-02 (L147-149) | ○ |
| C-022 | getLanguageByNameが存在しない言語でundefinedを返す | E-02 (L148: Array.find) | ○ |
| C-023 | getLanguageByNameが空文字列でundefinedを返す | E-02 (L148) | ○ |
| C-024 | getKeyMapOptionsが許可されたキーマップをソートして返す | E-02 (L151-156) | ○ |
| C-025 | getKeyMapOptionsが{value, label}形式で返す | E-02 (L155) | ○ |
| C-026 | getInitialLangがMap値から言語を取得する | E-02 (L160-169) | ○ |
| C-027 | getInitialLangがdefault_languageにフォールバックする | E-02 (L163) | ○ |
| C-028 | getInitialLangが不明言語でunknownLangを設定する | E-02 (L165-167) | ○ |
| C-029 | getInitialLangがnull値でフォールバックする | E-02 (L163) | ○ |
| C-030 | allowLanguageSelectionが未設定時にtrueを返す | E-02 (L173-175) | ○ |
| C-031 | allowLanguageSelectionがfalse設定時にfalseを返す | E-02 (L174-175) | ○ |
| C-032 | allowLanguageSelectionがtrue設定時にtrueを返す | E-02 (L174-175) | ○ |
| C-033 | toValueがMap時にcodeを設定する | E-02 (L177-178) | ○ |
| C-034 | toValueがMap時にlangを設定する | E-02 (L178) | ○ |
| C-035 | toValueが非Map時にcodeで生の値を返す | E-02 (L179) | ○ |
| C-036 | toValueが非Map時にlangで既存値を維持する | E-02 (L179) | ○ |
| C-037 | toValueがnull時に空Mapを使用する | E-02 (L178: this.props.value \|\| Map()) | ○ |
| C-038 | shouldComponentUpdateがstate変更でtrueを返す | E-02 (L95-101) | ○ |
| C-039 | shouldComponentUpdateがclassNameWrapper変更でtrueを返す | E-02 (L98) | ○ |
| C-040 | shouldComponentUpdateが変更なしでfalseを返す | E-02 (L95-101) | ○ |
| C-041 | shouldComponentUpdateが非表示→表示遷移でtrueを返す | E-02 (L99) | △ |
| C-042 | componentDidMountでlangステートが設定される | E-02 (L103-110) | ○ |
| C-043 | componentDidMountでgetInitialLangがundefined時に空文字列になる | E-02 (L108: \|\| '') | ○ |
| C-044 | updateCodeMirrorPropsが変更時にhandleChangeCodeMirrorPropsを呼ぶ | E-02 (L124-137) | ○ |
| C-045 | updateCodeMirrorPropsが初回言語設定時にshouldIgnoreLangChange=trueを渡す | E-02 (L129-132) | △ |
| C-046 | updateCodeMirrorPropsが変更なし時に呼ばない | E-02 (L127) | ○ |
| C-047 | refreshCodeMirrorInstanceが表示時にrefreshを呼ぶ | E-02 (L140-145) | ○ |
| C-048 | refreshCodeMirrorInstanceがcm未初期化時にエラーにならない | E-02 (L141: this.cm?.getWrapperElement) | △ |
| C-049 | handleChangeCodeMirrorPropsが言語変更時にモードをrequireする | E-02 (L207-211) | ○ |
| C-050 | handleChangeCodeMirrorPropsがテーマをlocalStorageに保存する | E-02 (L226-229) | ○ |
| C-051 | handleChangeCodeMirrorPropsがキーマップをlocalStorageに保存する | E-02 (L226-229) | ○ |
| C-052 | handleChangeCodeMirrorPropsが言語変更時にonChangeを呼ぶ | E-02 (L234-236) | ○ |
| C-053 | handleChangeCodeMirrorPropsがignoreLangChange=trueでonChangeを呼ばない | E-02 (L234: !ignoreLangChange) | ○ |
| C-054 | handleChangeCodeMirrorPropsがvalueIsMap=falseで言語変更時にonChangeを呼ばない | E-02 (L234: this.valueIsMap()) | ○ |
| C-055 | handleChangeCodeMirrorPropsがcm存在時にcodeMirrorKeyを更新しカーソルを復元する | E-02 (L217-224) | ○ |
| C-056 | handleChangeで新しい値でonChangeが呼ばれる | E-02 (L239-244) | ○ |
| C-057 | handleChangeでlastKnownValueが更新される | E-02 (L242) | ○ |
| C-058 | showSettingsでsettingsVisibleがtrueになる | E-02 (L246-248) | ○ |
| C-059 | hideSettingsでsettingsVisibleがfalseになりfocusが呼ばれる | E-02 (L250-255) | ○ |
| C-060 | hideSettingsがsettingsVisible=false時にsetStateを呼ばない | E-02 (L251) | ○ |
| C-061 | handleFocusが3つのメソッドを呼ぶ | E-02 (L257-261) | ○ |
| C-062 | handleBlurが2つのメソッドを呼ぶ | E-02 (L263-266) | ○ |
| C-063 | setActiveがisActive=trueにする | E-02 (L268) | ○ |
| C-064 | setInactiveがisActive=falseにする | E-02 (L269) | ○ |
| C-065 | render時に設定非表示でSettingsButtonが表示される | E-02 (L290) | ○ |
| C-066 | render時に設定表示でSettingsPaneが表示される | E-02 (L291-305) | ○ |
| C-067 | renderでReactCodeMirrorに正しいオプションが渡される | E-02 (L307-337) | ○ |
| C-068 | langInfoがnullの場合にmodeがundefinedになる | E-02 (L275: langInfo?.mimeType \|\| langInfo?.mode) | ○ |
| C-069 | componentDidUpdateで親リスト展開時にrefreshが呼ばれる | E-02 (L112-122) | △ |
| C-070 | localStorageからテーマが復元される | E-02 (L86) | ○ |
| C-071 | localStorageからキーマップが復元される | E-02 (L83) | ○ |
| C-072 | localStorage未設定時にデフォルト値で初期化される | E-02 (L83, L86) | ○ |
| C-073 | toValue(CodePreview)が文字列をそのまま返す | E-03 (L8-9) | ○ |
| C-074 | toValue(CodePreview)がMapからcodeキー値を返す | E-03 (L11-12) | ○ |
| C-075 | toValue(CodePreview)がカスタムキーのMap値を返す | E-03 (L12: field.getIn(['keys', 'code'], 'code')) | ○ |
| C-076 | toValue(CodePreview)がnullで空文字列を返す | E-03 (L14) | ○ |
| C-077 | toValue(CodePreview)がundefinedで空文字列を返す | E-03 (L14) | ○ |
| C-078 | toValue(CodePreview)が数値で空文字列を返す | E-03 (L8, L11, L14) | ○ |
| C-079 | toValue(CodePreview)が空文字列で空文字列を返す | E-03 (L8-9) | ○ |
| C-080 | toValue(CodePreview)がcodeキー欠損Mapで空文字列を返す | E-03 (L12: 第2引数 '') | ○ |
| C-081 | CodePreviewが文字列値でpre/codeタグを表示する | E-03 (L17-25) | ○ |
| C-082 | CodePreviewがMap値でpre/codeタグを表示する | E-03 (L17-25) | ○ |
| C-083 | CodePreviewがWidgetPreviewContainerでラップされる | E-03 (L19) | ○ |
| C-084 | SettingsSelectがSelectに正しいpropsを渡す | E-04 (L42-55) | ○ |
| C-085 | SettingsSelectの選択時にonChangeがopt.valueで呼ばれる | E-04 (L49) | ○ |
| C-086 | SettingsPaneがallowLanguageSelection=trueでMode選択を表示する | E-04 (L74-87) | ○ |
| C-087 | SettingsPaneがallowLanguageSelection=falseでMode選択を非表示にする | E-04 (L74) | ○ |
| C-088 | SettingsPaneがGlobal Settingsを常に表示する | E-04 (L88-111) | ○ |
| C-089 | SettingsPaneがthemes存在時にTheme選択を表示する | E-04 (L90-102) | ○ |
| C-090 | SettingsPaneがKeyMap選択を常に表示する | E-04 (L103-110) | ○ |
| C-091 | SettingsPaneがEscキーでhideSettingsを呼ぶ | E-04 (L72) | ○ |
| C-092 | SettingsPaneの閉じるボタンでhideSettingsが呼ばれる | E-04 (L73) | ○ |
| C-093 | SettingsPaneがEsc以外のキーでhideSettingsを呼ばない | E-04 (L72: isHotkey('esc', e)) | ○ |
| C-094 | SettingsButtonがshowClose=falseでsettingsアイコンを表示する | E-05 (L28) | ○ |
| C-095 | SettingsButtonがshowClose=trueでcloseアイコンを表示する | E-05 (L28) | ○ |
| C-096 | SettingsButtonクリック時にonClickが呼ばれる | E-05 (L27) | ○ |
| C-097 | SettingsButtonがshowClose未指定時にsettingsアイコンを表示する | E-05 (L28: showClose ? 'close' : 'settings') | ○ |
| C-098 | schemaに正しいプロパティ定義が含まれる | E-07 (L1-11) | ○ |
| C-099 | schema.keysにcode/langサブプロパティが定義される | E-07 (L7-8) | ○ |
| C-100 | languageSelectStylesがreactSelectStylesを拡張したオブジェクトである | E-06 (L3-33) | ○ |
| C-101 | languageSelectStyles.containerにmargin-topが追加される | E-06 (L5-8) | ○ |
| C-102 | languageSelectStyles.controlにborder, padding, fontSize, minHeightが設定される | E-06 (L9-15) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-041**: shouldComponentUpdateの非表示→表示遷移時の条件判定は、visibilityプロパティの初期化とisParentListCollapsedの実行時変化を正確に追跡する必要がある。実際のReactライフサイクルでの動作確認が推奨される。
  - 候補：実際のコンポーネントマウントテスト / E2Eテスト / 既存テストコード
- **C-045**: updateCodeMirrorPropsのshouldIgnoreLangChange判定ロジックは、isLangInitializedとchangedPropsのキー数の組み合わせ条件を推定している。条件の正確性はユニットテストで確認が必要。
  - 候補：既存テストコード / デバッグログ
- **C-048**: refreshCodeMirrorInstanceでcm未初期化時のオプショナルチェーン(`this.cm?.getWrapperElement`)の動作は、JavaScriptの仕様から推定しているが、実際のエラーハンドリングの確認が推奨される。
  - 候補：ブラウザデバッグ / 既存テストコード
- **C-069**: componentDidUpdateの親リスト展開時のリフレッシュは、visibilityプロパティの変更タイミングとisParentListCollapsedの組み合わせ条件の正確性を確認する必要がある。
  - 候補：統合テスト / 既存テストコード

## 5) リスクフラグ（レビュー観点）
- 0（低リスク）：index.js, schema.js, languageSelectStyles.js - 単純なエクスポート・定義のみ
- 0（低リスク）：CodePreview.js - 純粋関数によるプレビュー表示
- 0（低リスク）：SettingsButton.js - 単純な表示切り替えコンポーネント
- 1（中リスク）：SettingsPane.js - ユーザー操作に基づくイベントハンドリング
- 1（中リスク）：CodeControl.js (render, state初期化) - Reactライフサイクルとの統合
- 2（高リスク）：CodeControl.js (handleChangeCodeMirrorProps) - 非同期処理、localStorage操作、動的require、カーソル復元など複合的な処理

## 6) レビュアーチェックリスト（最小）
- [ ] CodeControl.handleChangeCodeMirrorPropsの非同期処理（dynamic require）のエラーハンドリングが十分か確認する
- [ ] CodeControl.toValueのnullケース（props.valueがnull時のMap()フォールバック）が正しく動作するか確認する
- [ ] CodeControl.shouldComponentUpdateのvisibilityプロパティに基づく再レンダリング条件が正しいか確認する
- [ ] SettingsPaneのEscキー検出（isHotkey）の信頼性を確認する
- [ ] localStorageへの永続化キー（settingsPersistKeys）が他のモジュールと衝突しないか確認する
- [ ] getInitialLangでunknownLangがsetStateされた後のUI上の影響を確認する
