---
generated_at: 2026-02-25 15:00:00
metrics:
  claims_total: 37
  claims_with_evidence: 36
  claims_without_evidence: 1
confidence_derived: 0.97
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：36 / 37、根拠なし：1
- 優先レビュー（高）
  1. **C-21（UT-STR-021）**：長大文字列のレンダリング確認。ブラウザ/DOMレベルの制約はソースコードから特定できないため根拠不足
  2. **C-18（UT-STR-018）**：value=0時のfalsy挙動。コード上の `value || ''` から推論可能だが、PropTypes.nodeが数値を受け入れる仕様は外部仕様に依存
  3. **C-31（UT-STR-031）**：StringPreviewでのHTMLタグ含有文字列の安全性。Reactの標準エスケープ機構に依存し、ソースコード内に明示的な対策は存在しない

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

- E-01: `packages/decap-cms-widget-string/src/StringControl.js` （StringControlクラスコンポーネント全体、67行）
- E-02: `packages/decap-cms-widget-string/src/StringPreview.js` （StringPreview関数コンポーネント全体、13行）
- E-03: `packages/decap-cms-widget-string/src/index.js` （モジュールエントリポイント、14行）
- E-04: `packages/decap-cms-widget-string/package.json` （パッケージ定義、依存関係）
- E-05: StringControl.js 48-64行目（renderメソッド内のinput要素定義、ref callback、value || '' フォールバック）
- E-06: StringControl.js 43-46行目（handleChangeメソッド定義、_sel更新とonChange呼び出し）
- E-07: StringControl.js 37-41行目（componentDidUpdateメソッド定義、カーソル位置復元ロジック）
- E-08: StringControl.js 24-27行目（componentDidMountメソッド定義、PropTypes.checkPropTypes呼び出し）
- E-09: StringControl.js 14-16行目（defaultProps定義、value: ''）
- E-10: StringControl.js 5-12行目（propTypes定義、onChange, forID, value, classNameWrapper, setActiveStyle, setInactiveStyle）
- E-11: StringControl.js 59行目（`value={value || ''}` のfalsyフォールバック処理）
- E-12: StringControl.js 29-36行目（カーソルジャンプ防止に関するコメント、issue #4539, #3578への参照）
- E-13: StringPreview.js 5-7行目（StringPreview関数定義、WidgetPreviewContainer使用）
- E-14: StringPreview.js 9-11行目（propTypes定義、value: PropTypes.node）
- E-15: index.js 4-11行目（Widgetファクトリ関数定義、スプレッド演算子によるopts上書き）
- E-16: index.js 13行目（DecapCmsWidgetStringエクスポート定義）
- E-17: index.js 14行目（default export定義）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | UT-STR-001: 初期状態で正しくinput要素がレンダリングされる | E-05 | ○ |
| C-02 | UT-STR-002: input要素のtype属性が'text'である | E-05 | ○ |
| C-03 | UT-STR-003: forIDがinput要素のid属性に設定される | E-05 | ○ |
| C-04 | UT-STR-004: classNameWrapperがclassName属性に設定される | E-05 | ○ |
| C-05 | UT-STR-005: setActiveStyleがonFocusに設定される | E-05 | ○ |
| C-06 | UT-STR-006: setInactiveStyleがonBlurに設定される | E-05 | ○ |
| C-07 | UT-STR-007: ref callbackでinput要素が_elに設定される | E-05 | ○ |
| C-08 | UT-STR-008: テキスト入力時にonChangeが呼び出される | E-06 | ○ |
| C-09 | UT-STR-009: テキスト入力時にカーソル位置が保存される | E-06, E-12 | ○ |
| C-10 | UT-STR-010: 連続入力時にonChangeがそれぞれの値で呼び出される | E-06 | ○ |
| C-11 | UT-STR-011: 日本語（マルチバイト文字）入力が正しく処理される | E-06 | ○ |
| C-12 | UT-STR-012: componentDidUpdateでカーソル位置が復元される | E-07, E-12 | ○ |
| C-13 | UT-STR-013: カーソル位置一致時のsetSelectionRange抑制 | E-07 | ○ |
| C-14 | UT-STR-014: _elがnullの場合にエラーが発生しない | E-07 | ○ |
| C-15 | UT-STR-015: componentDidMountでPropTypes.checkPropTypes呼び出し | E-08 | ○ |
| C-16 | UT-STR-016: valueがnullの場合に空文字列が設定される | E-11 | ○ |
| C-17 | UT-STR-017: valueがundefinedの場合に空文字列が設定される | E-09, E-11 | ○ |
| C-18 | UT-STR-018: value=0の場合に空文字列になる | E-11 | ○ |
| C-19 | UT-STR-019: value=falseの場合に空文字列になる | E-11 | ○ |
| C-20 | UT-STR-020: valueが空文字列の場合の挙動 | E-11 | ○ |
| C-21 | UT-STR-021: 非常に長い文字列のレンダリング | E-05 | △ |
| C-22 | UT-STR-022: 空文字列入力時にonChangeが呼び出される | E-06 | ○ |
| C-23 | UT-STR-023: forID未指定時のid属性 | E-05, E-10 | ○ |
| C-24 | UT-STR-024: defaultProps.valueが空文字列 | E-09 | ○ |
| C-25 | UT-STR-025: 必須propTypesが正しく定義されている | E-10 | ○ |
| C-26 | UT-STR-026: 文字列値がWidgetPreviewContainer内に表示される | E-13 | ○ |
| C-27 | UT-STR-027: valueがundefinedの場合のプレビュー | E-13 | ○ |
| C-28 | UT-STR-028: valueがnullの場合のプレビュー | E-13 | ○ |
| C-29 | UT-STR-029: valueが空文字列の場合のプレビュー | E-13 | ○ |
| C-30 | UT-STR-030: valueにReactノードが渡された場合のプレビュー | E-13, E-14 | ○ |
| C-31 | UT-STR-031: HTMLタグ含有文字列がテキストとして安全に表示される | E-13 | ○ |
| C-32 | UT-STR-032: Widget()のデフォルト設定オブジェクト返却 | E-15 | ○ |
| C-33 | UT-STR-033: カスタムオプションによるオーバーライド | E-15 | ○ |
| C-34 | UT-STR-034: 追加プロパティのマージ | E-15 | ○ |
| C-35 | UT-STR-035: 空オブジェクト渡し時のデフォルト値維持 | E-15 | ○ |
| C-36 | UT-STR-036: DecapCmsWidgetStringのエクスポート構造 | E-16 | ○ |
| C-37 | UT-STR-037: default exportの確認 | E-03, E-17 | ○ |

## 4) 不足情報（Unknown / Missing）
- C-21（長大文字列のレンダリング）：ソースコードには文字列長の制限に関するロジックが存在しない。HTML input要素のmaxlength属性も設定されていないため、ブラウザ/DOM仕様に依存する挙動となり、ソースコードのみからの完全な根拠提示が不可能
  - 候補：HTML仕様書 / ブラウザ実装の動作検証 / E2Eテストによる確認

## 5) リスクフラグ（レビュー観点）
- 0: **低リスク** - モジュール全体が小規模（3ファイル、合計約94行）であり、ビジネスロジックが限定的。UI入力ウィジェットのため、金額計算やセキュリティに関する処理は含まれない
- 1: **中リスク** - `value || ''` によるfalsyフォールバック（C-18, C-19）は、数値0やfalseが正当な値として渡された場合に意図しない動作となる可能性がある。ただしPropTypes上はnodeとして定義されており、stringウィジェットとしての用途では問題ないと推定される
- 1: **中リスク** - componentDidUpdate内のカーソル位置復元ロジック（C-12〜C-14）は、マークダウンウィジェット内にネストされた場合の既知バグ対策であり、テスト環境でのDOM挙動の再現が困難な可能性がある
- 0: **低リスク** - StringPreviewのHTMLタグ安全性（C-31）はReactの標準エスケープ機構に依存しており、ソースコード内に明示的なサニタイズ処理はないが、Reactの仕様として信頼できる

## 6) レビュアーチェックリスト（最小）
- [ ] StringControlのrender内 `value || ''` のフォールバックが、想定されるすべての入力型（string, null, undefined, 0, false）に対して適切か確認
- [ ] componentDidUpdateのカーソル位置復元ロジックが、ネストされたウィジェット環境で正しく動作するかの観点が十分か確認
- [ ] Widget()ファクトリ関数のスプレッド演算子によるオプションマージの優先順位（後勝ち）が意図通りか確認
- [ ] StringPreviewのWidgetPreviewContainer依存が、テスト時にモック化可能か確認
- [ ] React 19対応のPropTypes.checkPropTypes手動呼び出し（componentDidMount内）のテスト方法が適切か確認
- [ ] テストケースの観点（正常系25件、異常系6件、境界値6件）が網羅的か確認
