Skip to content

Commit 6d5cc8a

Browse files
committed
docs: reflect pre-commit hooks and script convention in v3 docs
The root package.json no longer has task alias scripts (dev, build, lint, test, etc.) — they were replaced with simple-git-hooks + lint-staged in f764b29, but the v3.0.0 docs were not updated. - design.ja.md: add script convention subsection documenting per-package task names with `pnpm -r run` and pre-commit hook setup - migration-prompt.ja.md: add simple-git-hooks + lint-staged setup to Phase 2-3, fix stale `pnpm run` to `pnpm -r run` in checkpoints
1 parent 50af6f8 commit 6d5cc8a

2 files changed

Lines changed: 40 additions & 26 deletions

File tree

.serverless-full-stack-webapp-starter-kit/docs/v3.0.0/design.ja.md

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -135,37 +135,38 @@ hash 検証を不採用にした理由は [ADR-001 の Consequences](adr-001-dsq
135135

136136
`check-dsql-compat.ts` が drizzle-kit generate の出力を DSQL 互換に自動変換する。変換ルール:
137137

138-
| 変換 | 入力パターン | 出力 |
139-
|------|-------------|------|
140-
| ステートメント区切り | `--> statement-breakpoint\n` | `\n\n`(空行。ランナーがこの空行で SQL を分割する) |
141-
| INDEX → ASYNC | `CREATE INDEX` / `CREATE UNIQUE INDEX` | `CREATE INDEX ASYNC` / `CREATE UNIQUE INDEX ASYNC`(既に ASYNC の場合は変換しない) |
142-
| CONSTRAINT FK 行の除去 | `,\n CONSTRAINT "..." FOREIGN KEY (...) REFERENCES "..."("...")` | 行ごと除去(カンマも含めて削除) |
143-
| 無名 FK 行の除去 | `,\n FOREIGN KEY (...) REFERENCES "..."("...")` | 行ごと除去 |
144-
| インライン REFERENCES の除去 | `"col" text NOT NULL REFERENCES "Table"("id")` | `"col" text NOT NULL`(REFERENCES 部分のみ除去し、カラム定義は保持) |
138+
| 変換 | 入力パターン | 出力 |
139+
| ---------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
140+
| ステートメント区切り | `--> statement-breakpoint\n` | `\n\n`(空行。ランナーがこの空行で SQL を分割する) |
141+
| INDEX → ASYNC | `CREATE INDEX` / `CREATE UNIQUE INDEX` | `CREATE INDEX ASYNC` / `CREATE UNIQUE INDEX ASYNC`(既に ASYNC の場合は変換しない) |
142+
| CONSTRAINT FK 行の除去 | `,\n CONSTRAINT "..." FOREIGN KEY (...) REFERENCES "..."("...")` | 行ごと除去(カンマも含めて削除) |
143+
| 無名 FK 行の除去 | `,\n FOREIGN KEY (...) REFERENCES "..."("...")` | 行ごと除去 |
144+
| インライン REFERENCES の除去 | `"col" text NOT NULL REFERENCES "Table"("id")` | `"col" text NOT NULL`(REFERENCES 部分のみ除去し、カラム定義は保持) |
145145

146146
FK 除去が2パターンに分かれる理由: drizzle-kit は FK を2通りの形式で出力する。CONSTRAINT 行(`CREATE TABLE` 末尾の独立した制約定義)とインライン REFERENCES(カラム定義の末尾に付加)。CONSTRAINT 行は行ごと除去するが、インライン REFERENCES はカラム定義を壊さないよう REFERENCES 部分のみを除去する必要がある。除去順序も重要で、CONSTRAINT 行を先に除去しないと、インライン REFERENCES の正規表現が CONSTRAINT 行内の REFERENCES にもマッチしてしまい、不完全な行が残る。
147147

148148
### SQL バリデーション
149149

150150
ランナーは各 SQL 文の実行前に DSQL 非互換パターンを検証する。検出対象:
151151

152-
| パターン | 理由 |
153-
|---------|------|
154-
| `CREATE INDEX``ASYNC` がない | DSQL は同期 INDEX を許可しない |
155-
| `REFERENCES` / `FOREIGN KEY` | DSQL は FK 非サポート |
156-
| `ALTER COLUMN ... TYPE` / `SET DATA TYPE` | ALTER TABLE の公式構文に含まれない |
157-
| `DROP COLUMN` | ALTER TABLE の公式構文に含まれない |
158-
| `SET NOT NULL` / `DROP NOT NULL` | ALTER TABLE の公式構文に含まれない |
159-
| `SET DEFAULT` / `DROP DEFAULT` | ALTER TABLE の公式構文に含まれない |
160-
| `DROP CONSTRAINT` | ALTER TABLE の公式構文に含まれない |
161-
| `SERIAL` / `BIGSERIAL` / `SMALLSERIAL` | DSQL 非サポート型 |
162-
| `TRUNCATE` | DSQL 非サポート。`DELETE FROM` で代替 |
152+
| パターン | 理由 |
153+
| ----------------------------------------- | ------------------------------------- |
154+
| `CREATE INDEX``ASYNC` がない | DSQL は同期 INDEX を許可しない |
155+
| `REFERENCES` / `FOREIGN KEY` | DSQL は FK 非サポート |
156+
| `ALTER COLUMN ... TYPE` / `SET DATA TYPE` | ALTER TABLE の公式構文に含まれない |
157+
| `DROP COLUMN` | ALTER TABLE の公式構文に含まれない |
158+
| `SET NOT NULL` / `DROP NOT NULL` | ALTER TABLE の公式構文に含まれない |
159+
| `SET DEFAULT` / `DROP DEFAULT` | ALTER TABLE の公式構文に含まれない |
160+
| `DROP CONSTRAINT` | ALTER TABLE の公式構文に含まれない |
161+
| `SERIAL` / `BIGSERIAL` / `SMALLSERIAL` | DSQL 非サポート型 |
162+
| `TRUNCATE` | DSQL 非サポート。`DELETE FROM` で代替 |
163163

164164
### .ts マイグレーション
165165

166166
テーブル再作成(DROP COLUMN、ALTER COLUMN TYPE 等)で3,000行超のバッチデータ移行が必要な場合に使用する。`export default async function(client: PoolClient)` をエクスポートする。
167167

168168
制約:
169+
169170
- Lambda 最大実行時間は15分。これを超えるマイグレーションは Step Functions 等の別メカニズムが必要(ランナーのスコープ外)
170171
- Lambda 環境では `.ts` ファイルは Dockerfile 内で esbuild により `.mjs` に事前トランスパイルが必要
171172
- CLI 環境では `tsx``.ts` を直接実行可能
@@ -195,6 +196,14 @@ DSQL 非互換パターンをコーディング時とマイグレーション時
195196

196197
選定理由は [ADR-002](adr-002-pnpm-workspaces.ja.md) を参照。以下は実装上の制約と対処。
197198

199+
### スクリプト規約
200+
201+
各サブパッケージが定型タスク名(`dev``build``test:unit``lint``check:ci` 等)を自身の `package.json` に定義し、ルートからは `pnpm -r run <task>` で一括実行する。ルート `package.json` にはタスクのエイリアススクリプトを置かない — 各パッケージが自身のスクリプトを持つため冗長であり、`--if-present` 付きの間接呼び出しはデバッグを困難にする。
202+
203+
pre-commit フックは `simple-git-hooks` + `lint-staged` で構成し、ステージ済みファイルに oxlint/oxfmt を実行した後、全パッケージの `test:unit` を実行する。`prepare` スクリプトにより `pnpm install` 時にフックが自動インストールされる。
204+
205+
### Docker ビルドの制約
206+
198207
strict モードでの Docker ビルドには4つの罠がある(詳細は [ADR-002 の Consequences](adr-002-pnpm-workspaces.ja.md) を参照):
199208

200209
1. `pnpm install --filter` は推移的依存をホイストしない → `--filter` なしで全依存インストール

.serverless-full-stack-webapp-starter-kit/docs/v3.0.0/migration-prompt.ja.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,16 @@ v3 キットのディレクトリ構造を参照し、ユーザーのプロジ
151151

152152
pnpm はデフォルトで strict モード(`shamefully-hoist=false`)。`.npmrc` を作成してはならない — `shamefully-hoist=true` にすると Docker ビルドで未宣言依存が隠蔽される。
153153

154-
### 2-3. リンター移行(ESLint → oxlint)
154+
### 2-3. リンター移行 + pre-commit フック導入(ESLint → oxlint)
155155

156156
1.`package.json` から `eslint``prettier``eslint-config-next`、関連パッケージを削除
157157
2. v3 キットからコピー済みの `oxlintrc.json` を確認(DSQL 非互換 import のブロックルールが含まれている)
158-
3. ルートの `package.json` の lint スクリプトを v3 キットに合わせて更新
158+
3. ルートの `package.json` を v3 キットに合わせて更新:
159+
- ルートレベルのスクリプトエイリアス(`dev``build``lint``test` 等)を削除。各サブパッケージが自身のスクリプトを持つため不要
160+
- `simple-git-hooks``lint-staged``devDependencies` に追加
161+
- `"prepare": "simple-git-hooks"` スクリプトを追加(`pnpm install` 時にフックを自動インストール)
162+
- `simple-git-hooks``lint-staged` の設定を追加(v3 キットのルート `package.json` を参照)
163+
4. `pnpm install` を実行してフックをインストール
159164

160165
### 2-4. npm/npx の残存を除去
161166

@@ -175,7 +180,7 @@ rg 'npm |npx ' -g '!node_modules' -g '!pnpm-lock.yaml'
175180
### チェックポイント
176181

177182
- `pnpm install` が終了コード 0 で完了
178-
- `pnpm run lint` が終了コード 0(oxlint の `typeCheck: true` が型チェックも行うため `tsc --noEmit` は不要)
183+
- `pnpm -r run lint` が終了コード 0(oxlint の `typeCheck: true` が型チェックも行うため `tsc --noEmit` は不要)
179184
- ESLint/Prettier の import が残っていない
180185
- `rg 'npm |npx ' -g '!node_modules' -g '!pnpm-lock.yaml'` で npm/npx の残存がないことを確認
181186

@@ -261,8 +266,8 @@ bash scripts/dsql.sh delete --region <region>
261266

262267
### チェックポイント
263268

264-
- `pnpm run lint` が終了コード 0(oxlint が DSQL 非互換パターンを検出しないことを確認)
265-
- `pnpm run build` が終了コード 0
269+
- `pnpm -r run lint` が終了コード 0(oxlint が DSQL 非互換パターンを検出しないことを確認)
270+
- `pnpm -r run build` が終了コード 0
266271
- Prisma の import が残っていない(`rg '@prisma|from.*prisma' --type ts` が結果なし)
267272
- 開発用 DSQL クラスタでマイグレーションが成功し、アプリが動作する
268273

@@ -290,7 +295,7 @@ webapp と async-job の Dockerfile を v3 のパターンに更新する。v3
290295
### チェックポイント
291296

292297
- `cd apps/cdk && pnpm run build` が終了コード 0
293-
- `pnpm run test` が終了コード 0(CDK テストがある場合)
298+
- `pnpm -r run test:unit` が終了コード 0(CDK テストがある場合)
294299

295300
### 4-3. 段階的ビルド・動作確認
296301

@@ -299,10 +304,10 @@ webapp と async-job の Dockerfile を v3 のパターンに更新する。v3
299304
#### 4-3a. lint → build
300305

301306
```bash
302-
pnpm run lint
307+
pnpm -r run lint
303308
pnpm --filter webapp run build
304309
cd apps/cdk && pnpm run build
305-
pnpm run test # CDK テストがある場合
310+
pnpm -r run test:unit # CDK テストがある場合
306311
```
307312

308313
#### 4-3b. ローカル Docker イメージビルド

0 commit comments

Comments
 (0)