NTTテクノクロス株式会社の渡邉です。
今回はAWS CDKの動作環境をTypeScript+ESMにしようとした時の記録を残します。
ECMAScript Modules(ESM)とは
ECMAScript Modules(ESM)は、JavaScript公式のモジュール仕様で、ブラウザと Node.js の両方で機能する。Node.jsではデフォルトでCommonJSになってるし、AWS CDKが作るディレクトリも後方互換性を重視してCommonJS用になっている。とはいえ、現在はこちらが主流になっているようなので、可能ならば追従したい。
Node.js v24
Node.js v24は2025/10/28にLTS版が使えるようになったので、切り替える。
※アップデート手順が雑なのは許してほしい。
nvm install v24.11.0
nvm use v24.11.0
node -v
v24.11.0
CDKの導入
CDK InitでTypeScript用の環境を設定する。
余談だが、最近は-l typescriptじゃなくても-l tsでTypeScriptを指定できて便利ですね。
npx cdk init -l ts
ESM対応
-
package.jsonに"type": "module"を追加する。 -
tsconfig.jsonに"allowImportingTsExtensions": trueを追加する。- これは後述のImportのため
- エントリポイントのimportに
.ts拡張子を追加する。 - エントリポイントのnodeで実行する。
3は具体的にはこういうことです。
#!/usr/bin/env node
import * as cdk from 'aws-cdk-lib/core';
- import { CdkStack } from '../lib/cdk-stack';
+ import { CdkStack } from '../lib/cdk-stack.ts';
const app = new cdk.App();
new CdkStack(app, 'CdkStack', {});
4.について、Node.js v23からは直接TypeScriptを実行できるようになったので、ts-nodeやtsxで悩まずに、実行がnodeだけで済むようになった。
- "app": "npx ts-node --prefer-ts-exts bin/cdk.ts",
+ "app": "node bin/cdk.ts",
まとめ
他にも修正すべきところは沢山あるとは思うが、まずはこれで簡単にnpx cdk synthはできることが分かった。出発点としてはこの辺りから始めると良さそうです。