Skip to content

Commit bd5d6ac

Browse files
committed
docs: document migration-runner responsibility separation in plan
1 parent b909331 commit bd5d6ac

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

.kiro/specs/pnpm-workspaces/plan.md

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,19 +98,45 @@ compose.yaml の PostgreSQL を廃止し、開発用 DSQL クラスタを使用
9898

9999
## migration-runner の設計
100100

101+
### 責務の分離
102+
103+
3 つの責務を明確に分離する。各層は隣接する層だけに依存し、飛び越えた依存を持たない。
104+
105+
1. **マイグレーションコアロジック**`packages/db/src/migrate.ts`, `check-dsql-compat.ts`
106+
- `pg.Pool` を受け取り、SQL ファイルを 1 文ずつ BEGIN/COMMIT で実行する
107+
- drizzle-kit 出力の DSQL 自動変換(statement-breakpoint → 空行、INDEX → ASYNC、FK 除去)
108+
- CDK にも Drizzle にも依存しない。ORM に関わらず使える汎用層
109+
- 将来的に独立パッケージとして切り出し可能な境界
110+
111+
2. **Lambda ハンドラー**`apps/cdk/lib/constructs/dsql-migrator/handler.ts`
112+
- コアロジックの `migrate()` を呼ぶ薄いラッパー。Lambda イベントを受けて Pool を生成し、結果を返すだけ
113+
- CDK Construct と 1:1 で対応するが、ロジックは持たない
114+
115+
3. **CDK Construct**`apps/cdk/lib/constructs/dsql-migrator/index.ts`
116+
- DockerImageFunction + CDK Trigger でデプロイ時自動実行を構成する
117+
- Database Construct から endpoint と IAM 権限を受け取る
118+
- マイグレーションの中身には関与しない
119+
120+
この分離により:
121+
- コアロジックは Drizzle 以外の ORM(Prisma、手書き SQL)でも利用可能
122+
- Lambda ハンドラーは CDK 以外のデプロイツール(Terraform、SAM)でも利用可能
123+
- CDK Construct はマイグレーション SQL の生成方法に依存しない
124+
101125
### 配置
102126

103127
`packages/db` にコアロジック・CLI・マイグレーション SQL を同居させる。スキーマ定義とマイグレーションが同一パッケージに閉じ、`pnpm --filter @repo/db run migrate` でローカル実行可能。
104128

105129
```
106130
packages/db/
107131
src/
108-
schema.ts # Drizzle スキーマ定義
109-
client.ts # DSQL クライアント(IAM 認証)
110-
migrate.ts # マイグレーションコアロジック(Pool を受け取る、環境非依存)
111-
cli.ts # CLI エントリポイント(cli.ts → migrate.ts)
112-
migrations/ # SQL ファイル
113-
package.json # scripts: { "migrate": "tsx src/cli.ts" }
132+
schema.ts # Drizzle スキーマ定義
133+
client.ts # DSQL クライアント(IAM 認証)
134+
migrate.ts # マイグレーションコアロジック(Pool を受け取る、環境非依存)
135+
check-dsql-compat.ts # drizzle-kit 出力の DSQL 自動変換 + バリデーション
136+
cli.ts # CLI エントリポイント(cli.ts → migrate.ts)
137+
drizzle.config.ts # drizzle-kit 設定(generate 用、DB 接続不要)
138+
migrations/ # SQL ファイル + meta/ (drizzle-kit snapshot)
139+
package.json # scripts: { "generate": "...", "migrate": "..." }
114140
```
115141

116142
CDK 側は `apps/cdk/lib/constructs/dsql-migrator/` に Lambda ハンドラー(handler.ts)と Construct を配置。handler.ts は `@repo/db` の migrate() を import する薄いラッパー。現行の `event-bus/handler.mjs` と同じパターン。将来的に独立 Construct として切り出す余地を残す。

0 commit comments

Comments
 (0)