アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

AlexaスキルのServeless Frameworkテンプレートを公開!

morishitaです。

先日のAlexa スキルアワード2018で「子育て支援部門賞」「世の中あかるくしてくれ賞(株式会社TAM)」をいただきました。

tech.actindi.net

参考リンク
Amazon.co.jp: Alexaスキルアワード2018受賞作品: Alexaスキル
Alexaスキルアワード2018受賞作品の発表 : Alexa Blogs

それを記念して、「いこーよのおでかけナビ」で使っているライブラリ、設定を Serveless Framework のテンプレートとして公開します。

github.com

このエントリではそのテンプレートの特徴を説明します。

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 スキル開発については次のエントリも参照ください。

tech.actindi.net

デバッガの利用

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 などではコード補完のサポートを受けながら実装できます。

tech.actindi.net

DynamoDB 設定

ユーザ固有の情報を永続保存する場合には一番手軽に使えるデータベースは DynamoDB ですが、 それを使うための設定も含んでいます。

コメントアウトしてるので、利用する場合には次のファイルの uncomment to use dynamodbという箇所をアンコメントして利用してください。

  • serverless.yml
  • index.ts

利用方法

ここま読んで興味を持たれたなら、ぜひ使ってみてください。 セットアップの方法は次のページを参照ください。

利用方法

Alexa スキル以外でも使えます

さて、Alexa スキル向けのテンプレートとして説明してきましたが、実態は Lambda 関数のテンプレートなので Alexa でなくても使えます。

詳しくはこちらをご覧ください。

Alexaスキル以外での利用

最後に

アクトインディではエンジニアを募集しています。


  1. webpack.configまでTypescriptです。