morishitaです。
先日のAlexa スキルアワード2018で「子育て支援部門賞」と「世の中あかるくしてくれ賞(株式会社TAM)」をいただきました。
参考リンク
Amazon.co.jp: Alexaスキルアワード2018受賞作品: Alexaスキル
Alexaスキルアワード2018受賞作品の発表 : Alexa Blogs
それを記念して、「いこーよのおでかけナビ」で使っているライブラリ、設定を Serveless Framework のテンプレートとして公開します。
このエントリではそのテンプレートの特徴を説明します。
Seerverless + Webpack + Typescript
Alexa スキルのバックエンドを Lambda(Node.js v8.10)で開発する前提となっています。 実装言語は Typescript とし、serverless-webpackでビルドできる様に設定しています1。
次のコマンドだけで Lambda 関数のデプロイが可能になっています。
$ npm sls:deploy
また、サンプルスキルも含んでおり、スキル作成からデプロイ、動作確認まですぐできるようになっています。 このテンプレートを使った開発フローをすぐに試せるようになっています。
テストドリブン開発
Jest と VirtualAlexa を組み合わせたテストをすぐに実行できる設定を含んでいます。 次のコマンドを実行するだけで、サンプルスキルに含まれるテストスイートを実行できます。
$ npm test # テストスイートの実行 $ npm run test:coverage # テストスイートの実行(テストカバレッジの計測付き)
Jest + VirtualAlexa によるテストドリブンな Alexa スキル開発については次のエントリも参照ください。
デバッガの利用
VSCode ではデバッガを利用できます。
そのための設定も .vscode/launch.jsonに用意しています。
VSCode の Debug を開くと、次の 2 つが選択できると思います。
- Jest All: すべてのテストをデバッガで実行する
- Jest File:開いているテストコードのみデバッガで実行する
コードにブレークポイントを設定して実行してみてください。
そこで処理が一時停止し、変数の値を確認しながらステップ実行できます。
バグつぶしの強力な武器になるので活用ください。
会話モデルの管理
Lambda 関数のコードだけでなく、会話モデルの定義 JSON も管理できます。 ASK-CLIを利用して会話モデルをダウンロードしてソースコードの一部としてバージョン管理可能です。
次のコマンドを実行すると、Alexa スキルコンソールで定義した会話モデルの定義 JSON を取得できます。
$ npm run ask:get-model
VirtualAlexa でのテストには定義 JSON が必要なのでテスト前にも実行してください。
SSML-Builder
スキルに話させるセリフの組み立てに便利なライブラリssml-builderを含んでいます。 型定義ファイルも含んでいるので、VSCode などではコード補完のサポートを受けながら実装できます。
DynamoDB 設定
ユーザ固有の情報を永続保存する場合には一番手軽に使えるデータベースは DynamoDB ですが、 それを使うための設定も含んでいます。
コメントアウトしてるので、利用する場合には次のファイルの uncomment to use dynamodb
という箇所をアンコメントして利用してください。
- serverless.yml
- index.ts
利用方法
ここま読んで興味を持たれたなら、ぜひ使ってみてください。 セットアップの方法は次のページを参照ください。
Alexa スキル以外でも使えます
さて、Alexa スキル向けのテンプレートとして説明してきましたが、実態は Lambda 関数のテンプレートなので Alexa でなくても使えます。
詳しくはこちらをご覧ください。
最後に
アクトインディではエンジニアを募集しています。
-
webpack.configまでTypescriptです。↩