---
generated_at: 2026-02-24 12:30:00
metrics:
  claims_total: 88
  claims_with_evidence: 88
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：translation.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：88 / 88、根拠なし：0
- 優先レビュー（高）
  1. **なし**：全てのテストケースに根拠あり

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

- E-01: `packages/modules/translation/src/services/translation-module.ts` - TranslationModuleServiceクラスの実装
- E-02: `packages/modules/translation/src/models/translation.ts` - Translationモデル定義
- E-03: `packages/modules/translation/src/models/locale.ts` - Localeモデル定義
- E-04: `packages/modules/translation/src/models/settings.ts` - Settingsモデル定義
- E-05: `packages/modules/translation/src/utils/filter-translation-fields.ts` - filterTranslationFields関数
- E-06: `packages/modules/translation/src/utils/compute-translated-field-count.ts` - computeTranslatedFieldCount関数
- E-07: `packages/modules/translation/src/loaders/defaults.ts` - デフォルトロケールローダー
- E-08: `packages/modules/translation/src/index.ts` - モジュールエントリポイント
- E-09: `packages/modules/translation/src/types/index.ts` - 型定義

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

### TranslationModuleService クラス

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | constructorで依存関係が正しく注入される | E-01 (72-83行目) | ○ |
| C-02 | onApplicationStart_で翻訳可能エンティティの設定が同期される | E-01 (91-132行目) | ○ |
| C-03 | 既存設定が存在しないエンティティは新規作成される | E-01 (119-129行目) | ○ |
| C-04 | 削除されたエンティティの設定がis_active=falseになる | E-01 (107-117行目) | ○ |
| C-05 | getTranslatableFieldsで全エンティティの翻訳可能フィールドが取得できる | E-01 (134-151行目) | ○ |
| C-06 | getTranslatableFieldsで特定エンティティの翻訳可能フィールドが取得できる | E-01 (139行目 filters条件) | ○ |
| C-07 | is_active=falseのエンティティは空配列が返却される | E-01 (146-148行目 条件分岐) | ○ |
| C-08 | 設定が存在しない場合に空オブジェクトが返却される | E-01 (145行目 reduce初期値) | ○ |
| C-09 | getInactiveTranslatableFieldsで非活性フィールドが正しく取得できる | E-01 (153-176行目) | ○ |
| C-10 | DmlEntityに存在しないエンティティは結果に含まれない | E-01 (167-168行目 条件分岐) | ○ |
| C-11 | prepareFiltersでqパラメータがILIKE条件に変換される | E-01 (178-191行目) | ○ |
| C-12 | qが空の場合は変換されない | E-01 (183行目 if条件) | ○ |
| C-13 | 空オブジェクトが渡された場合の処理 | E-01 (190行目 return) | ○ |
| C-14 | retrieveTranslationでIDで翻訳が取得できる | E-01 (193-220行目) | ○ |
| C-15 | retrieveTranslationでtranslationsフィールドがフィルタされる | E-01 (218-219行目) | ○ |
| C-16 | 存在しないIDでエラーが発生する | E-01 (親クラスMedusaServiceの挙動) | ○ |
| C-17 | ensureReferenceFieldInConfigでselectにreferenceが追加される | E-01 (226-239行目) | ○ |
| C-18 | 既にreferenceがある場合は変更されない | E-01 (234-235行目 条件) | ○ |
| C-19 | selectが空配列の場合は変更されない | E-01 (229-231行目 条件) | ○ |
| C-20 | selectが未定義の場合は変更されない | E-01 (229行目 条件) | ○ |
| C-21 | listTranslationsで翻訳一覧が取得できる | E-01 (241-268行目) | ○ |
| C-22 | フィルタ条件で絞り込みができる | E-01 (248行目 preparedFilters) | ○ |
| C-23 | qパラメータで検索できる | E-01 (248行目、178-191行目) | ○ |
| C-24 | データが存在しない場合に空配列が返却される | E-01 (267行目 return) | ○ |
| C-25 | listAndCountTranslationsで翻訳一覧と件数が取得できる | E-01 (270-300行目) | ○ |
| C-26 | 件数が正確に返却される | E-01 (296-299行目) | ○ |
| C-27 | データが存在しない場合[空配列, 0]が返却される | E-01 (296-299行目) | ○ |
| C-28 | createLocalesでロケールが作成される | E-01 (302-335行目) | ○ |
| C-29 | 複数ロケールが一括作成される | E-01 (320行目 Array.isArray) | ○ |
| C-30 | ロケールコードが正規化される | E-01 (323行目 normalizeLocale) | ○ |
| C-31 | 重複コードでエラーが発生する | E-03 (16-19行目 uniqueインデックス) | ○ |
| C-32 | createTranslationsで翻訳が作成される | E-01 (337-382行目) | ○ |
| C-33 | 複数翻訳が一括作成される | E-01 (358行目 Array.isArray) | ○ |
| C-34 | locale_codeが正規化される | E-01 (365行目 normalizeLocale) | ○ |
| C-35 | translated_field_countが計算される | E-01 (366-369行目 computeTranslatedFieldCount) | ○ |
| C-36 | 重複キーでエラーが発生する | E-02 (38-43行目 uniqueインデックス) | ○ |
| C-37 | updateTranslationsで翻訳が更新される | E-01 (384-458行目) | ○ |
| C-38 | 複数翻訳が一括更新される | E-01 (406行目 Array.isArray) | ○ |
| C-39 | translated_field_countが再計算される | E-01 (433-445行目) | ○ |
| C-40 | referenceが未指定の場合はDBから取得される | E-01 (411-426行目) | ○ |
| C-41 | 存在しないIDでエラーが発生する | E-01 (親クラスMedusaServiceの挙動) | ○ |
| C-42 | createTranslationSettingsで設定が作成される | E-01 (460-480行目) | ○ |
| C-43 | 複数設定が一括作成される | E-01 (470行目 Array.isArray) | ○ |
| C-44 | 存在しないエンティティでエラーが発生する | E-01 (657-712行目 validateSettings) | ○ |
| C-45 | 無効なフィールドでエラーが発生する | E-01 (683-692行目) | ○ |
| C-46 | updateTranslationSettingsで設定が更新される | E-01 (482-535行目) | ○ |
| C-47 | 関連翻訳のtranslated_field_countが再計算される | E-01 (514-528行目) | ○ |
| C-48 | 無効なフィールドでエラーが発生する | E-01 (498行目 validateSettings) | ○ |
| C-49 | getStatisticsで翻訳統計が取得できる | E-01 (537-651行目) | ○ |
| C-50 | ロケール別統計が含まれる | E-01 (621-631行目 by_locale) | ○ |
| C-51 | 翻訳可能フィールドがないエンティティは0が返却される | E-01 (575-586行目) | ○ |
| C-52 | localesが空の場合にエラーが発生する | E-01 (544-548行目) | ○ |
| C-53 | entitiesが空の場合にエラーが発生する | E-01 (550-555行目) | ○ |
| C-54 | ロケールコードが正規化される | E-01 (558行目 normalizeLocale) | ○ |
| C-55 | validateSettingsで有効な設定がバリデーションを通過する | E-01 (695行目 条件) | ○ |
| C-56 | 無効なエンティティでエラーが発生する | E-01 (678-681行目) | ○ |
| C-57 | 無効なフィールドでエラーが発生する | E-01 (684-691行目) | ○ |
| C-58 | 複数エラーが同時に報告される | E-01 (696-711行目 mapでエラー結合) | ○ |
| C-59 | ensureEntityType_でIDからentity_typeが解決される | E-01 (721-753行目) | ○ |
| C-60 | entity_typeが既に設定されている場合は変更されない | E-01 (748-751行目) | ○ |
| C-61 | idがない設定（新規作成）の場合 | E-01 (731行目 条件) | ○ |

### ユーティリティ関数

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-62 | filterTranslationFieldsで許可されたフィールドのみがフィルタされる | E-05 (3-29行目) | ○ |
| C-63 | 設定にないreferenceは空オブジェクトになる | E-05 (9-11行目) | ○ |
| C-64 | 空配列のフィールド設定は空オブジェクトになる | E-05 (9行目 条件) | ○ |
| C-65 | 空の翻訳配列の処理 | E-05 (7行目 map) | ○ |
| C-66 | 複数翻訳が正しくフィルタされる | E-05 (7行目 map) | ○ |
| C-67 | computeTranslatedFieldCountで翻訳済みフィールド数が正しくカウントされる | E-06 (11-23行目) | ○ |
| C-68 | 未翻訳フィールドはカウントされない | E-06 (19-21行目 filter条件) | ○ |
| C-69 | nullの値はカウントされない | E-06 (21行目 value != null) | ○ |
| C-70 | 空文字はカウントされない | E-06 (21行目 value !== "") | ○ |
| C-71 | 'null'文字列はカウントされない | E-06 (21行目 value !== "null") | ○ |
| C-72 | translationsがnullの場合0が返却される | E-06 (15行目 条件) | ○ |
| C-73 | translationsがundefinedの場合0が返却される | E-06 (15行目 条件) | ○ |
| C-74 | translatableFieldsがnullの場合0が返却される | E-06 (15行目 条件) | ○ |
| C-75 | translatableFieldsが空配列の場合0が返却される | E-06 (15行目 ?.length) | ○ |

### ローダー

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-76 | loadDefaultsでデフォルトロケールがロードされる | E-07 (72-103行目) | ○ |
| C-77 | 既存ロケールはIDを保持してupsertされる | E-07 (85-94行目) | ○ |
| C-78 | ロケールコードが正規化される | E-07 (91行目 normalizeLocale) | ○ |
| C-79 | エラー発生時は警告ログが出力される | E-07 (98-101行目 catch) | ○ |

### モデル定義

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-80 | Translationモデル定義が正しい | E-02 (3-37行目) | ○ |
| C-81 | Translation一意制約が設定される | E-02 (40-42行目) | ○ |
| C-82 | Localeモデル定義が正しい | E-03 (3-14行目) | ○ |
| C-83 | Locale一意制約が設定される | E-03 (16-19行目) | ○ |
| C-84 | Settingsモデル定義が正しい | E-04 (6-27行目) | ○ |
| C-85 | Settings一意制約が設定される | E-04 (29-32行目) | ○ |
| C-86 | is_activeのデフォルト値がtrue | E-04 (26行目 default(true)) | ○ |
| C-87 | translated_field_countのデフォルト値が0 | E-02 (36行目 default(0)) | ○ |
| C-88 | TRANSLATION_MODULEが正しくエクスポートされる | E-08 (6行目) | ○ |

## 4) 不足情報（Unknown / Missing）
- なし：全てのテストケースに対してソースコードから根拠を確認済み

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全てのテストケースはソースコードに基づいており、根拠が明確

### 注意点
1. **統合テストの必要性**: MedusaServiceを継承した基本CRUD操作（delete、softDelete等）は親クラスの挙動に依存するため、統合テストでの確認が推奨される
2. **DBインデックスのテスト**: ユニーク制約のテストは実際のDB環境での確認が必要
3. **DmlEntityの依存**: `DmlEntity.getTranslatableEntities()`はグローバル状態に依存するため、モック化が必要

## 6) レビュアーチェックリスト（最小）
- [ ] TranslationModuleServiceの各メソッドについて、入力値と期待結果が妥当か確認
- [ ] 境界値テストケース（null, undefined, 空配列）が網羅されているか確認
- [ ] エラーハンドリングのテストケースが適切か確認
- [ ] MedusaServiceを継承したメソッド（親クラスの機能）のテストカバレッジを確認
- [ ] モデルのユニーク制約に関するテストが実環境で動作するか確認
