install)があるので、ベースの部分をテンプレートとして公開してみた。HeRoMo/serverless-aws-alexa-tsREADMEの日本語版がわりに、このテンプレートについて書いてみる。よるデバッグ実行とりあえず、Alexaスキルの起動確認ができる程度の発話モデルとLambdaの実装セットアップからスキルの起動確認までAlexaスキルは大きく分けて2つのパートがある。Alexaコンソールで作る発話モデル。一つは、発話モデルからのリクエストを受けて返事を生成するバックエンド処理。このServerlessのテンプレートはAlexaスキルの起動確認ができる程度の発話モデルとLambdaの実装を含んでいるのでそれを動かすまでの手順を説明する。FrameworkAWSのアカウントLambdaのデプロイ、実行とIAMのRoleの作成等が許可されているもの。AlexaスキルのモデルAlexaスキルのwebコンソールで作るやつ。スキルIDを先に用意しておきたいだけなので保存ができる程度の最低限の設定のみでOK。Frameworkのプロジェクトとしてのセットアップを行う。次のコマンドを実行する。your-app-nameの部分はご自由に(変更したら後の説明も適宜読み替えよろしく)。install次にコンフィグファイルを用意する。リネームして編集する。書くと、やはりリポジトリにコミットするのは憚れる場合があろうとコンフィグファイルを読み込む形にしている。amzn1.ask.skill.xxxxxx...から始まるアレ)を設定する。デプロイデプロイに先立ってAWSにデプロイするための認証設定を行っておく必要がある。Credentialsを見ながら設定すれば良い。セットアップしている環境では、その認証情報を使うので何もしなくても良い1。認証設定ができれば次のコマンドでデプロイできる。TypescriptがコンパイルされてLambda関数としてデプロイされる。Lambda関数のARN(関数を識別するためのID)が決まるので、AWSコンソールにログインして、デプロイした関数を探す。いう名前でデプロイされているはず。Alexaのコンソールのエンドポイントのデフォルトとして設定する。次に発話モデルの管理をできるように設定する。Webコンソールで作成した発話モデル(インテントやスロット)はJSON形式で出力することができる。発話モデルあってのスキルなのでちゃんと作ろうとすると、そのJSONもコードの一部としてリポジトリで管理したほうが良いと思う。含んでおり、それを利用して発話モデルのデータのアップロード、ダウンロードをサポートしている。次のようにコマンドを実行してまずは認証設定をおこなう。ask-cli.を選択して良い。ログインして次のメッセージがブラウザに表示されれば認証成功。interface.認証設定ができれば、次のコマンドで発話モデルをアップロードできる。※すでにwebコンソール上で発話モデルを作り込んでいる場合、それを上書きで消してしまうので注意。ask:update-model逆にwebコンソールで設定した発話モデルを取得するには次のコマンドを実行する。発話モデルのアップロード上記3点ができた時点でスキルを起動できるようになる。インテントハンドラーの実装インテントを発話モデルで作成するとそれを受けるためのインテントハンドラーを実装する必要がある。*src/handlers/*以下においている。それらを元に自分のスキルに合うように実装していけばいいようにしている。SSMLハンドラーの主な仕事はユーザの発話に合わせた返答のセリフを生成することである。テキストとして実装して返すこともできるが、それではイントネーションや数字やアルファベットの読み方が思ったとおりにならない場合がある3。声を大きくしたり、速く喋ったり、ゆっくり話したりしたい箇所もあるだろう。そのような読み方を指定するマークアップとしてSSMLというものがある。Alexaでもサポートされており、スキルの応答で利用できる4。HTMLっぽいマークアップなので開始タグとそれに対応した閉じタグを書く必要があったりと少々生で書くのは面倒くさい。いうライブラリがある。このテンプレートには型定義ファイルとともに含めているのですぐに使い始めることができる。VSCodeだとコード補完も利用できるようになっている。テストさて、開発中には実際にコードを動かしてテストを行うことになるが、いちいちLambdaにデプロイしてそれをAlexaコンソールから動かして確認するのを繰り返すのは結構面倒。ローカルで動かして確認しながら実装したい。localがあり、それを使用してAlexaスキル用のLambda関数もローカル実行できる。それには次のようにコマンドを実行すれば良い。AlexaコンソールのAlexaシミュレータ画面に表示されるLaunchRequestのJSON入力を単にコピーしてJSONファイルとして保存したものである。このコマンドを毎回入力するのも面倒なので、次のような設定をVSCodeのlaunch.jsonに追加している。]}これにより、VSCodeのデバッグ機能から実行すること事ができる。コンパイル時にソースマップも出力しているのでブレークポイントを仕掛けてステップ実行も可能となっている。よるテスト上記は単にローカルで実行できるだけで、確認は目視なので繰り返すと面倒になってくる。CIにも組み込めない。テスティングフレームワークによるテストをしたくなる。テンプレートではテスティングフレームワークとしてJestを入れている。virtual-alexaを利用している。テストコードのサンプル実装として次も含んでいる。発話モデルも読み込んで発話に対する応答をテストするので発話モデルも含めたテストが可能になっている。});});DynamoDBAlexaのボイスモデルと属性をやりとし、それをセッションを超えて覚えておくようなスキルを書く場合、何らかのデータベースとの連携が必要になるが、最も楽なのはDynamoDBだろう。このテンプレートでは一応、そのためのコードも含めている。index.tsの該当部分をアンコメントしてして利用いただきたい。Frameworkのテンプレートを公開したのでそれを紹介した。テストについては詳しく書くと長くなりすぎると思ったので、サラリと流したが別のポストを作るかもしれない。「123」と書いて「ひゃくにじゅさん」ではなく「いちにいさん」と読ませたいときもあると思う。