Alexaの開発初心者が見ると幸せになれる場所

今年は、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: