---
generated_at: 2026-02-24 19:30:00
metrics:
  claims_total: 170
  claims_with_evidence: 170
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：utils 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：170 / 170、根拠なし：0
- 優先レビュー（高）
  1. **金額計算関連（BigNumber, MathBN）**：eコマースの重要機能
  2. **認証関連（generateJwtToken）**：セキュリティに関わる機能
  3. **エラーハンドリング（MedusaError）**：アプリケーション全体で使用

## 2) 参照した情報（Evidence一覧）
> 以下に実際に解析したソースコードファイルを列挙します。

### common ユーティリティ群
- E-01: `packages/core/utils/src/common/is-email.ts`
- E-02: `packages/core/utils/src/common/is-defined.ts`
- E-03: `packages/core/utils/src/common/is-boolean.ts`
- E-04: `packages/core/utils/src/common/is-object.ts`
- E-05: `packages/core/utils/src/common/is-string.ts`
- E-06: `packages/core/utils/src/common/is-date.ts`
- E-07: `packages/core/utils/src/common/is-present.ts`
- E-08: `packages/core/utils/src/common/is-big-number.ts`
- E-09: `packages/core/utils/src/common/deep-copy.ts`
- E-10: `packages/core/utils/src/common/deep-equal-obj.ts`
- E-11: `packages/core/utils/src/common/deep-merge.ts`
- E-12: `packages/core/utils/src/common/array-difference.ts`
- E-13: `packages/core/utils/src/common/array-intersection.ts`
- E-14: `packages/core/utils/src/common/deduplicate.ts`
- E-15: `packages/core/utils/src/common/group-by.ts`
- E-16: `packages/core/utils/src/common/partition-array.ts`
- E-17: `packages/core/utils/src/common/errors.ts`
- E-18: `packages/core/utils/src/common/to-camel-case.ts`
- E-19: `packages/core/utils/src/common/to-snake-case.ts`
- E-20: `packages/core/utils/src/common/to-kebab-case.ts`
- E-21: `packages/core/utils/src/common/to-pascal-case.ts`
- E-22: `packages/core/utils/src/common/camel-to-snake-case.ts`
- E-23: `packages/core/utils/src/common/to-handle.ts`
- E-24: `packages/core/utils/src/common/validate-handle.ts`
- E-25: `packages/core/utils/src/common/generate-entity-id.ts`
- E-26: `packages/core/utils/src/common/simple-hash.ts`
- E-27: `packages/core/utils/src/common/remove-undefined.ts`
- E-28: `packages/core/utils/src/common/remove-nullisih.ts`
- E-29: `packages/core/utils/src/common/lower-case-first.ts`
- E-30: `packages/core/utils/src/common/upper-case-first.ts`
- E-31: `packages/core/utils/src/common/plurailze.ts`
- E-32: `packages/core/utils/src/common/trim-zeros.ts`
- E-33: `packages/core/utils/src/common/is-truthy.ts`
- E-34: `packages/core/utils/src/common/is-error-like.ts`
- E-35: `packages/core/utils/src/common/normalize-csv-value.ts`
- E-36: `packages/core/utils/src/common/get-set-difference.ts`
- E-37: `packages/core/utils/src/common/get-duplicates.ts`
- E-38: `packages/core/utils/src/common/compress-name.ts`
- E-39: `packages/core/utils/src/common/promise-all.ts`
- E-40: `packages/core/utils/src/common/build-query.ts`
- E-41: `packages/core/utils/src/common/object-from-string-path.ts`
- E-42: `packages/core/utils/src/common/object-to-string-path.ts`
- E-43: `packages/core/utils/src/common/filter-object-by-keys.ts`
- E-44: `packages/core/utils/src/common/omit-deep.ts`
- E-45: `packages/core/utils/src/common/retry-execution.ts`
- E-46: `packages/core/utils/src/common/execute-with-concurrency.ts`
- E-47: `packages/core/utils/src/common/stringify-circular.ts`

### totals（金額計算）
- E-48: `packages/core/utils/src/totals/big-number.ts`
- E-49: `packages/core/utils/src/totals/math.ts`

### modules-sdk
- E-50: `packages/core/utils/src/modules-sdk/build-query.ts`
- E-51: `packages/core/utils/src/modules-sdk/definition.ts`

### auth
- E-52: `packages/core/utils/src/auth/token.ts`

### dml（Data Modeling Language）
- E-53: `packages/core/utils/src/dml/entity-builder.ts`

### product
- E-54: `packages/core/utils/src/product/validators.ts`

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

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

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | validateEmail: 有効なメールアドレスの検証 | E-01 | ○ |
| C-02 | validateEmail: 大文字を小文字に変換 | E-01 | ○ |
| C-03 | validateEmail: 不正なメールでエラー | E-01 | ○ |
| C-04 | validateEmail: 空文字でエラー | E-01 | ○ |
| C-05 | isDefined: 定義された値でtrue | E-02 | ○ |
| C-06 | isDefined: undefinedでfalse | E-02 | ○ |
| C-07 | isDefined: nullでtrue | E-02 | ○ |
| C-08 | isBoolean: trueでtrue | E-03 | ○ |
| C-09 | isBoolean: falseでtrue | E-03 | ○ |
| C-10 | isBoolean: 文字列'true'でfalse | E-03 | ○ |
| C-11 | isBoolean: nullでfalse | E-03 | ○ |
| C-12 | isObject: プレーンオブジェクトでtrue | E-04 | ○ |
| C-13 | isObject: 配列でfalse | E-04 | ○ |
| C-14 | isObject: nullでfalse | E-04 | ○ |
| C-15 | isObject: Dateでfalse | E-04 | ○ |
| C-16 | isString: 文字列でtrue | E-05 | ○ |
| C-17 | isString: 空文字でtrue | E-05 | ○ |
| C-18 | isString: 数値でfalse | E-05 | ○ |
| C-19 | isDate: 有効なDateでtrue | E-06 | ○ |
| C-20 | isDate: 日付文字列でtrue | E-06 | ○ |
| C-21 | isDate: 無効な日付でfalse | E-06 | ○ |
| C-22 | isDate: nullでfalse | E-06 | ○ |
| C-23 | isPresent: 値存在でtrue | E-07 | ○ |
| C-24 | isPresent: 空文字でfalse | E-07 | ○ |
| C-25 | isPresent: 空配列でfalse | E-07 | ○ |
| C-26 | isPresent: 空オブジェクトでfalse | E-07 | ○ |
| C-27 | isPresent: Mapでtrue | E-07 | ○ |
| C-28 | isPresent: 空Setでfalse | E-07 | ○ |
| C-29 | isBigNumber: BigNumberRawValueでtrue | E-08 | ○ |
| C-30 | isBigNumber: 数値でfalse | E-08 | ○ |
| C-31 | deepCopy: オブジェクトのディープコピー | E-09 | ○ |
| C-32 | deepCopy: 配列のディープコピー | E-09 | ○ |
| C-33 | deepCopy: 循環参照対応 | E-09 | ○ |
| C-34 | deepCopy: null処理 | E-09 | ○ |
| C-35 | deepEqualObj: 同一内容でtrue | E-10 | ○ |
| C-36 | deepEqualObj: ネスト比較 | E-10 | ○ |
| C-37 | deepEqualObj: キー数違いでfalse | E-10 | ○ |
| C-38 | deepEqualObj: 型違いでfalse | E-10 | ○ |
| C-39 | deepMerge: ディープマージ | E-11 | ○ |
| C-40 | deepMerge: ネストマージ | E-11 | ○ |
| C-41 | deepMerge: 上書き動作 | E-11 | ○ |
| C-42 | arrayDifference: 差分取得 | E-12 | ○ |
| C-43 | arrayDifference: 空配列処理 | E-12 | ○ |
| C-44 | arrayDifference: 重複除去 | E-12 | ○ |
| C-45 | arrayIntersection: 共通要素取得 | E-13 | ○ |
| C-46 | arrayIntersection: 共通要素なし | E-13 | ○ |
| C-47 | deduplicate: 重複除去 | E-14 | ○ |
| C-48 | deduplicate: 空配列処理 | E-14 | ○ |
| C-49 | groupBy: グループ化 | E-15 | ○ |
| C-50 | groupBy: 属性なし処理 | E-15 | ○ |
| C-51 | partitionArray: パーティション | E-16 | ○ |
| C-52 | partitionArray: 空配列処理 | E-16 | ○ |
| C-53 | MedusaError: エラー生成 | E-17 | ○ |
| C-54 | MedusaError.isMedusaError: true判定 | E-17 | ○ |
| C-55 | MedusaError.isMedusaError: false判定 | E-17 | ○ |
| C-56 | toCamelCase: スネーク→キャメル | E-18 | ○ |
| C-57 | toCamelCase: 既存キャメル維持 | E-18 | ○ |
| C-58 | toCamelCase: ケバブ→キャメル | E-18 | ○ |
| C-59 | toSnakeCase: キャメル→スネーク | E-19 | ○ |
| C-60 | toSnakeCase: パスカル→スネーク | E-19 | ○ |
| C-61 | kebabCase: キャメル→ケバブ | E-20 | ○ |
| C-62 | kebabCase: スペース→ハイフン | E-20 | ○ |
| C-63 | toPascalCase: スネーク→パスカル | E-21 | ○ |
| C-64 | camelToSnakeCase: キャメル→スネーク | E-22 | ○ |
| C-65 | toHandle: URL friendly変換 | E-23 | ○ |
| C-66 | toHandle: アクセント除去 | E-23 | ○ |
| C-67 | toHandle: 特殊文字除去 | E-23 | ○ |
| C-68 | isValidHandle: 有効ハンドルでtrue | E-24 | ○ |
| C-69 | isValidHandle: 大文字でfalse | E-24 | ○ |
| C-70 | isValidHandle: 先頭ハイフンでfalse | E-24 | ○ |
| C-71 | generateEntityId: 新規ID生成 | E-25 | ○ |
| C-72 | generateEntityId: 既存ID使用 | E-25 | ○ |
| C-73 | generateEntityId: プレフィックス付与 | E-25 | ○ |
| C-74 | simpleHash: ハッシュ生成 | E-26 | ○ |
| C-75 | simpleHash: 一貫性確認 | E-26 | ○ |
| C-76 | removeUndefined: undefined除去 | E-27 | ○ |
| C-77 | removeNullish: nullish除去 | E-28 | ○ |
| C-78 | removeNullish: 空オブジェクト処理 | E-28 | ○ |
| C-79 | lowerCaseFirst: 先頭小文字 | E-29 | ○ |
| C-80 | upperCaseFirst: 先頭大文字 | E-30 | ○ |
| C-81 | pluralize: 複数形変換 | E-31 | ○ |
| C-82 | pluralize: 不可算名詞処理 | E-31 | ○ |
| C-83 | trimZeros: 末尾ゼロ除去 | E-32 | ○ |
| C-84 | trimZeros: 整数変換 | E-32 | ○ |
| C-85 | trimZeros: 指数表記処理 | E-32 | ○ |
| C-86 | isTruthy: 文字列'true'でtrue | E-33 | ○ |
| C-87 | isTruthy: 大文字小文字不問 | E-33 | ○ |
| C-88 | isTruthy: boolean trueでtrue | E-33 | ○ |
| C-89 | isTruthy: undefinedでfalse | E-33 | ○ |
| C-90 | isErrorLike: Errorでtrue | E-34 | ○ |
| C-91 | isErrorLike: エラー類似でtrue | E-34 | ○ |
| C-92 | isErrorLike: 通常オブジェクトでfalse | E-34 | ○ |
| C-93 | normalizeCSVValue: 末尾\\r除去 | E-35 | ○ |
| C-94 | normalizeCSVValue: 非文字列維持 | E-35 | ○ |
| C-95 | getSetDifference: Set差分 | E-36 | ○ |
| C-96 | getDuplicates: 重複取得 | E-37 | ○ |
| C-97 | getDuplicates: 重複なし | E-37 | ○ |
| C-98 | compressName: 制限以下維持 | E-38 | ○ |
| C-99 | compressName: 長い名前圧縮 | E-38 | ○ |
| C-100 | promiseAll: Promise解決 | E-39 | ○ |
| C-101 | promiseAll: Promise拒否 | E-39 | ○ |
| C-102 | promiseAll: エラー集約 | E-39 | ○ |
| C-103 | promiseAll: 空配列処理 | E-39 | ○ |
| C-104 | buildSelects: Select構築 | E-40 | ○ |
| C-105 | buildRelations: Relations構築 | E-40 | ○ |
| C-106 | buildOrder: Order構築 | E-40 | ○ |
| C-107 | objectFromStringPath: パス変換 | E-41 | ○ |
| C-108 | objectToStringPath: 逆パス変換 | E-42 | ○ |
| C-109 | objectToStringPath: 空オブジェクト | E-42 | ○ |
| C-110 | filterObjectByKeys: キーフィルタ | E-43 | ○ |
| C-111 | filterObjectByKeys: ネストフィルタ | E-43 | ○ |
| C-112 | omitDeep: 深い除外 | E-44 | ○ |
| C-113 | omitDeep: falsy処理 | E-44 | ○ |
| C-114 | retryExecution: 成功時 | E-45 | ○ |
| C-115 | retryExecution: リトライ成功 | E-45 | ○ |
| C-116 | retryExecution: 最大リトライ | E-45 | ○ |
| C-117 | retryExecution: リトライスキップ | E-45 | ○ |
| C-118 | executeWithConcurrency: 並行実行 | E-46 | ○ |
| C-119 | executeWithConcurrency: 並行数超過 | E-46 | ○ |
| C-120 | stringifyCircular: 循環参照対応 | E-47 | ○ |
| C-121 | stringifyCircular: 通常文字列化 | E-47 | ○ |

### totals（金額計算）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-122 | BigNumber.constructor: 数値から作成 | E-48 | ○ |
| C-123 | BigNumber.constructor: 文字列から作成 | E-48 | ○ |
| C-124 | BigNumber.constructor: RawValueから作成 | E-48 | ○ |
| C-125 | BigNumber.constructor: 無効値エラー | E-48 | ○ |
| C-126 | BigNumber.numeric: 数値取得 | E-48 | ○ |
| C-127 | BigNumber.toJSON: JSON変換 | E-48 | ○ |
| C-128 | MathBN.convert: 変換処理 | E-49 | ○ |
| C-129 | MathBN.convert: null変換 | E-49 | ○ |
| C-130 | MathBN.add: 加算 | E-49 | ○ |
| C-131 | MathBN.sub: 減算 | E-49 | ○ |
| C-132 | MathBN.mult: 乗算 | E-49 | ○ |
| C-133 | MathBN.div: 除算 | E-49 | ○ |
| C-134 | MathBN.abs: 絶対値 | E-49 | ○ |
| C-135 | MathBN.mod: 剰余 | E-49 | ○ |
| C-136 | MathBN.min: 最小値 | E-49 | ○ |
| C-137 | MathBN.max: 最大値 | E-49 | ○ |
| C-138 | MathBN.gt: 大なり比較 | E-49 | ○ |
| C-139 | MathBN.gte: 以上比較 | E-49 | ○ |
| C-140 | MathBN.lt: 小なり比較 | E-49 | ○ |
| C-141 | MathBN.lte: 以下比較 | E-49 | ○ |
| C-142 | MathBN.eq: 等価比較 | E-49 | ○ |

### modules-sdk

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-143 | buildQuery: クエリ構築 | E-50 | ○ |
| C-144 | buildQuery: $or処理 | E-50 | ○ |
| C-145 | buildQuery: ページネーション | E-50 | ○ |
| C-146 | buildQuery: $orバリデーション | E-50 | ○ |

### auth

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-147 | generateJwtToken: トークン生成 | E-52 | ○ |
| C-148 | generateJwtToken: secret必須 | E-52 | ○ |
| C-149 | generateJwtToken: expiresIn必須 | E-52 | ○ |

### dml（Data Modeling Language）

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-150 | EntityBuilder.define: エンティティ定義 | E-53 | ○ |
| C-151 | EntityBuilder.define: 暗黙プロパティ禁止 | E-53 | ○ |
| C-152 | EntityBuilder.id: IDプロパティ | E-53 | ○ |
| C-153 | EntityBuilder.id: プレフィックス付ID | E-53 | ○ |
| C-154 | EntityBuilder.text: テキストプロパティ | E-53 | ○ |
| C-155 | EntityBuilder.boolean: ブールプロパティ | E-53 | ○ |
| C-156 | EntityBuilder.number: 数値プロパティ | E-53 | ○ |
| C-157 | EntityBuilder.bigNumber: BigNumberプロパティ | E-53 | ○ |
| C-158 | EntityBuilder.dateTime: 日時プロパティ | E-53 | ○ |
| C-159 | EntityBuilder.json: JSONプロパティ | E-53 | ○ |
| C-160 | EntityBuilder.enum: Enumプロパティ | E-53 | ○ |
| C-161 | EntityBuilder.hasOne: hasOneリレーション | E-53 | ○ |
| C-162 | EntityBuilder.hasMany: hasManyリレーション | E-53 | ○ |
| C-163 | EntityBuilder.belongsTo: belongsToリレーション | E-53 | ○ |
| C-164 | EntityBuilder.manyToMany: manyToManyリレーション | E-53 | ○ |

### product

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-165 | booleanString: true変換 | E-54 | ○ |
| C-166 | booleanString: false変換 | E-54 | ○ |
| C-167 | booleanString: 無効値エラー | E-54 | ○ |
| C-168 | numericString: 数値→文字列変換 | E-54 | ○ |
| C-169 | CreateProduct: 有効データバリデーション | E-54 | ○ |
| C-170 | CreateProduct: 必須フィールドエラー | E-54 | ○ |

## 4) 不足情報（Unknown / Missing）
- なし：全てのテストケースに対してソースコードの根拠が確認されました

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全てのテストケースがソースコードに基づいて生成されています
- 注意点:
  - BigNumber/MathBN関連は金額計算に使用されるため、境界値テストの追加検討を推奨
  - generateJwtToken関連はセキュリティに関わるため、トークン有効期限やペイロード検証の追加検討を推奨

## 6) レビュアーチェックリスト（最小）
- [ ] 金額計算関連（BigNumber, MathBN）のテストケースが十分か確認
- [ ] 認証関連（generateJwtToken）のセキュリティ観点が網羅されているか確認
- [ ] エラーハンドリング（MedusaError）のエラータイプが正しく分類されているか確認
- [ ] バリデーション関連（validateEmail, isValidHandle等）の境界値が十分か確認
- [ ] 非同期処理（promiseAll, retryExecution, executeWithConcurrency）のタイムアウト・エラー処理が網羅されているか確認
- [ ] DMLエンティティビルダーのリレーション定義が実際の使用パターンを反映しているか確認
