用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/kasiopeiya/claude-dev-template --skill cdk-imp命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
RFC等の入力資料をもとに対話しながら要求を引き出し、requirements.md(PRD)を作成する。顧客が書いた「解決策」を「目的」に還元し、「制約」とされた事項が本当に制約かを疑いながら、目的の認識を合わせて要件を確定する。要求分析・要件定義・requirements.md作成を依頼されたとき、または「elicit-requirements」と指示されたときに使う。
要件定義書(docs/requirements.md)を requirements-doc-policy の基準でレビューし、凍結してよい品質かを合否判定する。「requirements-review」「要件定義書をレビューして」と指示されたとき。
アプリの設計・アーキテクチャの「質」をレビューする。UI/DB/外部サービス/言語などの詳細を差し替え可能に保てているかを検査する。「arch-review」「設計をレビューして」「アーキテクチャをレビューして」と指示されたとき。
正在显示 SKILL.md
| name | cdk-imp |
| description | AWS CDK実装専用コマンド。GitHub IssueからCDK実装・テスト・CDK合成まで自動実行する。CDKインフラの実装を依頼されたときに使用すること。 |
| argument-hint | <Issue番号> |
指定されたGitHub Issueを元に、設計書を参照してAWS CDKコード(infra/ 配下)のみを実装し、テスト・合成まで実行してください。
それ以外のディレクトリ(アプリケーションコード app/)は絶対に実装・変更しないでください。
Issueのタスク一覧のうち、CDK/インフラに関するタスクのみを対象としてください。
完了したCDKタスクのみ gh issue edit コマンドでGitHub Issueのチェックリストを更新してください。
Issue指定:
引数が空の場合は、ユーザーにIssue番号を確認してください。
GitHub IssueからAWS CDK実装を実行する。 設計書を参照し、CDKルールを遵守したインフラコードを実装、テスト・合成まで実行する。
infra/ 配下のみを対象とするapp/)は絶対に実装・変更しないことタスクプロンプトの「Issue指定:」の値を確認する。値が含まれている場合はそれを使用し、空の場合のみAskUserQuestionでユーザーに確認する。
question: "CDK実装を行うIssueを指定してください。Issue番号(例: 1)を入力してください。"
header: "Issue指定"
options: [
{ label: "その他(手動入力)", description: "Issue番号を入力してください" }
]
multiSelect: false
取得情報:
Bash ツールで GitHub Issue の情報を取得:
gh issue view {番号} --json number,title,body,labels
エラーハンドリング:
Issue が見つからない場合:
=== Issue 読み込みエラー ===
Error: Issue #{番号} が見つかりませんでした。
gh issue list で利用可能なIssue一覧を確認してください。
→ AskUserQuestion で再入力を促す(最大3回まで)
body が空の場合:
=== Issue 読み込みエラー ===
Error: Issue #{番号} の本文が空です。
→ 処理を中止
取得したJSONから以下の情報を抽出:
1. Issue番号とタイトル
.number フィールド.title フィールド2. ラベル
.labels[].name フィールドから抽出
[{name: "cdk"}, {name: "infra"}] → ['cdk', 'infra']3. スコープ/作業項目
body内 ## スコープ / 作業項目 セクションの内容全体を抽出
4. タスク一覧(CDKタスクのみ抽出)
body内 ## タスク一覧 セクションのチェックリスト(- [ ] 形式)を抽出し、CDK/インフラに関するタスクのみをフィルタリングする。
フィルタリングルール:
5. 対象ファイル
body内 ## 📂 コンテキスト または ### 対象ファイル セクションから抽出
<CDKディレクトリ>/lib/{スタックファイル名}.ts<CDKディレクトリ>/lib/constructs/*.ts(新規Constructの場合)出力例:
=== Issue解析結果 ===
Issue: #1 CDK初期構築
ラベル: cdk, infra
対象ファイル: <CDKディレクトリ>/lib/{スタックファイル名}.ts
対象タスク(CDK/インフラ関連):
- [ ] CDKコード実装
- [ ] スナップショットテスト更新
- [ ] cdk synth確認
スキップするタスク(アプリケーションコード関連):
- [ ] Lambdaハンドラー実装 → 対象外
- [ ] フロントエンド実装 → 対象外
スコープ:
- CDKプロジェクト初期化
- スタック基本構成作成
抽出した情報をユーザーに提示し、開始確認:
question: "以下の内容でCDK実装を開始します。よろしいですか?"
header: "実装開始確認"
options: [
{ label: "はい、開始します", description: "CDK実装を開始します" },
{ label: "いいえ、中止します", description: "処理を中止します" }
]
設計ハブ docs/design-hub.md を Read し、リンクされている個別設計書の一覧と概要を取得する。
特定ロジック:
結果例:
対象設計書:
- {インフラ設計書}(常に対象)
- {バックエンド設計書}(Lambda関数関連の場合)
ステップ2-1 で特定したインフラ設計書を Read ツールで読み込み、以下を抽出する:
ステップ2-1 で対象に加えた関連設計書(バックエンド/フロントエンド等)があれば、その内容も Read ツールで読み込む。
file_path: .claude/rules/cdk.md
確認事項:
import { aws_s3 as s3 } from 'aws-cdk-lib'設計書とCDKルールから抽出した情報を整理してユーザーに提示:
=== 実装方針サマリー ===
設計判断:
- Lambda Function URLs を使用(ADR-001)
- OAC + IAM認証(ADR-004)
CDKルール:
- L2 Construct優先
- Import形式: aws_s3 as s3
- IAM Role自動生成を活用
循環参照回避戦略:
- SSM Parameter Store の利用
- ワイルドカードリソース指定
- L1 Construct(Cfn)の活用
AskUserQuestion で実装方針を確認:
question: "上記の実装方針でCDKコードを実装します。よろしいですか?"
header: "実装方針確認"
options: [
{ label: "はい、この方針で実装します", description: "CDKコード実装に進みます" },
{ label: "いいえ、修正が必要です", description: "実装方針を見直します" }
]
Issue内の「📂 コンテキスト」または「### 対象ファイル」セクションから対象ファイルを取得:
<CDKディレクトリ>/lib/{スタックファイル名}.ts(メインスタック)Read ツールで対象ファイルを読み込み:
file_path: <CDKディレクトリ>/lib/{スタックファイル名}.ts
確認事項:
実装前に以下を確認:
Import形式:
// ✅ 正しい形式
import { aws_s3 as s3 } from 'aws-cdk-lib'
import { aws_lambda as lambda } from 'aws-cdk-lib'
// ❌ 避けるべき形式
import * as s3 from 'aws-cdk-lib/aws-s3'
Import順序:
// 1. 標準ライブラリ
import * as path from 'path'
// 2. サードパーティライブラリ(CDK含む)
import { Stack, StackProps, RemovalPolicy } from 'aws-cdk-lib'
import { aws_s3 as s3 } from 'aws-cdk-lib'
// 3. 自作モジュール
import { AppParameter } from '../parameter'
L2 Construct優先:
IAM Role自動生成:
Edit または Write ツールで実装:
実装ガイドライン:
コメント・JSDoc は docs/policy/code-comment-policy.md に従う(実装コメントは WHY、doc comment は契約。コードが語る WHAT/HOW は書かない)。
実装例:
/**
* S3バケットを作成
* @param {string} bucketName - バケット名
* @returns {s3.Bucket} - 作成されたS3バケット
*/
private createS3Bucket(bucketName: string): s3.Bucket {
// 1. S3バケット作成(L2 Construct使用)
const bucket = new s3.Bucket(this, 'FrontendBucket', {
bucketName: bucketName,
removalPolicy: RemovalPolicy.DESTROY,
autoDeleteObjects: true,
})
// 2. バケットポリシー設定(OAC用)
// 循環参照回避のため、CloudFront作成後にL1 Constructで設定
return bucket
}
実装したコードをユーザーに提示:
=== CDK実装完了 ===
実装ファイル: <CDKディレクトリ>/lib/{スタックファイル名}.ts
変更内容:
- Lambda Function作成(NodejsFunction使用)
- Lambda Function URL設定
- CloudFront Origin設定
- IAMポリシー自動生成
AskUserQuestion で確認:
question: "実装内容を確認してください。このままテストに進みますか?"
header: "実装確認"
options: [
{ label: "はい、テストに進みます", description: "npm testを実行します" },
{ label: "いいえ、修正が必要です", description: "実装を見直します" }
]
重要な考慮事項:
tsc を別途走らせる意味がないBash ツールでCDKテストを実行:
cd <CDKディレクトリ> && npm test
成功判定: 終了コード 0
成功時:
✅ Tests Passed
All CDK tests passed successfully.
失敗時:
テストエラーメッセージを解析:
スナップショット不一致の検出:
その他のエラー:
スナップショット不一致が検出された場合:
⚠️ Snapshot Mismatch Detected
スナップショットテストが不一致です。以下のファイルで差分が検出されました:
<CDKディレクトリ>/test/__snapshots__/{テストファイル名}.snap
差分内容:
- CloudFormation テンプレートの変更
- リソース追加/削除
スナップショットを更新しますか?
AskUserQuestion でスナップショット更新の可否を確認:
question: "スナップショットを更新しますか?(実装内容が正しい場合は更新してください)"
header: "スナップショット更新"
options: [
{ label: "はい、更新します", description: "npm test -- -u を実行してスナップショットを更新" },
{ label: "いいえ、実装を修正します", description: "CDKコードを見直します" }
]
multiSelect: false
「はい」選択時:
cd <CDKディレクトリ> && npm test -- -u
スナップショット更新後、再度テスト実行:
cd <CDKディレクトリ> && npm test
「いいえ」選択時:
Phase 3に戻り、実装を修正
テスト失敗(スナップショット以外)の場合:
🔴 Test Failed
以下のエラーが検出されました:
<CDKディレクトリ>/lib/{スタックファイル名}.ts:42:7
Error: Property 'functionUrl' does not exist on type 'Function'.
原因:
Lambda Function URLはNodejsFunctionのプロパティとして直接アクセスできません。
修正方法:
1. FunctionUrl Constructを使用してURLを作成
2. または、addFunctionUrl() メソッドを使用
修正しますか?
AskUserQuestion で修正するか確認:
question: "上記のエラーを修正しますか?"
header: "エラー修正"
options: [
{ label: "はい、修正します", description: "エラーを修正してテストを再実行" },
{ label: "いいえ、中止します", description: "処理を中止します" }
]
「はい」選択時: Phase 3に戻り、実装を修正
エラーハンドリング:
Bash ツールでCloudFormationテンプレート合成:
cd <CDKディレクトリ> && npx cdk synth
成功判定: 終了コード 0
成功時:
✅ CDK Synth Passed
CloudFormation テンプレートが正常に生成されました:
cdk.out/{アプリ名}.template.json
cdk.out/{アプリ名}.assets.json
cdk.out/manifest.json
cdk.out/tree.json
失敗時:
合成エラーメッセージを解析:
循環参照エラーの検出:
その他のエラー:
循環参照エラーが検出された場合、循環しているリソースと原因を示し、references/error-handling-and-constraints.md の「循環参照の回避」から該当パターンの回避方法を提示する。
AskUserQuestion で修正方法を確認:
question: "循環参照を回避するため、以下のいずれかの方法で修正します。どれを選択しますか?"
header: "循環参照回避"
options: [
{ label: "SSM Parameter Store を利用", description: "CloudFront URLをSSMに保存し、Lambda側で参照" },
{ label: "ワイルドカード指定", description: "IAMポリシーで '*' を使用" },
{ label: "L1 Construct 活用", description: "Cfn を使用して後付け設定" },
{ label: "手動で修正", description: "処理を中止して手動で修正" }
]
選択に応じて Phase 3 に戻り、実装を修正
合成エラー(循環参照以外)の場合:
🔴 Synth Failed
以下のエラーが検出されました:
Error: Bucket name must be lowercase
原因:
S3バケット名に大文字が含まれています。
修正方法:
bucketName を小文字に変更してください。
AskUserQuestion で修正するか確認:
question: "上記のエラーを修正しますか?"
header: "エラー修正"
options: [
{ label: "はい、修正します", description: "エラーを修正してcdk synthを再実行" },
{ label: "いいえ、中止します", description: "処理を中止します" }
]
「はい」選択時: Phase 3に戻り、実装を修正
references/report-format.md のフォーマットに従い、実装サマリー・テスト結果・Next Steps をまとめて出力する。
Bash ツールで実装・テスト・CDK合成に関するタスクを完了マークに更新:
BODY=$(gh issue view {番号} --json body --jq '.body')
# CDK実装・テスト・synth完了に関連するタスクを完了マークに更新
UPDATED_BODY=$(echo "$BODY" | sed 's/- \[ \] \(.*実装.*\)/- [x] \1/g' \
| sed 's/- \[ \] \(.*テスト.*\)/- [x] \1/g' \
| sed 's/- \[ \] \(.*synth.*\)/- [x] \1/g')
gh issue edit {番号} --body "$UPDATED_BODY"
該当するタスクが見つからない場合はスキップ(エラーにしない)。