LoginSignup
6
3

More than 5 years have passed since last update.

AlexaのカスタムスキルをTypeScriptで作るテンプレートを作ってみた。

Last updated at Posted at 2018-07-19

経緯

先日、TypeScriptでAlexaスキルを作ったことについてLTする機会があったので、あわせて(?) alexa-skill-typescript-template というリポジトリでAlexaスキルをTypeScriptで作るテンプレートを公開しました。

AlexaのカスタムスキルはAWS Lambdaを使って開発することが多いかと思うのですが、調べていた限りではなかなかTypeScriptで開発されているドキュメントはあまり多くありませんでした。

自分としてはTypeScriptで開発した方が今までのAWS Lambdaを使った開発の中でも効率が良かったと感じたので、自分が公開しているAlexaスキルの開発でも利用しているもので共有出来る部分をテンプレートとして公開してみました。

(また、2018年4月にリリースされたAlexa Skills Kit SDK v2 for Node.jsは、TypeScriptで開発されており、型定義が元々されているため、AlexaスキルをTypeScriptで作るのは一段とフィットしていると自分は考えています。)

このテンプレートで出来ること

  • TypeScriptファイルからJavaSctiptファイルへのコンパイル。

  • コンパイルされたJavaScriptファイルを含めたフォルダをAWS Lambdaの関数としてパッケージング。

  • AWS SAM ( Serverless Application Model )でAlexaスキルで利用するAWS Lambda関数をはじめとした各AWSリソースのデプロイ。

利用するにあたって必要なもの

TypeScriptのインストール

$ yarn global add typescript

AWS SAM CLIの準備

  • AWS SAM CLIのインストール
$ pip install aws-sam-cli

デプロイするLambda関数をアップロードするためのS3バケットの用意

AWS Lambdaの関数としてデプロイする際に、前段階として後述で出てくる $ sam package というコマンドでAWS Lambdaの関数としてJavaScriptファイルをパッケージングしてS3にアップロードする必要があるため用意します。

主なファイル・フォルダについて

  • skill/src フォルダ
    開発では主にこのフォルダの内容を編集します。

    • skill/src/index.ts
      AWS Lambdaの関数として使うメインのファイルです。
  • skill/dist フォルダ
    このフォルダはskill/srcフォルダの内容をコンパイルし、必要なパッケージをインストールした状態で格納されます。

  • template.yml
    AWS SAMのテンプレートです。
    デフォルトでは skill/dist フォルダをAWS Lambdaの関数としてデプロイするよう指定してあります。
    (なお、自分のAlexaスキル開発ではスキルで使うDynamoDBも一緒にこのファイルで管理しています。)

使い方

AWSに各リソースをデプロイする場合

$ sam package --template-file template.yaml \
--output-template-file serverless-output.yaml \
--s3-bucket 「アップロード先のS3バケット名」

$ sam deploy --template-file serverless-output.yaml \
--stack-name 「スタック名」 \
--capabilities=CAPABILITY_IAM

※「アップロード先のS3バケット名」と「スタック名」は任意に変更してください。

TypeScriptファイルをコンパイルする場合

$ cd src/
$ yarn build

上記2つをまとめて1度にやる場合

$ sh deploy.sh

※このシェルスクリプト内も「アップロード先のS3バケット名」と「スタック名」は任意に変更してください。

6
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3