今年は、LINE Wave、Google home、Amazon Echoなど、音声認識デバイス元年と言っていいくらいのインパクトのある年になりました。

自分もいろいろやりたくなって、先日のre:Invent 2017ではAlexaのハッカソンに参加してきました。世界中がAlexaに注目しているのが肌感覚でわかって、よい刺激になりました:grinning:

日本でもAlexaが盛り上がりつつあり、最近日本語の情報も増えてきましたので、
ココらへんで一旦、開発するにあたって役に立つ情報をまとめておこうと思います。

入門

本家サイト

Alexaの開発者ポータル。ここから、ダッシュボードに進み、Alexaのスキル開発を行います。
https://developer.amazon.com/ja/alexa

端末管理

Alexa端末にスキルを追加したり、端末の設定を変更できます。
それぞれ、amazon.com と amazon.co.jp はアカウントが別扱いになるので注意。日本で利用する場合、amazon.co.jpを見てればいいと思います。iPhoneアプリとかはalexa.amazon.co.jpと同じ内容です。
https://alexa.amazon.co.jp
https://alexa.amazon.com

おすすめセッション

AWS re:invent 2017: It’s All in the Data: The Machine Learning Behind Alexa’s AI Sys (ALX319)

今回のre:Inventでのセッション。基本概念の理解に役立ちます。Echoなどの端末側とAlexa側での処理の役割分担や、処理フロー等など非常にわかりやすく説明されていたり、slotやutteranceなど慣れない用語を抑えるのにも最適です。

slideshare
https://www.slideshare.net/AmazonWebServices/alx319its-all-in-the-data
Youtube
https://youtu.be/7ZmdYFgbQ6w

個人的には、slideshare より Youtube のほうが流れが理解しやすいと思います。

開発

Hello world

Alexa skill kitを使い、スキル開発の流れが理解できます。初めにやってイメージを掴んでおくとよいでしょう。
https://developer.amazon.com/ja/docs/ask-overviews/build-skills-with-the-alexa-skills-kit.html

Github

alexa本家。ここで、実際のサンプルをたくさんみることができます。
https://github.com/alexa/

スターが多いのはAlexa Voice serviceのサンプルコード。
https://github.com/alexa/alexa-avs-sample-app
個人的には、alexa-cookbookがおすすめです。
https://github.com/alexa/alexa-cookbook

echosim

Alexaは実機がなくてもechosimでテストできます。
日本語のスキルにも対応済です。自分の開発者アカウントでログインし、スキルのテストをオンにすれば実機がなくても確認できます。また、ここでデバイス側の送受信データも確認できます。
https://echosim.io/

ask-cli

ASKコマンドラインインターフェース(ask-cli)の使い方。
インストールから手順を追って説明してあります。askコマンドを使うと、alexa側の設定と、lambda側を一つのリポジトリで開発できて、Alexa側とlambda側にまとめてデプロイできるので、おすすめ。開発者ポータルと、AWSを行ったり来たりしないでもよくなります。
ただし、現時点で、regionが ap-northeast-1 に非対応っぽいです。us-east-1にlambdaが作られるので注意です。
https://developer.amazon.com/ja/docs/smapi/ask-cli-command-reference.html

alexa-sdk

Node.jsで使うAlexa skill kit のSDK。
DynamoDBに簡単にデータを永続化したり、SSMLでwrapしたりしてくれる。Node.jsのlambdaで実装するなら、ほぼ必須
ask-cliを使う場合は、作成したプロジェクトに含まれるlambdaのpackage.jsonにすでに書かれているので、インストールする必要はありません。
https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs

ralyxa

同僚に教えてもらった、Alexa とやり取りするときの Ruby製フレームワーク。Alexaはバックエンドの処理にhttpサーバーも選べるので、rubyで書きたいひとにおすすめ。シナトラで動く。
https://github.com/sjmog/ralyxa
こっちがサンプル。
https://github.com/sjmog/ralyxa_example

flask-ask

Alexa Skills Kit for Python。 Flaskの拡張機能。処理側をpythonで書きたい人におすすめ。
https://github.com/johnwheeler/flask-ask

alexa-skills-kit-java

JavaのAlexa Skills Kit SDK。
https://github.com/amzn/alexa-skills-kit-java
Javaのサンプルはこの辺です。
https://github.com/alexa/skill-samples-java

音声合成のマークアップ(SSML)

Alexaでは、SSMLを使って豊かな音声表現を実現できます。

SSMLの仕様
https://www.w3.org/TR/2010/REC-speech-synthesis11-20100907/
SSMLの仕様(和訳) 
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/accessibility/REC-speech-synthesis11-20100907.html

Alexaで使えるSSMLタグ一覧
https://developer.amazon.com/ja/docs/custom-skills/speech-synthesis-markup-language-ssml-reference.html#ssml-supported

リファレンス

Alexa開発者ブログ
https://developer.amazon.com/ja/blogs/alexa/
Alexa開発者ブログ(日本タグ)
https://developer.amazon.com/ja/blogs/alexa/tag/japan

クラスメソッドさんのAlexa系の記事
いつも大変お世話になっております。
https://dev.classmethod.jp/referencecat/voice-assistant-amazon-alexa/

まとめ

日本では、まだEchoなどの端末がすぐに手に入る状態ではない(招待メールをリクエストしないと、買うことすらできない)ですが、今後は徐々に手に入りやすくなると思います。

実機がなくてもechosimを使えばスキルの開発はできるので先に触って、自分のアイデアを形にしておくのがいいと思います。

何か作ってみたいと思った人が迷わずに開発できるよう本記事が役立てば幸いです:slight_smile: