---
generated_at: 2026-03-01 12:30:00
metrics:
  claims_total: 63
  claims_with_evidence: 63
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：db-vercel-postgres 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：63 / 63、根拠なし：0
- 優先レビュー（高）
  1. **connect関数のエラーハンドリング**：複雑な条件分岐があるため重点確認推奨
  2. **vercelPostgresAdapter関数の設定オプション**：多数のオプション処理
  3. **ローカル/リモート接続判定ロジック**：URL解析に基づく分岐

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

- E-01: `packages/db-vercel-postgres/src/index.ts` - メインエントリーポイント、vercelPostgresAdapter関数定義
- E-02: `packages/db-vercel-postgres/src/connect.ts` - connect関数定義、DB接続ロジック
- E-03: `packages/db-vercel-postgres/src/types.ts` - Args型、VercelPostgresAdapter型定義
- E-04: `packages/db-vercel-postgres/src/predefinedMigrations/blocks-as-json.ts` - ブロックJSONマイグレーション定義
- E-05: `packages/db-vercel-postgres/src/predefinedMigrations/relationships-v2-v3.ts` - V2-V3マイグレーション定義
- E-06: `packages/db-vercel-postgres/src/exports/migration-utils.ts` - マイグレーションユーティリティre-export
- E-07: `packages/db-vercel-postgres/src/exports/types-deprecated.ts` - 非推奨型re-export
- E-08: `packages/db-vercel-postgres/src/drizzle-proxy/index.ts` - drizzle-orm re-export
- E-09: `packages/db-vercel-postgres/src/drizzle-proxy/node-postgres.ts` - node-postgres re-export
- E-10: `packages/db-vercel-postgres/src/drizzle-proxy/pg-core.ts` - pg-core re-export
- E-11: `packages/db-vercel-postgres/src/drizzle-proxy/relations.ts` - relations re-export

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

### index.ts - vercelPostgresAdapter関数

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | デフォルト引数でアダプターオブジェクトが正しく生成される | E-01: L69-71 `args = {}`, `postgresIDType = args.idType \|\| 'serial'` | ○ |
| C-02 | idType='uuid'指定でdefaultIDTypeが'text'になる | E-01: L70-71 `payloadIDType = postgresIDType === 'serial' ? 'number' : 'text'` | ○ |
| C-03 | idType='serial'指定でdefaultIDTypeが'number'になる | E-01: L70-71 同上 | ○ |
| C-04 | allowIDOnCreate=trueが正しく設定される | E-01: L72 `allowIDOnCreate = args.allowIDOnCreate ?? false` | ○ |
| C-05 | schemaNameが指定された場合にpgSchemaが正しく設定される | E-01: L85-86 `if (args.schemaName) { adapterSchema = pgSchema(args.schemaName) }` | ○ |
| C-06 | schemaNameが未指定の場合にデフォルトのpgSchemaが設定される | E-01: L87-88 `else { adapterSchema = { enum: pgEnum, table: pgTable... } }` | ○ |
| C-07 | extensionsが正しくReduce処理される | E-01: L91-94 `(args.extensions ?? []).reduce<Record<string, boolean>>((acc, name) => { acc[name] = true; return acc }, {})` | ○ |
| C-08 | extensions未指定の場合に空オブジェクトが設定される | E-01: L91 `args.extensions ?? []` から空配列→空オブジェクト | ○ |
| C-09 | localesSuffixが正しく設定される | E-01: L136 `localesSuffix: args.localesSuffix \|\| '_locales'` | ○ |
| C-10 | localesSuffix未指定の場合にデフォルト値が設定される | E-01: L136 同上 | ○ |
| C-11 | relationshipsSuffixが正しく設定される | E-01: L148 `relationshipsSuffix: args.relationshipsSuffix \|\| '_rels'` | ○ |
| C-12 | relationshipsSuffix未指定の場合にデフォルト値が設定される | E-01: L148 同上 | ○ |
| C-13 | versionsSuffixが正しく設定される | E-01: L157 `versionsSuffix: args.versionsSuffix \|\| '_v'` | ○ |
| C-14 | versionsSuffix未指定の場合にデフォルト値が設定される | E-01: L157 同上 | ○ |
| C-15 | transactionOptions=falseでdefaultBeginTransactionが使用される | E-01: L160-161 `args.transactionOptions === false ? defaultBeginTransaction() : beginTransaction` | ○ |
| C-16 | transactionOptionsがオブジェクトの場合beginTransactionが使用される | E-01: L160-161 同上 | ○ |
| C-17 | blocksAsJSON=trueが正しく設定される | E-01: L110 `blocksAsJSON: args.blocksAsJSON ?? false` | ○ |
| C-18 | disableCreateDatabase=trueが正しく設定される | E-01: L114 `disableCreateDatabase: args.disableCreateDatabase ?? false` | ○ |
| C-19 | forceUseVercelPostgres=trueが正しく設定される | E-01: L123 `forceUseVercelPostgres: args.forceUseVercelPostgres ?? false` | ○ |
| C-20 | prodMigrationsが正しく設定される | E-01: L142 `prodMigrations: args.prodMigrations` | ○ |
| C-21 | afterSchemaInit/beforeSchemaInitが正しく設定される | E-01: L107-109 `afterSchemaInit: args.afterSchemaInit ?? []`, `beforeSchemaInit: args.beforeSchemaInit ?? []` | ○ |
| C-22 | adapter関数がpayloadオブジェクトを受け取り正しく初期化される | E-01: L74 `function adapter({ payload }: { payload: Payload })` | ○ |
| C-23 | migrationDirがfindMigrationDirで解決される | E-01: L75 `const migrationDir = findMigrationDir(args.migrationDir)` | ○ |
| C-24 | initializingプロミスが正しく生成される | E-01: L80-83 `const initializing = new Promise<void>((res, rej) => {...})` | ○ |
| C-25 | SQL文が正しくフォーマットされる（sanitizeStatements） | E-01: L97-103 `sanitizeStatements` 関数定義 | ○ |
| C-26 | statementsが空配列の場合の処理 | E-01: L103 `statements.join('\n')` で空文字列結合 | ○ |

### connect.ts - connect関数

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-27 | ローカルホスト接続でpg.Poolが使用される | E-02: L28-37 `['127.0.0.1', 'localhost'].includes(new URL(connectionString).hostname)` → `new pg.Pool(...)` | ○ |
| C-28 | 127.0.0.1接続でpg.Poolが使用される | E-02: L31 同上 | ○ |
| C-29 | リモートホスト接続でVercelPoolが使用される | E-02: L38-40 `else { client = this.poolOptions ? new VercelPool(...) : sql }` | ○ |
| C-30 | forceUseVercelPostgres=trueの場合ローカルでもVercelPoolが使用される | E-02: L28-29 `if (!this.forceUseVercelPostgres && connectionString && ...` の条件 | ○ |
| C-31 | poolOptions未指定の場合sql(グローバル)が使用される | E-02: L39 `this.poolOptions ? new VercelPool(this.poolOptions) : sql` | ○ |
| C-32 | poolOptions指定の場合VercelPoolが生成される | E-02: L39 同上 | ○ |
| C-33 | drizzleインスタンスが正しく初期化される | E-02: L44-48 `this.drizzle = drizzle({ client, logger, schema: this.schema })` | ○ |
| C-34 | readReplicasが設定されている場合withReplicasが適用される | E-02: L50-61 `if (this.readReplicaOptions) {...withReplicas(this.drizzle, readReplicas as any)...}` | ○ |
| C-35 | PAYLOAD_DROP_DATABASE=trueの場合dropDatabaseが呼ばれる | E-02: L63-68 `if (!hotReload) { if (process.env.PAYLOAD_DROP_DATABASE === 'true') { await this.dropDatabase(...) } }` | ○ |
| C-36 | hotReload=trueの場合dropDatabaseが呼ばれない | E-02: L63 `if (!hotReload)` の条件 | ○ |
| C-37 | database does not existエラーでcreateDatabase処理が行われる | E-02: L72-82 `if (err.message?.match(/database .* does not exist/i) && !this.disableCreateDatabase)` | ○ |
| C-38 | database does not existエラーでdisableCreateDatabase=trueの場合エラーがスローされる | E-02: L72 `!this.disableCreateDatabase` の条件、L83-88でelseブロック | ○ |
| C-39 | 接続エラー時にrejectInitializingが呼ばれる | E-02: L90-92 `if (typeof this.rejectInitializing === 'function') { this.rejectInitializing() }` | ○ |
| C-40 | 接続エラー時に適切なエラーメッセージでエラーがスローされる | E-02: L93 `throw new Error('Error: cannot connect to Postgres: ${err.message}')` | ○ |
| C-41 | createExtensionsが呼び出される | E-02: L96 `await this.createExtensions()` | ○ |
| C-42 | 開発環境でpushDevSchemaが呼び出される | E-02: L99-105 `if (process.env.NODE_ENV !== 'production' && process.env.PAYLOAD_MIGRATING !== 'true' && this.push !== false) { await pushDevSchema(...) }` | ○ |
| C-43 | NODE_ENV=productionでpushDevSchemaが呼び出されない | E-02: L99 `process.env.NODE_ENV !== 'production'` の条件 | ○ |
| C-44 | PAYLOAD_MIGRATING=trueでpushDevSchemaが呼び出されない | E-02: L100 `process.env.PAYLOAD_MIGRATING !== 'true'` の条件 | ○ |
| C-45 | push=falseでpushDevSchemaが呼び出されない | E-02: L101 `this.push !== false` の条件 | ○ |
| C-46 | 接続成功後にresolveInitializingが呼ばれる | E-02: L107-109 `if (typeof this.resolveInitializing === 'function') { this.resolveInitializing() }` | ○ |
| C-47 | 本番環境でprodMigrationsが存在する場合migrateが呼ばれる | E-02: L111-113 `if (process.env.NODE_ENV === 'production' && this.prodMigrations) { await this.migrate(...) }` | ○ |
| C-48 | 本番環境でprodMigrationsが未定義の場合migrateが呼ばれない | E-02: L111 `this.prodMigrations` の条件チェック | ○ |
| C-49 | options引数が未指定の場合デフォルト値が使用される | E-02: L14-16 `options = { hotReload: false }` デフォルト引数 | ○ |
| C-50 | POSTGRES_URL環境変数がconnectionStringとして使用される | E-02: L25 `this.poolOptions?.connectionString ?? process.env.POSTGRES_URL` | ○ |

### predefinedMigrations

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-51 | buildDynamicPredefinedBlocksToJsonMigrationが正しいパッケージ名で呼び出される | E-04: L5-7 `buildDynamicPredefinedBlocksToJsonMigration({ packageName: '@payloadcms/db-vercel-postgres' })` | ○ |
| C-52 | imports文字列が正しく定義されている | E-05: L1 `const imports = 'import { migratePostgresV2toV3 } from ...'` | ○ |
| C-53 | upSQL文字列が正しく定義されている | E-05: L2-8 `const upSQL = '...'` | ○ |

### exports

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | migratePostgresV2toV3がre-exportされる | E-06: L1 `export { migratePostgresV2toV3 } from '@payloadcms/drizzle/postgres'` | ○ |
| C-55 | Args型がdeprecated警告付きでre-exportされる | E-07: L9-10 `@deprecated` コメント付き `export type Args = _Args` | ○ |
| C-56 | GeneratedDatabaseSchema型がdeprecated警告付きでre-exportされる | E-07: L13-14 同上 | ○ |
| C-57 | VercelPostgresAdapter型がdeprecated警告付きでre-exportされる | E-07: L17-18 同上 | ○ |

### drizzle-proxy

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 | drizzle-ormがre-exportされる | E-08: L1 `export * from 'drizzle-orm'` | ○ |
| C-59 | drizzle-orm/node-postgresがre-exportされる | E-09: L1 `export * from 'drizzle-orm/node-postgres'` | ○ |
| C-60 | drizzle-orm/pg-coreがre-exportされる | E-10: L1 `export * from 'drizzle-orm/pg-core'` | ○ |
| C-61 | drizzle-orm/relationsがre-exportされる | E-11: L1 `export * from 'drizzle-orm/relations'` | ○ |

### types.ts

| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-62 | Args型が必須プロパティを持つ | E-03: L15-82 すべてのプロパティが `?` でオプショナル | ○ |
| C-63 | VercelPostgresAdapter型がBasePostgresAdapterを拡張する | E-03: L94-99 `type VercelPostgresAdapter = {...} & BasePostgresAdapter` | ○ |

## 4) 不足情報（Unknown / Missing）
- 特になし。すべてのテストケースはソースコードの実装を根拠として生成されています。

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: drizzle-proxyおよびexportsのre-export（単純な再エクスポート）
- **0（低リスク）**: types.ts の型定義検証（TypeScript コンパイラで検証可能）
- **1（中リスク）**: vercelPostgresAdapter関数の各設定オプション処理（多数のオプション）
- **2（高リスク）**: connect関数のエラーハンドリングとDB自動作成ロジック（複雑な条件分岐、外部依存）
- **2（高リスク）**: ローカル/リモートホスト判定ロジック（URL解析に依存）

## 6) レビュアーチェックリスト（最小）
- [ ] connect関数のエラーハンドリングパスがすべてカバーされているか確認
- [ ] ローカルホスト判定の条件（localhost, 127.0.0.1）が網羅されているか確認
- [ ] forceUseVercelPostgresフラグの動作が正しく検証されているか確認
- [ ] 環境変数（PAYLOAD_DROP_DATABASE, PAYLOAD_MIGRATING, NODE_ENV）に依存するテストケースの前提条件が明確か確認
- [ ] transactionOptions=falseの場合の挙動が正しくテストされているか確認
- [ ] readReplicasオプションのテストケースが十分か確認（複数レプリカの場合など）
