---
generated_at: 2026-02-25 10:30:00
metrics:
  claims_total: 35
  claims_with_evidence: 33
  claims_without_evidence: 2
confidence_derived: 0.94
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.94**
  - 根拠あり：33 / 35、根拠なし：2
- 優先レビュー（高）
  1. **C-28 (UT-IMG-028)**: Reactキーにindexを使用している点の設計意図が不明（コード上はindex使用が確認できるが、意図的かは不明）
  2. **C-34 (UT-IMG-034)**: StyledImageのsrcフォールバック（`src || ''`）の挙動がsrc=undefinedの場合にどうなるか要確認

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

- E-01: `packages/decap-cms-widget-image/src/index.js` (Widget関数、エクスポート定義)
- E-02: `packages/decap-cms-widget-image/src/ImagePreview.js` (StyledImage, StyledImageAsset, ImagePreviewContent, ImagePreview コンポーネント定義)
- E-03: `packages/decap-cms-widget-image/src/schema.js` (スキーマ定義)
- E-04: `packages/decap-cms-widget-image/package.json` (依存関係、peerDependencies)
- E-05: `packages/decap-cms-widget-file/src/index.js` (withFileControlエクスポート)
- E-06: `packages/decap-cms-widget-file/src/withFileControl.js` (withFileControl関数、FileControlクラス定義)

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | Widget関数がデフォルト引数でウィジェットオブジェクトを生成する | E-01 (L8-16: `function Widget(opts = {})` でname, controlComponent, previewComponent, schemaをスプレッド) | ○ |
| C-02 | カスタムオプションでウィジェットオブジェクトが上書きされる | E-01 (L14: `...opts` によるスプレッド上書き) | ○ |
| C-03 | Widget関数のnameプロパティが'image'である | E-01 (L10: `name: 'image'`) | ○ |
| C-04 | controlComponentがforImage=trueで生成される | E-01 (L6: `withFileControl({ forImage: true })`) | ○ |
| C-05 | previewComponentがImagePreviewである | E-01 (L3, L12: `import previewComponent from './ImagePreview'`, `previewComponent`) | ○ |
| C-06 | schemaが正しく設定されている | E-01 (L4, L13: `import schema from './schema'`, `schema`) | ○ |
| C-07 | undefinedを渡した場合にデフォルト動作する | E-01 (L8: `opts = {}` のデフォルト引数) | ○ |
| C-08 | 名前付きエクスポートにWidget, controlComponent, previewComponentが含まれる | E-01 (L18: `export const DecapCmsWidgetImage = { Widget, controlComponent, previewComponent }`) | ○ |
| C-09 | デフォルトエクスポートがDecapCmsWidgetImageである | E-01 (L19: `export default DecapCmsWidgetImage`) | ○ |
| C-10 | StyledImageAssetでFileオブジェクトの場合にURL.createObjectURLが使用される | E-02 (L15-16: `if (value instanceof File) { src = URL.createObjectURL(value) }`) | ○ |
| C-11 | StyledImageAssetで文字列の場合にgetAssetが呼び出される | E-02 (L17-18: `else { src = getAsset(value, field) }`) | ○ |
| C-12 | StyledImageAssetで空文字列の場合の挙動 | E-02 (L15-18: elseブランチに入り、getAsset('', field)が呼ばれる) | ○ |
| C-13 | StyledImageAssetでnullの場合の挙動 | E-02 (L15-18: null instanceof File === false なのでelseブランチ) | ○ |
| C-14 | StyledImageAssetでundefinedの場合の挙動 | E-02 (L15-18: undefined instanceof File === false なのでelseブランチ) | ○ |
| C-15 | ImagePreviewContentで配列valueの場合に各要素分レンダリングされる | E-02 (L25-27: `if (Array.isArray(value) || List.isList(value)) { return value.map(...) }`) | ○ |
| C-16 | ImagePreviewContentでImmutable.Listの場合に各要素分レンダリングされる | E-02 (L25: `List.isList(value)` の条件分岐) | ○ |
| C-17 | ImagePreviewContentで単一文字列の場合にStyledImageAssetが1つレンダリングされる | E-02 (L30: `return <StyledImageAsset {...props} />`) | ○ |
| C-18 | ImagePreviewContentで空配列の場合 | E-02 (L25-27: Array.isArray([]) === true, [].map()は空配列を返す) | ○ |
| C-19 | ImagePreviewContentで1件配列の場合 | E-02 (L25-27: mapで1要素分のStyledImageAssetが返される) | ○ |
| C-20 | ImagePreviewContentで空Immutable.Listの場合 | E-02 (L25: List.isList(List([])) === true, List([]).map()は空) | ○ |
| C-21 | ImagePreviewでvalueが存在する場合にImagePreviewContentがレンダリングされる | E-02 (L36: `{props.value ? <ImagePreviewContent {...props} /> : null}`) | ○ |
| C-22 | ImagePreviewでvalueがnullの場合にnullがレンダリングされる | E-02 (L36: null ? ... : null → nullが返る) | ○ |
| C-23 | ImagePreviewでvalueがundefinedの場合にnullがレンダリングされる | E-02 (L36: undefined ? ... : null → nullが返る) | ○ |
| C-24 | ImagePreviewがWidgetPreviewContainerで囲まれてレンダリングされる | E-02 (L35-38: `<WidgetPreviewContainer>...</WidgetPreviewContainer>`) | ○ |
| C-25 | ImagePreviewでvalueが空文字列の場合にnullがレンダリングされる | E-02 (L36: '' ? ... : null → falsyなのでnullが返る) | ○ |
| C-26 | getAssetがisRequiredとして定義されている | E-02 (L42: `getAsset: PropTypes.func.isRequired`) | ○ |
| C-27 | valueがPropTypes.nodeとして定義されている | E-02 (L43: `value: PropTypes.node`) | ○ |
| C-28 | 配列valueの各要素にkeyとしてindexが設定される | E-02 (L26: `key={index}`) | △ |
| C-29 | スキーマがallow_multipleプロパティを持つ | E-03 (L3: `allow_multiple: { type: 'boolean' }`) | ○ |
| C-30 | スキーマのpropertiesオブジェクトが存在する | E-03 (L2: `properties: { ... }`) | ○ |
| C-31 | スキーマにallow_multiple以外のプロパティが含まれない | E-03 (L2-4: propertiesにはallow_multipleのみ) | ○ |
| C-32 | StyledImageがsrcプロパティのimg要素をレンダリングする | E-02 (L7: `styled(({ src }) => <img src={src \|\| ''} role=""presentation"" />)`) | ○ |
| C-33 | StyledImageにrole='presentation'が設定される | E-02 (L7: `role=""presentation""`) | ○ |
| C-34 | srcが空文字列の場合のフォールバック | E-02 (L7: `src={src \|\| ''}` でフォールバックがあるが、undefinedが直接渡された場合の挙動は実行環境依存) | △ |
| C-35 | 配列valueの各要素にgetAssetとfieldが渡される | E-02 (L27: `<StyledImageAsset key={index} value={val} getAsset={getAsset} field={field} />`) | ○ |

## 4) 不足情報（Unknown / Missing）
- C-28: Reactのkey属性にindexを使用している設計意図が不明。安定したキーではなく配列indexを使っている理由はコードコメントに記載がない。
  - 候補：設計ドキュメント / コードレビューコメント / PR説明文
- C-34: StyledImageの`src || ''`フォールバックにおいて、srcにundefinedが渡される場合の実際のブラウザ挙動は実行環境に依存する。
  - 候補：ブラウザ互換性テスト結果 / E2Eテスト仕様

## 5) リスクフラグ（レビュー観点）
- 0: **低リスク** - schema.jsは単純なオブジェクト定義のため、テストケースの信頼性は高い
- 0: **低リスク** - index.jsはファクトリパターンで、decap-cms-widget-fileへの委譲が明確
- 1: **中リスク** - ImagePreview.jsのStyledImageAssetにおけるFileオブジェクト判定（instanceof File）はテスト環境でのFileオブジェクトの挙動に依存する
- 0: **低リスク** - ImagePreviewContent の配列/List判定ロジックはImmutable.jsのList.isListとArray.isArrayで明確に分岐

## 6) レビュアーチェックリスト（最小）
- [ ] UT-IMG-004: controlComponentがforImage=trueで生成されることの検証方法が適切か確認する（withFileControlのモック戦略）
- [ ] UT-IMG-010: テスト環境でURL.createObjectURLが利用可能か、モックが必要か確認する
- [ ] UT-IMG-015, UT-IMG-016: 配列とImmutable.Listの両方のテストが網羅されているか確認する
- [ ] UT-IMG-028: Reactキーにindexを使用している点が意図的か確認する
- [ ] UT-IMG-034: srcフォールバックのテストが十分か確認する
- [ ] decap-cms-widget-fileのwithFileControlに対するテストは本モジュールの範囲外として扱っているが、結合テストでカバーされるか確認する
