typescriptmorishitaです。「いこーよのおでかけナビ」の開発において、最も役立ったライブラリVirtualAlexaについて紹介したいと思います。アプリこの商品を含むブログを見る開発環境このエントリでは次の環境を前提とします。(3.0.0以上でも問題ないです)Alexaスキル実装の辛みAlexaスキルの開発コンソールにはAlexaシミュレータというツールが含まれていて、実機に近いE2Eテストが可能となっています。Alexaシミュレータを利用したテスト/デバッグの開発では次のサイクルを繰り返すことになります。便利は便利なのですが、繰り返すと次が辛くなってきます。Logsでデバッグログを探すのが...UIの操作も面倒デバッガも使えないし...ということで、ローカルで動かしてテストしたいなーと思い始めます。LambdaやAlexaに依存しないビジネスロジックだけでもローカルでじっくりテストしようということです。前述のAlexaシミュレータでのサイクルに戻ります。ローカルでリクエストハンドラを実行したいと思い始めます。Gatewayの模擬環境にHTTPリクエストを送って動かすというものです。VirtualAlexaでした。AlexaスキルのバックエンドとなるLambda関数をローカルで動かしてテストするためのライブラリです。これを使えば難なくローカルで実行しテストできます。次のような特徴があります。ユーザの発話やインテントを指定してリクエストハンドラを動かすことができる。Spot向けのレスポンスもテストできるインストールここからはテスティングフレームワークJestとの組み合わせでVirtualAlexaを利用する方法を説明します。必要なモジュールを次のコマンドでモジュールのインストールを行います。ask-cliTypescriptの設定は次の通り。]}そして、Jestの設定は次の通り。トランスパイルはts-jestで行います。]}全体のファイル構成はこんな感じ。対話モデルを保存する。tsconfig.jsonテスト対象のサンプルスキルテスト対象として次のような簡単なやり取りを行うスキルを考えます。FeelingIntentで受けます。スロットはカスタムスロットで次の様に定義しています。ポイントはIDを設定しているところ。このIDはリクエストハンドラで取得できます。テスト対象コード上記のスキルのバックエンド側のコードを説明します。このスキルのエンドポイントとなるLambdaのハンドラー関数index.ts。後述するFeelingIntentHandlerと、標準インテントのリクエストハンドラを設定しています。.lambda();そしてテスト対象のFeelingIntentHandlerのコードは次の通りです。注目ポイントはカスタムスロットのIDで処理を分岐させているところです。