---
generated_at: 2026-01-30 14:00:00
metrics:
  claims_total: 100
  claims_with_evidence: 100
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：desktop-electron.csv

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：100 / 100、根拠なし：0
- 優先レビュー（高）
  1. **セキュリティ関連テスト（UT-ELN-021, 077-081）**：ディレクトリトラバーサル防止、webview無効化、パーミッション制御
  2. **IPC通信テスト（UT-ELN-054-068, 085-098）**：preload.ts経由のIPC通信の網羅性確認
  3. **サーバープロセス管理（UT-ELN-022-025, 069-072, 082-084）**：同期サーバー、バックグラウンドプロセスの起動・停止

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

- E-01: `/Users/tomokababa/Work/reverse-engineering/sample/actual-master/packages/desktop-electron/index.ts`
- E-02: `/Users/tomokababa/Work/reverse-engineering/sample/actual-master/packages/desktop-electron/menu.ts`
- E-03: `/Users/tomokababa/Work/reverse-engineering/sample/actual-master/packages/desktop-electron/security.ts`
- E-04: `/Users/tomokababa/Work/reverse-engineering/sample/actual-master/packages/desktop-electron/window-state.ts`
- E-05: `/Users/tomokababa/Work/reverse-engineering/sample/actual-master/packages/desktop-electron/preload.ts`
- E-06: `/Users/tomokababa/Work/reverse-engineering/sample/actual-master/packages/desktop-electron/server.ts`
- E-07: `/Users/tomokababa/Work/reverse-engineering/sample/actual-master/packages/desktop-electron/beforePackHook.ts`

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

### index.ts関連（UT-ELN-001〜025, 082〜100）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | loadGlobalPrefs正常系：グローバル設定が正常に読み込まれる | E-01 (L134-149) | ○ |
| C-02 | loadGlobalPrefs異常系：設定ファイルが存在しない場合に空オブジェクト | E-01 (L143-146) | ○ |
| C-03 | loadGlobalPrefs異常系：不正なJSONの場合に空オブジェクト | E-01 (L143-146) | ○ |
| C-04 | isExternalUrl：localhostを含むURLは外部URLではない | E-01 (L423-425) | ○ |
| C-05 | isExternalUrl：app://を含むURLは外部URLではない | E-01 (L423-425) | ○ |
| C-06 | isExternalUrl：外部URLが正しく判定される | E-01 (L423-425) | ○ |
| C-07 | isExternalUrl境界値：空文字列が渡された場合 | E-01 (L423-425) | ○ |
| C-08 | createOAuthServer正常系：OAuthサーバーが正常に起動 | E-01 (L91-128) | ○ |
| C-09 | createOAuthServer：既存サーバーがある場合は再利用 | E-01 (L95-97) | ○ |
| C-10 | logMessage：infoレベルのログがコンソールに出力 | E-01 (L75-89) | ○ |
| C-11 | logMessage：errorレベルのログがコンソールに出力 | E-01 (L75-89) | ○ |
| C-12 | logMessage：clientWinがない場合はログがキューに追加 | E-01 (L80-83) | ○ |
| C-13 | move-budget-directory正常系：予算ディレクトリが移動される | E-01 (L630-685) | ○ |
| C-14 | move-budget-directory異常系：ディレクトリが指定されていない | E-01 (L634-636) | ○ |
| C-15 | move-budget-directory異常系：宛先がサブディレクトリ | E-01 (L638-641) | ○ |
| C-16 | move-budget-directory異常系：宛先ディレクトリが存在しない | E-01 (L643-646) | ○ |
| C-17 | protocol handler：GETリクエストが正常に処理される | E-01 (L441-484) | ○ |
| C-18 | protocol handler：GET以外で405が返却される | E-01 (L442-447) | ○ |
| C-19 | protocol handler：不正なプロトコルで404 | E-01 (L449-454) | ○ |
| C-20 | protocol handler：不正なホストで404 | E-01 (L456-461) | ○ |
| C-21 | protocol handler：ディレクトリトラバーサル攻撃で403 | E-01 (L474-480) | ○ |
| C-22 | startSyncServer正常系：同期サーバーが起動 | E-01 (L207-323) | ○ |
| C-23 | startSyncServer：既に起動中の場合は無視 | E-01 (L209-215) | ○ |
| C-24 | startSyncServer：タイムアウト時にエラー | E-01 (L307-317) | ○ |
| C-25 | stopSyncServer：同期サーバーが停止 | E-01 (L325-329) | ○ |
| C-82 | createBackgroundProcess：サーバープロセスがフォーク | E-01 (L151-205) | ○ |
| C-83 | createBackgroundProcess：self-signed-certでNODE_EXTRA_CA_CERTS設定 | E-01 (L157-162) | ○ |
| C-84 | createBackgroundProcess：開発モードでinspectフラグ | E-01 (L169-171) | ○ |
| C-85 | serverProcess message handler：replyメッセージ転送 | E-01 (L195-199) | ○ |
| C-86 | serverProcess message handler：errorメッセージ転送 | E-01 (L195-199) | ○ |
| C-87 | serverProcess message handler：pushメッセージ転送 | E-01 (L195-199) | ○ |
| C-88 | serverProcess message handler：不明なメッセージタイプはログ | E-01 (L201-203) | ○ |
| C-89 | get-bootstrap-data：バージョンとisDevが返却 | E-01 (L524-531) | ○ |
| C-90 | restart-server：サーバープロセスが再起動 | E-01 (L547-554) | ○ |
| C-91 | relaunch：アプリが再起動 | E-01 (L556-559) | ○ |
| C-92 | open-file-dialog：ファイル選択ダイアログ表示 | E-01 (L566-574) | ○ |
| C-93 | open-file-dialog：propertiesのデフォルト値 | E-01 (L570) | ○ |
| C-94 | save-file-dialog：ファイル保存 | E-01 (L582-603) | ○ |
| C-95 | save-file-dialog：Buffer変換 | E-01 (L592-595) | ○ |
| C-96 | set-theme：テーマ送信 | E-01 (L621-628) | ○ |
| C-97 | message handler：メッセージ転送 | E-01 (L613-619) | ○ |
| C-98 | message handler：serverProcessがnullの場合 | E-01 (L614-616) | ○ |
| C-99 | window-all-closed：macOS以外で終了 | E-01 (L499-504) | ○ |
| C-100 | window-all-closed：macOSでは終了しない | E-01 (L501) | ○ |

### menu.ts関連（UT-ELN-026〜029）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-26 | getMenu：メニューテンプレート構築（非macOS） | E-02 (L8-128) | ○ |
| C-27 | getMenu：macOSでアプリ名メニュー追加 | E-02 (L130-152) | ○ |
| C-28 | getMenu：Reloadのアクセラレータ | E-02 (L29) | ○ |
| C-29 | getMenu：DevToolsのアクセラレータ | E-02 (L39-40) | ○ |

### window-state.ts関連（UT-ELN-030〜053）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-30 | get：Playwrightテスト時に固定サイズ | E-04 (L133-141) | ○ |
| C-31 | get：保存された状態がマージされる | E-04 (L146-154) | ○ |
| C-32 | get：保存された状態がない場合のデフォルト | E-04 (L146-154) | ○ |
| C-33 | loadState：保存されたウィンドウ状態読み込み | E-04 (L20-31) | ○ |
| C-34 | loadState：ファイルが存在しない場合 | E-04 (L26-28) | ○ |
| C-35 | validateState：有効な状態がそのまま返却 | E-04 (L85-130) | ○ |
| C-36 | validateState：undefinedの場合に空オブジェクト | E-04 (L86-91) | ○ |
| C-37 | validateState：不完全な状態で空オブジェクト | E-04 (L86-91) | ○ |
| C-38 | validateState：ディスプレイ変更時の調整 | E-04 (L95-127) | ○ |
| C-39 | validateState：ウィンドウが画面外の場合にリセット | E-04 (L107-111) | ○ |
| C-40 | validateState：ウィンドウ幅が大きい場合の調整 | E-04 (L112-115) | ○ |
| C-41 | hasBounds：有効な境界値でtrue | E-04 (L74-83) | ○ |
| C-42 | hasBounds：width<=0でfalse | E-04 (L79) | ○ |
| C-43 | hasBounds：height<=0でfalse | E-04 (L81) | ○ |
| C-44 | hasBounds：xが整数でない場合 | E-04 (L76) | ○ |
| C-45 | updateState：通常状態でサイズ更新 | E-04 (L33-46) | ○ |
| C-46 | updateState：最大化時はサイズ更新なし | E-04 (L36-39) | ○ |
| C-47 | saveState：JSONファイルに保存 | E-04 (L48-55) | ○ |
| C-48 | listen：closeイベントでsaveState | E-04 (L67) | ○ |
| C-49 | listen：isMaximizedでmaximize呼び出し | E-04 (L58-60) | ○ |
| C-50 | listen：isFullScreenでsetFullScreen呼び出し | E-04 (L61-63) | ○ |
| C-51 | listen：リスナー解除関数の返却 | E-04 (L69-71) | ○ |
| C-52 | getDataDir：ACTUAL_DATA_DIRの返却 | E-04 (L12-18) | ○ |
| C-53 | getDataDir：ACTUAL_DATA_DIR未設定でエラー | E-04 (L13-15) | ○ |

### preload.ts関連（UT-ELN-054〜068）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | contextBridge：Actualオブジェクト公開 | E-05 (L12-109) | ○ |
| C-55 | ipcConnect：onとemitの動作 | E-05 (L16-30) | ○ |
| C-56 | startSyncServer：IPC呼び出し | E-05 (L32) | ○ |
| C-57 | stopSyncServer：IPC呼び出し | E-05 (L34) | ○ |
| C-58 | isSyncServerRunning：状態取得 | E-05 (L36) | ○ |
| C-59 | openFileDialog：ダイアログ表示 | E-05 (L48-50) | ○ |
| C-60 | saveFile：ファイル保存 | E-05 (L52-62) | ○ |
| C-61 | openURLInBrowser：外部URL | E-05 (L64-66) | ○ |
| C-62 | openInFileManager：ファイルマネージャー | E-05 (L68-70) | ○ |
| C-63 | setTheme：テーマ設定 | E-05 (L87-89) | ○ |
| C-64 | moveBudgetDirectory：ディレクトリ移動 | E-05 (L91-100) | ○ |
| C-65 | reload：未実装エラー | E-05 (L102-104) | ○ |
| C-66 | applyAppUpdate：未実装エラー | E-05 (L106-108) | ○ |
| C-67 | isUpdateReadyForDownload：常にfalse | E-05 (L77) | ○ |
| C-68 | getServerSocket：常にnull | E-05 (L83-85) | ○ |

### server.ts関連（UT-ELN-069〜072）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-69 | lazyLoadBackend：正常にロード・初期化 | E-06 (L5-41) | ○ |
| C-70 | lazyLoadBackend：lootCoreScript未設定でエラー | E-06 (L6-10) | ○ |
| C-71 | lazyLoadBackend：リトライ後にロード | E-06 (L15-33) | ○ |
| C-72 | lazyLoadBackend：最大リトライ超過でエラー | E-06 (L35-39) | ○ |

### beforePackHook.ts関連（UT-ELN-073〜076）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-73 | beforePackHook：better-sqlite3とbcryptリビルド | E-07 (L19-29) | ○ |
| C-74 | beforePackHook：electronVersion未設定でexit | E-07 (L14-17) | ○ |
| C-75 | beforePackHook：Windowsでappxファイルコピー | E-07 (L31-38) | ○ |
| C-76 | beforePackHook：rebuildエラーでexit | E-07 (L40-43) | ○ |

### security.ts関連（UT-ELN-077〜081）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-77 | will-attach-webview：attachが防止される | E-03 (L13) | ○ |
| C-78 | will-attach-webview：セキュリティ設定が強制 | E-03 (L5-10) | ○ |
| C-79 | will-navigate：ナビゲーションが防止される | E-03 (L16-18) | ○ |
| C-80 | setPermissionRequestHandler：file://は許可 | E-03 (L24-26) | ○ |
| C-81 | setPermissionRequestHandler：file://以外は拒否 | E-03 (L27-28) | ○ |

## 4) 不足情報（Unknown / Missing）
- 全テストケースについてソースコードに基づいた根拠が確認できました。
- 該当なし

## 5) リスクフラグ（レビュー観点）
- **0 (低リスク)**: すべてのテストケースがソースコードに基づいて生成されており、根拠が明確です。
- **注意点**:
  - Electronモジュールのモック化が必要なテストケースが多い（BrowserWindow, ipcMain, dialog等）
  - ファイルシステム操作のテストはfs-extraのモック化が必要
  - プラットフォーム依存の挙動（macOS vs Windows）のテストには環境のモックが必要

## 6) レビュアーチェックリスト（最小）
- [ ] セキュリティ関連テスト（UT-ELN-021, 077-081）のテストケースが網羅的か確認
- [ ] IPC通信のテストケース（UT-ELN-054-068）で全APIがカバーされているか確認
- [ ] エラーハンドリングのテストケースが適切な例外をカバーしているか確認
- [ ] 境界値テストのケースが適切な値を使用しているか確認
- [ ] プラットフォーム依存のテスト（macOS/Windows）の条件が正しいか確認
