aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit
test(cdk): スナップショットシリアライザのデッドパターン削除と軽微な堅牢化
- Dominant language
- TypeScript
- Stars
- 229
- Forks
- 45
- Avg merge
- 1m
- Merged PRs (30d)
- 4
Description
## 背景
`apps/cdk/test/snapshot-plugin.ts` は、`cdk synth` が出力する非決定的トークン(アセットハッシュ、Lambda Version 論理 ID 末尾のハッシュ等)を redact して CloudFormation スナップショットを安定させるシリアライザです。現在の合成テンプレートに照らすと、実際には何もマッチしていない置換パターン(デッド)が複数あり、加えて軽微な堅牢化の余地があります。
## 現状パターンと合成出力の突き合わせ
```ts
.replace(/([A-Fa-f0-9]{64}.zip)/, 'REDACTED')
.replace(/([A-Fa-f0-9]{64}.mjs)/, 'REDACTED')
.replace(/.*cdk-hnb659fds-container-assets-.*/, 'REDACTED')
.replace(/webapp-starter-[0-9a-z]*/, 'REDACTED')
.replace(/(.*CurrentVersion).*/, '$1REDACTED')
```
合成テンプレート(`cdk.out/*.template.json`)を確認した結果:
### 削除候補(デッド)
- **`webapp-starter-[0-9a-z]*`**: 合成出力に `webapp-starter-` 形の文字列は出現しない。`[0-9a-z]*` は 0 文字にマッチするため実質何も redact していない。削除してよい。
- **`.*cdk-hnb659fds-container-assets-.*`**: 合成テンプレートに `cdk-hnb659fds-container-assets-` を含む文字列が存在しない(この構成のコンテナイメージはデプロイ時ビルドで作成される ECR リポジトリを参照し、bootstrap の container-assets リポジトリを参照しないため)。デッド。削除を検討。
### 維持(誤って削除しないこと)
- **`.zip` / `.mjs`**: Lambda バンドルアセットの S3 キーのハッシュを redact。LIVE。
- **`(.*CurrentVersion).*`**: Lambda Version 論理 ID 末尾のハッシュを redact。アプリ/依存の変更で変わる値のため維持が必要。LIVE。
### 軽微な堅牢化(任意)
- `.zip` / `.mjs` パターンの `.` が未エスケープで任意 1 文字にマッチする → `\.` へ。
- 同パターンに `/g` が無く、1 つの文字列値に 64hex が 2 つ以上現れると 2 個目以降が漏れる(現状は該当文字列 0 件のため実害はなく、保険)。
- `(.*CurrentVersion).*` は貪欲マッチ。意図を明確化するなら `CurrentVersion[A-Za-z0-9]*$` 等へアンカー。
## 受け入れ条件
- デッドパターン削除後、`apps/cdk` の `test:unit`(vitest run)でスナップショット差分が発生しない(=当該パターンが何も変えていなかったことの確認)。
- 堅牢化を入れる場合はスナップショットを `-u` で再生成し、diff が意図どおりであることを確認。
Contributor guide
Research direction
Start with apps/cdk/test/snapshot-plugin.ts and compare its serializer patterns with the generated cdk.out/*.template.json output. Run the apps/cdk test:unit command (vitest run) after removing the identified dead patterns; if hardening is included, regenerate snapshots with -u and inspect the diff. Done means the tests pass without unintended snapshot changes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- aws, node.js, typescript
- Domain
- infrastructure, testing
- Issue type
- Refactor
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 76/100