TypeScript のプロジェクトを作成する
何をできるようにするか?
ここでは、Node.js はインストール済みであるという前提で、次のようなことを行える TypeScript 環境を整えます。
npm run build
でsrc
ディレクトリ以下の.ts
ファイルをコンパイルする
(.js
ファイルがbuild
ディレクトリ以下に出力される)npm start
でコンパイルされたbuild/main.js
を起動する
下記のセットアップ手順の 詳しい意味はこちらを参照 していただくとして、ここでは一気にセットアップを終わらせてしまいます。
セットアップ
package.json
を次のような感じで修正します。
主に scripts
の定義です。
tsconfig.json
を次のような感じで修正します。
主に、outDir
と include
の調整です。
これで、基本的な環境構築は完了です。
動作確認
TypeScript で HelloWorld を実行してテストします。
src
ディレクトリ以下に次のような main.ts
ファイルを作成してください。
次のようにビルドして、起動できることを確認します。
build/main.js
が実行されて、Hello World
と表示できれば成功です。
あとは、必要に応じて AWS SDK のパッケージをインストールして、TypeScript でプログラムを作成していきます。 例えば、S3 や DynamoDB サービスを使うプログラムを作成するのであれば、次のようにライブラリをインストールします。
npm install
で NPM パッケージをインストールするとき、実行時に必要なものは --save
で、開発時のみ必要なものは --save-dev
でインストールします。
この考え方からすると、AWS SDK (@aws-sdk
) は --save
オプションでインストールするのが自然なのですが、Lambda 関数用のプロジェクトではちょっと事情が違ってきます。
なぜなら、AWS の Lambda 実行環境にはデフォルトで AWS SDK がインストールされているからです。
AWS SDK を --save
と --save-dev
のどちらでインストールすべきかは、そのプロジェクトでデプロイ用の ZIP パッケージをどう作成するかによっても変わってきます(パッケージングするときに @aws-sdk
パッケージを含めないようにするのであれば、--save
でインストールしても問題ない)。
よく分からないときは、ZIP パッケージの肥大化を防ぐため、AWS SDK はとりあえず --save-dev
でインストールしておくのがよいと思います。
(おまけ)AWS SDK Version 2 ではなく Version 3 を使う
Node.js 用の AWS SDK は 2020年12月に Version 3 が公開されました。 世の中には Version 2 のコードがあふれていますが、Version 3 には次のような利点があります。
- 使用する AWS サービスのパッケージだけを個別にインストール/インポートできる
- Version 2 では、
aws-sdk
パッケージでたくさんのパッケージを丸ごとインポートしていた - Version 3 では、例えば DynamoDB だけを使うのであれば、
@aws-sdk/client-dynamodb
だけインポートする → バンドルサイズを小さくでき、インポート時のオーバーヘッドも減らせる
- Version 2 では、
- ミドルウェアの仕組みを利用できる
- 例えば、全てのリクエストをフックして、任意のヘッダを付加することができる
- デフォルトで TypeScript に対応
- 例えば、TypeScript コードから
@aws-sdk/client-s3
をインポートすると、型付けされた S3 用クラスを扱える
- 例えば、TypeScript コードから
Version 2 と 3 では、パッケージのインポート方法も次のように異なっています。
Version 3 のパッケージ名には、先頭に @
が付くので簡単に判別できます(@aws-sdk
というプレフィックスは、AWS SDK チームが開発したパッケージであることを示しています)。
今から AWS SDK for JavaScript (Node.js) を使う場合は、余計なオーバーヘッドを防ぐためにも、Version 3 の方を使い、XxxxClient
のようなクラスを個別にインポートする 方法をお勧めします。
さらに、デフォルトで TypeScript の型情報が提供されているので、できるだけ TypeScript でコーディングするようにしましょう。