AWS CDK CLIのcdk initでカスタムプロジェクト名を指定可能に
新機能の背景
これまで cdk init コマンドで新しいCDKプロジェクトを作成する際、プロジェクト名はディレクトリ名から自動的に決定されていました。例えば、my-app というディレクトリで cdk init を実行すると、スタッククラス名やその他のプロジェクトコードは自動的に MyApp として生成されていました。
このため、ディレクトリ名とプロジェクト内のコード名を別にしたい場合や、既存のディレクトリ構造内でCDKプロジェクトを初期化する際に、明示的にプロジェクト名を指定できないという不便さがありました。この機能追加は、GitHub Issue #990 で要望されていたものです。
新機能の概要
AWS CDK CLI バージョン 2.1101.0 から、cdk init コマンドに新しいオプション --project-name(エイリアス -n)が追加されました。これにより、プロジェクトの初期化時に、ディレクトリ名とは独立してプロジェクト名を明示的に指定できるようになりました。
主な変更点:
--project-nameまたは-nオプションを使用してカスタムプロジェクト名を指定可能- 指定されたプロジェクト名は、スタッククラス名やその他のプロジェクト内の命名に反映されます
- このオプションを指定しない場合は、従来通りディレクトリ名がプロジェクト名として使用されます
使い方
基本的な使用方法
# --project-name オプションを使用
cdk init app --language typescript --project-name my-custom-project
# 短縮形 -n を使用
cdk init app --language python -n my-custom-project
具体的な使用例
TypeScript の場合:
# "infrastructure" ディレクトリでプロジェクトを初期化するが、
# プロジェクト名は "ecommerce-backend" にする
mkdir infrastructure
cd infrastructure
cdk init app --language typescript --project-name ecommerce-backend
この場合、生成されるスタックファイルは lib/ecommerce-backend-stack.ts となり、クラス名は EcommerceBackendStack になります。
Python の場合:
# "cdk" ディレクトリでプロジェクトを初期化するが、
# プロジェクト名は "data-pipeline" にする
mkdir cdk
cd cdk
cdk init app --language python -n data-pipeline
テストでの確認
実装されたテストケースによると、以下のような動作が確認されています:
// プロジェクト名を "my-project" に指定した場合
cdk init app --language typescript --project-name my-project
// 生成されるスタックファイル: lib/my-project-stack.ts
// スタッククラス名: MyProjectStack
注意点
オプション指定なしの場合は従来通り
--project-name オプションを指定しない場合、従来通りディレクトリ名からプロジェクト名が決定されます。既存の動作に影響はありません。
命名規則
指定したプロジェクト名は decamelize 処理されます(コードの実装より):
- 入力:
myProject→ 出力:my-project - 入力:
MyCustomApp→ 出力:my-custom-app
そのため、最初からケバブケース(ハイフン区切り)で指定することを推奨します。
対応言語
この機能は CDK がサポートするすべての言語テンプレートで使用できます:
- TypeScript
- JavaScript
- Python
- Java
- C#
- F#
- Go
バージョン要件
この機能は AWS CDK CLI バージョン 2.1101.0 以降で利用可能です。使用する前に CDK CLI を最新バージョンにアップデートしてください:
npm install -g aws-cdk@latest
他のオプションとの互換性
--project-name は他の cdk init オプションと組み合わせて使用できます:
--language, -l: プログラミング言語の指定--generate-only: Git リポジトリや依存関係のインストールをスキップ--from-path: カスタムテンプレートの使用--template-path: マルチテンプレートリポジトリ内の特定のテンプレート--package-manager: TypeScript/JavaScript プロジェクトのパッケージマネージャー指定
補完情報の出典