---
generated_at: 2026-02-25 12:00:00
metrics:
  claims_total: 55
  claims_with_evidence: 52
  claims_without_evidence: 3
confidence_derived: 0.95
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：52 / 55、根拠なし：3
- 優先レビュー（高）
  1. **UT-APP-052（ウィジェットWidget()エラー時の挙動）**：エラー伝播の具体的挙動はソースコードに明示的なエラーハンドリングがなく推測に基づく
  2. **UT-APP-053（バックエンドモジュールインポート失敗時の挙動）**：モジュール不在時の挙動はJavaScript/バンドラーの仕様依存であり、ソースコードからは直接確認不可
  3. **UT-APP-054（ロケールモジュールインポート失敗時の挙動）**：モジュール不在時の挙動はJavaScript/バンドラーの仕様依存であり、ソースコードからは直接確認不可

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

- E-01: `packages/decap-cms-app/src/index.js` - メインエントリポイント（行1-14）
- E-02: `packages/decap-cms-app/src/extensions.js` - 拡張機能登録（行1-70）
- E-03: `packages/decap-cms-app/src/locales.js` - ロケール登録（行1-4）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | DecapCmsAppがCMSの全プロパティを含むオブジェクトとしてエクスポートされる | E-01（行11-13：`export const DecapCmsApp = { ...CMS }`） | ○ |
| C-02 | デフォルトエクスポートがCMSオブジェクトである | E-01（行14：`export default CMS`） | ○ |
| C-03 | DecapCmsAppがregisterBackendメソッドを持つ | E-01（行11-13：スプレッド構文でCMSの全メソッドを継承） | ○ |
| C-04 | DecapCmsAppがregisterWidgetメソッドを持つ | E-01（行11-13：スプレッド構文でCMSの全メソッドを継承） | ○ |
| C-05 | DecapCmsAppがregisterLocaleメソッドを持つ | E-01（行11-13：スプレッド構文でCMSの全メソッドを継承） | ○ |
| C-06 | DecapCmsAppがregisterEditorComponentメソッドを持つ | E-01（行11-13：スプレッド構文でCMSの全メソッドを継承） | ○ |
| C-07 | ブラウザ環境でDECAP_CMS_APP_VERSIONが文字列の場合にバージョンがログ出力される | E-01（行5-9：`if (typeof window !== 'undefined') { if (typeof DECAP_CMS_APP_VERSION === 'string') { console.log(...) } }`） | ○ |
| C-08 | windowが未定義の場合にログが出力されない | E-01（行5：`if (typeof window !== 'undefined')`による条件分岐） | ○ |
| C-09 | DECAP_CMS_APP_VERSIONが未定義の場合にログが出力されない | E-01（行6：`if (typeof DECAP_CMS_APP_VERSION === 'string')`による型チェック） | ○ |
| C-10 | DECAP_CMS_APP_VERSIONが数値の場合にログが出力されない | E-01（行6：`typeof DECAP_CMS_APP_VERSION === 'string'`で数値は除外される） | ○ |
| C-11 | DECAP_CMS_APP_VERSIONが空文字列の場合にログが出力される | E-01（行6：`typeof '' === 'string'`はtrueとなる） | ○ |
| C-12 | extensions.jsがindex.jsのインポート時に実行される | E-01（行2：`import './extensions.js'`は副作用インポート） | ○ |
| C-13 | git-gatewayバックエンドが正しく登録される | E-02（行35：`CMS.registerBackend('git-gateway', GitGatewayBackend)`） | ○ |
| C-14 | azureバックエンドが正しく登録される | E-02（行36：`CMS.registerBackend('azure', AzureBackend)`） | ○ |
| C-15 | aws-cognito-github-proxyバックエンドが正しく登録される | E-02（行37：`CMS.registerBackend('aws-cognito-github-proxy', AwsCognitoGitHubProxyBackend)`） | ○ |
| C-16 | githubバックエンドが正しく登録される | E-02（行38：`CMS.registerBackend('github', GitHubBackend)`） | ○ |
| C-17 | gitlabバックエンドが正しく登録される | E-02（行39：`CMS.registerBackend('gitlab', GitLabBackend)`） | ○ |
| C-18 | giteaバックエンドが正しく登録される | E-02（行40：`CMS.registerBackend('gitea', GiteaBackend)`） | ○ |
| C-19 | bitbucketバックエンドが正しく登録される | E-02（行41：`CMS.registerBackend('bitbucket', BitbucketBackend)`） | ○ |
| C-20 | test-repoバックエンドが正しく登録される | E-02（行42：`CMS.registerBackend('test-repo', TestBackend)`） | ○ |
| C-21 | proxyバックエンドが正しく登録される | E-02（行43：`CMS.registerBackend('proxy', ProxyBackend)`） | ○ |
| C-22 | 全9種のバックエンドが登録される | E-02（行35-43：registerBackendが9回呼び出されている） | ○ |
| C-23 | 15個のウィジェットが配列として一括登録される | E-02（行44-60：`CMS.registerWidget([...15個のWidget()呼び出し...])`） | ○ |
| C-24 | Stringウィジェットが登録配列に含まれる | E-02（行45：`DecapCmsWidgetString.Widget()`） | ○ |
| C-25 | Numberウィジェットが登録配列に含まれる | E-02（行46：`DecapCmsWidgetNumber.Widget()`） | ○ |
| C-26 | Textウィジェットが登録配列に含まれる | E-02（行47：`DecapCmsWidgetText.Widget()`） | ○ |
| C-27 | Imageウィジェットが登録配列に含まれる | E-02（行48：`DecapCmsWidgetImage.Widget()`） | ○ |
| C-28 | Fileウィジェットが登録配列に含まれる | E-02（行49：`DecapCmsWidgetFile.Widget()`） | ○ |
| C-29 | Selectウィジェットが登録配列に含まれる | E-02（行50：`DecapCmsWidgetSelect.Widget()`） | ○ |
| C-30 | Markdownウィジェットが登録配列に含まれる | E-02（行51：`DecapCmsWidgetMarkdown.Widget()`） | ○ |
| C-31 | Listウィジェットが登録配列に含まれる | E-02（行52：`DecapCmsWidgetList.Widget()`） | ○ |
| C-32 | Objectウィジェットが登録配列に含まれる | E-02（行53：`DecapCmsWidgetObject.Widget()`） | ○ |
| C-33 | Relationウィジェットが登録配列に含まれる | E-02（行54：`DecapCmsWidgetRelation.Widget()`） | ○ |
| C-34 | Booleanウィジェットが登録配列に含まれる | E-02（行55：`DecapCmsWidgetBoolean.Widget()`） | ○ |
| C-35 | Mapウィジェットが登録配列に含まれる | E-02（行56：`DecapCmsWidgetMap.Widget()`） | ○ |
| C-36 | Datetimeウィジェットが登録配列に含まれる | E-02（行57：`DecapCmsWidgetDatetime.Widget()`） | ○ |
| C-37 | Codeウィジェットが登録配列に含まれる | E-02（行58：`DecapCmsWidgetCode.Widget()`） | ○ |
| C-38 | ColorStringウィジェットが登録配列に含まれる | E-02（行59：`DecapCmsWidgetColorString.Widget()`） | ○ |
| C-39 | imageエディタコンポーネントが登録される | E-02（行61：`CMS.registerEditorComponent(image)`） | ○ |
| C-40 | code-blockエディタコンポーネントが正しい設定で登録される | E-02（行62-67：`CMS.registerEditorComponent({ id: 'code-block', label: 'Code Block', widget: 'code', type: 'code-block' })`） | ○ |
| C-41 | code-blockのidが'code-block'である | E-02（行63：`id: 'code-block'`） | ○ |
| C-42 | code-blockのlabelが'Code Block'である | E-02（行64：`label: 'Code Block'`） | ○ |
| C-43 | code-blockのwidgetが'code'である | E-02（行65：`widget: 'code'`） | ○ |
| C-44 | code-blockのtypeが'code-block'である | E-02（行66：`type: 'code-block'`） | ○ |
| C-45 | エディタコンポーネントが合計2回登録される | E-02（行61, 62-67：registerEditorComponentが2回呼び出されている） | ○ |
| C-46 | 全ロケールがCMSに登録される | E-02（行68-70：`Object.keys(locales).forEach(locale => { CMS.registerLocale(locale, locales[locale]); })`） | ○ |
| C-47 | 各ロケールが正しいキーと値で登録される | E-02（行69：`CMS.registerLocale(locale, locales[locale])`でキーと値が一致） | ○ |
| C-48 | localesが空オブジェクトの場合にregisterLocaleが呼び出されない | E-02（行68：`Object.keys({}).forEach`は空配列となりコールバックが実行されない） | ○ |
| C-49 | localesが1件のみの場合にregisterLocaleが1回呼び出される | E-02（行68-70：Object.keysの結果が1件なら1回のみ実行） | ○ |
| C-50 | 英語ロケールが'en'キーで登録される | E-03（行4：`CMS.registerLocale('en', en)`） | ○ |
| C-51 | locales.jsでregisterLocaleが1回だけ呼ばれる | E-03（行4：registerLocaleの呼び出しが1行のみ） | ○ |
| C-52 | ウィジェットWidget()がエラーをスローした場合にエラーが伝播する | **根拠なし** | △ |
| C-53 | バックエンドモジュールがインポートできない場合にエラーが伝播する | **根拠なし** | △ |
| C-54 | ロケールモジュールがインポートできない場合にエラーが伝播する | **根拠なし** | △ |
| C-55 | バックエンド登録の呼び出し順序が正しい | E-02（行35-43：ソースコード上の記述順序から確認可能） | ○ |

## 4) 不足情報（Unknown / Missing）
- C-52、C-53、C-54はJavaScriptのモジュールシステム（ECMAScript Modules）におけるエラー伝播の一般的な挙動に基づく推測であり、decap-cms-appのソースコードに明示的なエラーハンドリング（try-catch等）の記述がないため根拠なしと判定
  - 候補：JavaScript仕様（ECMAScript Modules仕様） / Webpackバンドラーの挙動ドキュメント / 実際のテスト実行結果

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 本モジュールは主に他モジュールの登録処理（バックエンド、ウィジェット、ロケール、エディタコンポーネント）を行うグルーコードであり、独自のビジネスロジックはほぼ存在しない
- 1: 中リスク - 異常系テストケース（C-52, C-53, C-54）はエラー伝播の挙動がバンドラーやランタイム環境に依存するため、テスト環境によって結果が異なる可能性がある
- 0: 低リスク - extensions.jsの副作用インポートによる拡張登録は、コードの実行順序に依存するが、JavaScriptのモジュール読み込み順序は仕様で保証されている

## 6) レビュアーチェックリスト（最小）
- [ ] バックエンド登録が9種類すべて網羅されているか確認する（git-gateway, azure, aws-cognito-github-proxy, github, gitlab, gitea, bitbucket, test-repo, proxy）
- [ ] ウィジェット登録が15種類すべて網羅されているか確認する（string, number, text, image, file, select, markdown, list, object, relation, boolean, map, datetime, code, colorstring）
- [ ] エディタコンポーネント登録が2種類（image, code-block）網羅されているか確認する
- [ ] code-blockエディタコンポーネントの4プロパティ（id, label, widget, type）が全て検証されているか確認する
- [ ] 異常系テスト（UT-APP-052, UT-APP-053, UT-APP-054）の期待結果が実際の挙動と一致するか、テスト実行で確認する
- [ ] バージョンログ出力のテスト（UT-APP-007〜011）でグローバル変数のモック方法が適切か確認する
- [ ] locales.jsとextensions.jsの両方でロケール登録テストが重複していないか（用途が異なることの）確認する
