Amazon Echo を購入して、Alexa スキル開発を始めて、約2ヶ月が経ちました。
この間に作ったものといえば、会社の諸事情で作ったスキル、Alexa for mastodon (ベータ版)の2つだけ。しかも、どちらもまだ公開に踏み切っていない雑魚なので、Alexa スキル開発者として未だスタートに立ってない気持ちでいるわけです。
岡本 秀高さんやするめごはんさんが Advent Calendar に並んでるのを見ながら、我ながらホントに雑魚すぎて申し訳ない気持ちになります。しかも、危うく更新日間違えて遅れるとこだったし。。。
そんなわけで、こちらはAlexa Skills Kit SDK Advent Calendar 2018 の22日目の記事となります。
しかしながら、雑魚は雑魚なりに考えました。これからスキル開発をされる方のために少しでもなるような知見を残したいと。
そこで、この記事では Alexa Skill Kit SDK を使い始めるにあたって、匠がハマった所を紹介していきます。
これから Alexa サスキル開発者がどんどん増え、業界が盛り上がっていくことを願ってやみません。
失敗0. ASK SDK インストール元が不明問題
そもそもな問題です。失敗以前って話。
問題・事象
ASK SDK については情報があるものの、どこからインストールして良いか分かりません。色々あるし、Qiita記事は検索でたくさん引っかかるし、岡本 秀高さんの上級者向けの記事はガンガン仕えられるんですが。
解決
下記は、自分向けのまとめも兼ねたリンク集です。
公式ドキュメント集



ソースコード&サンプル集
セットアップは全部ココから。
テスト環境
個人的にはAlexa developer Console で事足りてます。ただ、そもそも持ってない人、買いましょう。一番安い Dot は年末年始狙い目です。匠的には Show や Spot 買うのが絶対楽しい。APLは、これからPOCしますが、絶対面白い。


失敗1.ask 初期化コマンドのフリーズ
ここから本番。まず躓いたのはこちらで、たぶんあるあるです。
問題・事象
ASK SDK を導入する際、インストール後にまず初期化処理をします。
この時次のコマンドを打ちます.
ask init
この後、プロファイルを選んだり、なんだかんだ選択肢を選んだりした後、Amazon.comのアカウントでログイン認証を行います。無事に認証が終わり、安堵したところで下記の状態になるわけです。

Call list-vendors error.
Error code: 401
{
"message": "You are not authorized to access this operation."
}
なぜに?
最初、これがなぜ起こっているのかよくわからなくて、何度も何度も繰り返しました。
ググってもググっても情報が無くて、--no-browswer オプションをつけてみたりもしましたが、一向に解決せず困って、なかなか進められませんでした。ASK辞めようかと。。。
解決
原因は下記でした。
Node.js は 8.10にしなくてはならない
この記事執筆時点での最新は Node.js 11.5.0 でして、これをぶち込んだのがマズかった。
アンインストールして、こちらから Node.js 8.10 をインストールし直したらアッサリ解決。
ASKの Node.js 対応について、上位互換がないってことみたいです。
そういえば、AWS Lambda が対応する Node.js も最新は 8.10 だったような。。。この辺は Node.js ユーザでないので、事情はよくわかりませんが…
失敗2. デプロイした Lambda 関数がない
なんじゃこら、って思います。ちょっと ASK SDK 恨みたくなります。最初だけ。
問題・事象
先程のトラブルを乗り越え、たくさん用意されたサンプルスキルをデプロイしてみたくなったりします。そう全員、最初はサンプルからスタート。
例えば、次のようにコマンド打ってみてください
> ask new
? Please select the runtime Python3
? List of templates you can choose Hello World (using Classes)
? Please type in your skill name: skill-sample-python-helloworld-classes
(以下略)
こうしてサンプルスキルをダウンロードした後、そのフォルダで下記のコマンドを実行してスキルをデプロイ(展開)します。
ask deploy -t all
こうして少し時間を経過した後、alexa developer console にスキルがデプロイされてることを確認できます、しかし、AWS Lambda の画面を見に行くとデプロイされているはずの関数がどこにも見当たりません。あれ?
ask コマンドの実行結果では、特にエラーが発生しているわけでもなく、何が起こってるのかよくわかりませんでした。エラーもないなんんて、作りが荒いのか、、、と途方に暮れておりました。
解決
実は、ask コマンドでデプロイした Lambda 関数は「バージニア北部」のリージョンにデプロイされます。

え、なんで?ってなりますよね。
メインで使っているリージョンは東京リージョンだったし、aws-cli でも東京リージョンを指定していますが、勝手に異なるリージョンにデプロイされます。ask deploy コマンドで指定する方法も用意されてないです。
これを解決する方法は、まだ残念ながら把握できていません。
それでも Alexaスキル開発は楽しい
記事にもならないような細かいトラブルや、AWS Lambda 関連のトラブルはまだまだいくつもありますか、総じてアレクサスキル開発は楽しいです。(重要)
やはり作ったものが、物理デバイスに機能実装されるのを目の当たりにするのは楽しいですね。
そして、それが生活の役にたっていくことこそ技術者の本懐かな、と感じます。
この面白さが、1人でも多くの皆様に早く伝わることを祈っております。