From aws-cdk-unit-testing
AWS CDK のテストを書く / レビューする / 戦略を考える全ての場面で必ず使用する。「CDK のテスト書いて」「このスタックのテスト書きたい」「CDK のテストはどう書けばいい?」「Stack / Construct のテストどうしよう?」などの依頼にも該当する。スナップショット / Fine-grained assertions / バリデーションの 3 種類のうちどれを書くべきか・書かなくて良いかの判断基準とコード例を提供。加えて、機能フラグ(`cdk.json` の context)の実環境との統一や、`NodejsFunction` の esbuild バンドルをスキップしてテストを高速化するなど、**テスト環境セットアップの Tips** も扱う。具体的には `*.test.ts` 編集時、`Template.fromStack` や `aws-cdk-lib/assertions` 使用時、Stack/Construct の単体テスト新規追加時、既存テストレビュー時、テストが遅い / スナップショットが実デプロイと食い違うといった相談時に該当する。
How this skill is triggered — by the user, by Claude, or both
Slash command
/aws-cdk-unit-testing:aws-cdk-unit-testingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
AWS CDK における単体テストは「全てのリソースに細かく書く」のではなく、**コードの性質に応じて適切なテストを選ぶ**ことが重要。本 Skill は「どの場面でどのテストを書くべきか」「どの場面では書かなくて良いか」の判断基準を提供する。
AWS CDK における単体テストは「全てのリソースに細かく書く」のではなく、コードの性質に応じて適切なテストを選ぶことが重要。本 Skill は「どの場面でどのテストを書くべきか」「どの場面では書かなくて良いか」の判断基準を提供する。
| テスト種別 | 目的 | 必須度 |
|---|---|---|
| スナップショット | 合成された CloudFormation テンプレートの差分検出 | ★★★ ほぼ必須 |
| Fine-grained assertions | テンプレートの一部に対する細かい assertions | ★★☆ 選別して書く |
| バリデーション | props のバリデーション処理の挙動検証 | ★★☆ 実装時のみ必須 |
CDK コードを見る
│
├─ Stack / Construct がある?
│ └─ Yes → スナップショットテストを書く(原則必須)
│
├─ 手続き的な処理がある?
│ ├─ for / map でリソース生成 → Fine-grained (ループ)
│ ├─ if 分岐でリソース/プロパティ → Fine-grained (条件分岐, Match.absent)
│ ├─ addPropertyOverride → Fine-grained (override)
│ └─ addDependency → Fine-grained (依存関係)
│
├─ props 経由で値を流している?
│ └─ Yes → Fine-grained (値の流入確認、props そのものを参照)
│
├─ 特に保証したい「意思表示」レベルの定義がある?
│ └─ Yes → Fine-grained (Match.anyValue で値変動に強くする選択肢も)
│
├─ props に対してバリデーション処理を実装している?
│ └─ Yes → バリデーションテスト(各バリデーションごとに 1 テスト)
│
└─ 上記いずれでもない「宣言的な定義」のみ?
└─ Fine-grained を**書かない**選択肢を強く検討(スナップショットで十分)
加えて、テスト環境のセットアップで考慮すべきポイント:
cdk.json の context にプロジェクト固有の機能フラグを設定している? → App の props に context を注入(references/setup-tips.md)NodejsFunction (esbuild バンドル) を多用していてテストが遅い? → BUNDLING_STACKS: [] でスキップ(references/setup-tips.md)| コードパターン | 書くべきテスト | 参照 |
|---|---|---|
| Stack / Construct 全体 | スナップショット | references/snapshot.md |
for / map でリソース生成 | Fine-grained (ループ) | references/fine-grained.md |
if (props.xxx) 分岐 | Fine-grained (条件分岐) + Match.absent | references/fine-grained.md |
addPropertyOverride | Fine-grained (override 確認) | references/fine-grained.md |
addDependency | Fine-grained (DependsOn 確認) | references/fine-grained.md |
| props → リソースプロパティ | Fine-grained (値の流入確認) | references/fine-grained.md |
| 要件上必ず保証したい定義 | Fine-grained (意思表示) | references/fine-grained.md |
| props バリデーション実装 | バリデーション | references/validation.md |
| 宣言的なリソース定義のみ | Fine-grained は書かない | references/pitfalls.md |
宣言的な定義に対する Fine-grained テストの量産 リソース定義とほぼ同じコードがテストに出来上がる。スナップショットで代替する。
意味の不透明な大きな個数を resourceCountIs で指定する
L2 Construct は内部で追加リソースを自動生成することがあり、resourceCountIs('AWS::Logs::LogGroup', 6) のような数値だけ見ても後から内訳がわからず認知負荷を招く。一方、リソースの有無を 0 / 1 で確認する用途は OK。プロパティで絞り込む resourcePropertiesCountIs も推奨。詳しくは references/pitfalls.md。
全 Construct に網羅的に Construct 単位のテストを書く 前提として、実デプロイ構成である Stack の単体テストは原則必須(最低限スナップショット 1 本でも価値がある)。その上で、Construct 単位のテストを全 Construct に書くと Stack のテストと重複しメンテが大変になるため、再利用性を担保したい Construct のみに絞る。
導入の負荷を抑えたい場合、まずスナップショットテストから。合成テンプレートの差分検出だけで CDK バージョンアップ時のリグレッション検知に強力に効く。
Match.* 使い分けToken.isUnresolved 含む)Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub go-to-k/cdk-skills --plugin aws-cdk-unit-testing