---
generated_at: 2026-02-24 10:30:00
metrics:
  claims_total: 140
  claims_with_evidence: 138
  claims_without_evidence: 2
confidence_derived: 0.99
---

# 根拠レポート：link-modules 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.99**
  - 根拠あり：138 / 140、根拠なし：2
- 優先レビュー（高）
  1. **emitEvents_メソッドの動作**：内部メソッドのため直接テストが困難な可能性
  2. **リンク定義の設定値検証**：静的設定のため単体テストの必要性要確認

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

- E-01: `packages/modules/link-modules/src/services/link-module-service.ts` - LinkModuleServiceクラスの実装
- E-02: `packages/modules/link-modules/src/services/link.ts` - LinkServiceクラスの実装
- E-03: `packages/modules/link-modules/src/services/dynamic-service-class.ts` - 動的サービスクラス生成関数
- E-04: `packages/modules/link-modules/src/utils/generate-entity.ts` - エンティティ生成ユーティリティ
- E-05: `packages/modules/link-modules/src/utils/generate-schema.ts` - GraphQLスキーマ生成ユーティリティ
- E-06: `packages/modules/link-modules/src/repositories/link.ts` - リンクリポジトリ実装
- E-07: `packages/modules/link-modules/src/initialize/index.ts` - モジュール初期化ロジック
- E-08: `packages/modules/link-modules/src/initialize/module-definition.ts` - モジュール定義取得関数
- E-09: `packages/modules/link-modules/src/loaders/connection.ts` - DB接続ローダー
- E-10: `packages/modules/link-modules/src/loaders/container.ts` - DIコンテナローダー
- E-11: `packages/modules/link-modules/src/loaders/index.ts` - ローダー取得関数
- E-12: `packages/modules/link-modules/src/migration/index.ts` - マイグレーション実行プランナー
- E-13: `packages/modules/link-modules/src/definitions/cart-payment-collection.ts` - カート・支払いコレクションリンク定義
- E-14: `packages/modules/link-modules/src/definitions/product-variant-inventory-item.ts` - 商品バリアント・在庫アイテムリンク定義
- E-15: `packages/modules/link-modules/src/definitions/readonly/cart-customer.ts` - 読み取り専用リンク定義例
- E-16: `packages/modules/link-modules/src/types/index.ts` - 型定義

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

### LinkModuleService (UT-LNK-001 〜 UT-LNK-039)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | コンストラクタで依存関係が正しく注入される | E-01 (L49-70) | ○ |
| C-02 | primaryKeyが配列に正規化される | E-01 (L65) | ○ |
| C-03 | buildDataで単一/複合主キーのデータが構築される | E-01 (L76-99) | ○ |
| C-04 | buildDataで複合主キー不正時にエラー | E-01 (L82-91) | ○ |
| C-05 | isValidKeyNameでキー名検証 | E-01 (L101-103) | ○ |
| C-06 | validateFieldsでフィールド検証 | E-01 (L105-118) | ○ |
| C-07 | retrieveでエントリ取得、NOT_FOUNDエラー | E-01 (L120-141) | ○ |
| C-08 | listでフィルタ付き一覧取得 | E-01 (L143-156) | ○ |
| C-09 | listAndCountで件数付き一覧取得 | E-01 (L158-177) | ○ |
| C-10 | createで単一/バルクリンク作成 | E-01 (L179-224) | ○ |
| C-11 | dismissでリンク削除（ソフト削除） | E-01 (L226-260) | ○ |
| C-12 | deleteで物理削除 | E-01 (L262-282) | ○ |
| C-13 | softDeleteでソフト削除と復元 | E-01 (L284-340) | ○ |
| C-14 | restoreでソフト削除復元 | E-01 (L342-397) | ○ |
| C-15 | emitEvents_でイベント発行 | E-01 (L399-414) | ○ |

### LinkService (UT-LNK-040 〜 UT-LNK-051)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-16 | コンストラクタでlinkRepository注入 | E-02 (L17-19) | ○ |
| C-17 | listでフィルタ付き一覧取得 | E-02 (L21-32) | ○ |
| C-18 | listAndCountで件数付き取得 | E-02 (L34-42) | ○ |
| C-19 | createでデータ作成 | E-02 (L44-52) | ○ |
| C-20 | dismissでソフト削除 | E-02 (L54-76) | ○ |
| C-21 | deleteで物理削除 | E-02 (L78-86) | ○ |
| C-22 | softDeleteで$orフィルタ構築 | E-02 (L88-110) | ○ |
| C-23 | restoreで復元 | E-02 (L112-134) | ○ |

### dynamic-service-class (UT-LNK-052 〜 UT-LNK-056)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | getModuleServiceでLinkService拡張クラス返却 | E-03 (L9-30) | ○ |
| C-25 | __joinerConfig()がjoinerConfig返却 | E-03 (L25-28) | ○ |
| C-26 | extraDataFieldsの自動設定 | E-03 (L17-23) | ○ |
| C-27 | getReadOnlyModuleServiceで読み取り専用サービス | E-03 (L32-38) | ○ |

### generate-entity (UT-LNK-057 〜 UT-LNK-068)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-28 | EntitySchemaが生成される | E-04 (L25-149) | ○ |
| C-29 | プライマリ/フォーリンキーがフィールドに含まれる | E-04 (L30-48) | ○ |
| C-30 | extraFieldsが含まれる | E-04 (L50-61) | ○ |
| C-31 | テーブル名がdatabaseConfigまたは自動生成 | E-04 (L32-39) | ○ |
| C-32 | タイムスタンプフィールドが含まれる | E-04 (L76-92) | ○ |
| C-33 | SoftDeletableFilterが設定される | E-04 (L94-96) | ○ |
| C-34 | beforeUpdateフックでupdated_at更新 | E-04 (L97-103) | ○ |
| C-35 | インデックスが生成される | E-04 (L104-147) | ○ |
| C-36 | getClassで動的クラス生成 | E-04 (L15-23) | ○ |

### generate-schema (UT-LNK-069 〜 UT-LNK-081)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-37 | GraphQLスキーマ文字列が生成される | E-05 (L14-210) | ○ |
| C-38 | extend type定義が含まれる | E-05 (L41-146) | ○ |
| C-39 | isReadOnlyLinkでextend typeのみ返却 | E-05 (L148-150) | ○ |
| C-40 | extraFieldsがGraphQL型に変換される | E-05 (L161-168) | ○ |
| C-41 | モジュール未発見時エラー | E-05 (L42-47) | ○ |
| C-42 | linkableKey未発見時警告ログ | E-05 (L54-59, L117-119) | ○ |
| C-43 | getGraphQLTypeで型変換 | E-05 (L212-240) | ○ |

### link repository (UT-LNK-082 〜 UT-LNK-089)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-44 | getLinkRepositoryでリポジトリクラス返却 | E-06 (L10-48) | ○ |
| C-45 | コンストラクタでjoinerConfig設定 | E-06 (L14-18) | ○ |
| C-46 | deleteで$inフィルタ構築 | E-06 (L20-29) | ○ |
| C-47 | createでID自動生成、upsertMany | E-06 (L31-46) | ○ |

### initialize (UT-LNK-090 〜 UT-LNK-102)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 | initializeで全リンクモジュール初期化 | E-07 (L29-184) | ○ |
| C-49 | relationships.length !== 2でエラー | E-07 (L58-64) | ○ |
| C-50 | 複合外部キーでエラー | E-07 (L65-70) | ○ |
| C-51 | extraDataFields未定義でエラー | E-07 (L72-88) | ○ |
| C-52 | 重複serviceKeyでエラー | E-07 (L102-103) | ○ |
| C-53 | getMigrationPlannerでプランナー返却 | E-07 (L194-243) | ○ |

### module-definition (UT-LNK-103 〜 UT-LNK-105)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | getLinkModuleDefinitionでModuleExports返却 | E-08 (L9-24) | ○ |
| C-55 | isReadOnlyLinkで分岐 | E-08 (L15-17) | ○ |

### loaders (UT-LNK-106 〜 UT-LNK-113)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-56 | connectionLoaderでMikroORM接続初期化 | E-09 (L11-35) | ○ |
| C-57 | containerLoaderで依存関係登録 | E-10 (L17-68) | ○ |
| C-58 | getLoadersでローダー配列返却 | E-11 (L11-26) | ○ |
| C-59 | isReadOnlyLinkで空配列返却 | E-11 (L20-22) | ○ |

### MigrationsExecutionPlanner (UT-LNK-114 〜 UT-LNK-137)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-60 | コンストラクタで設定初期化 | E-12 (L56-82) | ○ |
| C-61 | createORMでMikroORM作成 | E-12 (L88-90) | ○ |
| C-62 | ensureMigrationsTableでテーブル作成 | E-12 (L98-109) | ○ |
| C-63 | ensureMigrationsTableUpToDateで同期 | E-12 (L117-171) | ○ |
| C-64 | createLinkTableでテーブル作成 | E-12 (L180-204) | ○ |
| C-65 | dropLinkTableでテーブル削除 | E-12 (L210-219) | ○ |
| C-66 | getTrackedLinksTablesで追跡テーブル取得 | E-12 (L229-252) | ○ |
| C-67 | getEntityMigrationPlanでプラン生成 | E-12 (L279-358) | ○ |
| C-68 | migrateOldTablesでテーブル名更新 | E-12 (L367-416) | ○ |
| C-69 | renameOldTableでリネーム | E-12 (L421-437) | ○ |
| C-70 | createPlanで実行プラン作成 | E-12 (L446-503) | ○ |
| C-71 | executePlanでプラン実行 | E-12 (L513-541) | ○ |
| C-72 | pickTableRelatedCommandsでコマンドフィルタ | E-12 (L254-275) | ○ |

### リンク定義 (UT-LNK-138 〜 UT-LNK-140)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-73 | CartPaymentCollectionの設定構造 | E-13 (L1-69) | ○ |
| C-74 | ProductVariantInventoryItemのextraFields | E-14 (L1-84) | ○ |
| C-75 | CartCustomerのisReadOnlyLink | E-15 (L1-38) | ○ |

## 4) 不足情報（Unknown / Missing）
- **emitEvents_メソッドのテスト可能性**: protectedメソッドのため直接テストが困難。統合テストまたはモック経由でのテストを推奨
  - 候補：統合テスト / モックによるイベント発行検証 / カバレッジツールでの確認
- **リンク定義の静的設定検証**: 設定オブジェクトの静的検証は型システムで担保される部分が多い
  - 候補：TypeScript型チェック / 実行時バリデーション / 設定ロード時のスキーマ検証

## 5) リスクフラグ（レビュー観点）
- **0 (低リスク)**: ほとんどのテストケースがソースコードから直接導出されており、根拠が明確
- **1 (中リスク)**: マイグレーション関連のテストは実際のDB接続が必要なため、統合テスト環境での検証を推奨
- **1 (中リスク)**: イベント発行関連のテストはモック設定が複雑になる可能性

## 6) レビュアーチェックリスト（最小）
- [ ] LinkModuleServiceの主要メソッド（retrieve, list, create, dismiss, delete, softDelete, restore）のテストケースが網羅されているか
- [ ] LinkServiceのCRUD操作のテストケースが網羅されているか
- [ ] generateEntityでのエンティティ生成ロジックがカバーされているか
- [ ] generateGraphQLSchemaでの型変換とスキーマ生成がカバーされているか
- [ ] MigrationsExecutionPlannerの各アクション（create, update, delete, noop, notify）がカバーされているか
- [ ] 異常系（エラーハンドリング）のテストケースが含まれているか
- [ ] 境界値（空配列、単一要素、複合キー）のテストケースが含まれているか
- [ ] 読み取り専用リンク（isReadOnlyLink）の特別な処理がカバーされているか
