mazyu36の日記

某SIer所属のクラウドエンジニアのブログ

TypeScript未経験者がAWS CDK with TypeScriptをやるときに困ったこと

はじめに

今でこそAWS CDK with TypeScript大好きマンだが、TypeScript未経験の状態で始めたので割と初歩的なところで詰まった。

多分NodeとかJSとか開発経験がある人には常識的なことばかりだとは思うが、詰まったところを小ネタ的にまとめていく。

※JS、TS初心者であることは変わりないので、間違っていることなどあればこっそり教えてください。

1. 他の人とプロジェクト共有するときどうすればいいの → git cloneして npm ciをすればOK

CDKのプロジェクトを初期生成するときはcdk init --language typescriptとすればよい。でもチーム開発するときに他の人が作成したプロジェクトを使用するときどうすればいいんだ・・・?となってしまった。

結論としてはプロジェクトをgit cloneしてからnpm ciを実行すればよい。npm ciが何をやっているかは以下の記事が参考になった。

kazuhira-r.hatenablog.com

npm ciを実施すると、プロジェクトにあるpackage-lock.jsonを元に/node_modulesにパッケージがインストールされるのでチームメンバ間で揃うはず。

2. CDKのプロジェクトでバージョンアップしたいけどどうすればいい → ncuコマンドでアップデート

CDKのバージョンアップが行われて新しいL2 Construct使いたいぜ〜等になった時に、既存のCDKプロジェクトのバージョン上げるにはどうすればいいんだ・・・?となったのでその時の対処法をメモ。

以下の記事が非常に参考になった。この記事におけるマイナーバージョンのアップデートで行なっている。

zenn.dev

実際に上記手順でやってみる。

まずはCDKのバージョンを確認すると以下であった。

% npx cdk --version
2.50.0 (build 4c11af6)

マイナーバージョンのアップデートを実施。CDKのバージョンは2.50.02.59.0になるみたい。

% npm outdated
Package       Current    Wanted    Latest  Location                  Depended by
@types/jest   26.0.24   26.0.24    29.2.5  node_modules/@types/jest  cdk_update_test
@types/node  10.17.60  10.17.60  18.11.18  node_modules/@types/node  cdk_update_test
aws-cdk        2.50.0    2.50.0    2.59.0  node_modules/aws-cdk      cdk_update_test
aws-cdk-lib    2.50.0    2.50.0    2.59.0  node_modules/aws-cdk-lib  cdk_update_test
constructs   10.1.147  10.1.215  10.1.215  node_modules/constructs   cdk_update_test
jest           26.6.3    26.6.3    29.3.1  node_modules/jest         cdk_update_test
ts-jest        26.5.6    26.5.6    29.0.3  node_modules/ts-jest      cdk_update_test
ts-node         9.1.1     9.1.1    10.9.1  node_modules/ts-node      cdk_update_test
typescript     3.9.10    3.9.10     4.9.4  node_modules/typescript   cdk_update_test

% ncu -u --target minor

 aws-cdk         2.50.0  →     2.59.0
 aws-cdk-lib     2.50.0  →     2.59.0
 constructs   ^10.1.147  →  ^10.1.215

この後npm installを行いCDKのバージョンを確認すると想定通りアップデートされていた。

% npm install          

added 3 packages, changed 5 packages, and audited 543 packages in 7s

27 packages are looking for funding
  run `npm fund` for details

% npx cdk --version
2.59.0 (build b24095d)

この手順を踏むとpackage.jsonpackage-lock.jsonが更新される。これをリポジトリにpushした後、他メンバはcloneしてnpm ciを実行すれば良い。

3. cdk ...npx cdk ...どっち使えばいいの → 基本的にnpx cdk ...を使った方がよい

チュートリアルなどやっていると、cdkコマンドの先頭にnpxをつける例とつけない例がある。CDKに触り始めた頃、違いがよく分からず後者のnpxなしの方を使っていた。

  • npx cdk deploy
  • cdk deploy

結論としてはnpx cdk...を使うのが良いと理解している(チーム開発では特に)。

  • npxをつけるとローカルのパッケージ(プロジェクトのnode_modules配下のもの)を元に実行される形となる。
  • npxなしだとグローバルインストールされているCDKのバージョンで実行される。

チーム開発をしていると、プロジェクトによってはCDKのバージョンがずれていることがあるため、以下のような状況が発生し得る。

  • あるプロジェクトのCDKのバージョン:v2.0.1
  • 自分のPCにグローバルインストールされているCDKのバージョン:v2.10.0

そのためプロジェクトそれぞれのローカルのパッケージを元に実行するようにnpxをつけるのが望ましい。新規参画者が1でnpm ciを使用しセットアップするようにし、npxをつけるルールとすればメンバー全員が同じCDKのバージョンでコマンド実行をする形となるはず。

試しにとあるCDKプロジェクト配下でバージョンを確認してみたところ、以下のようにズレが生じていた。

% cdk --version
2.54.0 (build 9f41881)

% npx cdk --version
2.59.0 (build b24095d)

npxをつけない方がいいケースってあるのかな・・・