この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
Alexa Skill Kit Command-line Interface(以下、ASK-CLI)を使用すると、スキルの雛形作成から、デプロイ(スキル及びLambdaの両方)を極めて簡単に行うことができます。
下記は、それを試してみた記事です。
今回は、ASK-CLIのコマンドの一つであるcloneを使って、デプロイされたスキルのクローンを作成して、スキルの更新を試してみました。
最初にお断りで恐縮ですが、私の間違いかも知れませんが、cloneコマンドでLambdaのダウンロードに失敗してしまったので、一部手動で作業しております。
2 試験のためのデプロイ
最初に、雛形スキルをそのままデプロイします。
1. 2017/10/04現在、バージョンは、ベータ1となっています。
$ ask --version
1.0.0-beta.1
2. スキル名(test-skill)とプロファイル名(furuya02)を指定して、スキルを作成します。
$ ask new -n test-skill -p furuya02
New project for Alexa skill created.
3. デプロイします。
$ cd test-skill
$ ask deploy -p furuya02
-------------------- Create Skill Project --------------------
Profile for the deployment: [furuya02]
Skill Id: amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b
Skill deployment finished.
Model deployment finished.
Lambda deployment finished.
4. 作成されたスキルです。
5. 作成されたラムダです。
6. テストから動作が確認できます。
デフォルトでは、Welcomeメッセージが、「Hello World!」となっている事を確認できます。この後、このメッセージを変更することで、編集の確認をしてみたいと思います。
3 ローカルの環境削除
それでは、ローカルの環境を消し去ります。
$ ls -la test-skill
total 8
drwxr-xr-x 6 sin staff 204 10 4 18:37 .
drwxr-xr-x 11 sin staff 374 10 4 18:33 ..
drwxr-xr-x 3 sin staff 102 10 4 18:34 .ask
drwxr-xr-x 3 sin staff 102 10 4 18:33 lambda
drwxr-xr-x 3 sin staff 102 10 4 18:33 models
-rw-r--r-- 1 sin staff 762 10 4 18:33 skill.json
$ rm -rf test-skill
$ ls -la test-skill
ls: test-skill: No such file or directory
4 クローンの作成
1. cloneコマンドを実行します。
$ ask clone -p furuya02
? List of all your skills. test-skill: [amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b]
-------------------- Clone Skill Project --------------------
Project directory for test-skill created at
./test-skill
Skill schema for test-skill created at
./test-skill/skill.json
Skill model for en-US created at
./test-skill/models/en-US.json
Downloading Lambda functions...
Get Lambda function error.
CredentialsError: Missing credentials in config
しかし、ここで、Get Lambda function error. CredentialsError: Missing credentials in configというエラーが発生しています。
2.クローンの内容を確認します。
フォルダが生成され、スキルのモデルがコピーされています。
$ cd test-skill
$ ls -la
total 8
drwxr-xr-x 6 sin staff 204 10 4 18:50 .
drwxr-xr-x 11 sin staff 374 10 4 18:50 ..
drwxr-xr-x 3 sin staff 102 10 4 18:50 .ask
drwxr-xr-x 3 sin staff 102 10 4 18:50 lambda
drwxr-xr-x 3 sin staff 102 10 4 18:50 models
-rw-r--r-- 1 sin staff 820 10 4 18:50 skill.json
しかし、Lambdaは、エラーのとおり空っぽでした。
$ ls -la lambda/custom/
total 0
drwxr-xr-x 2 sin staff 68 10 4 18:50 .
drwxr-xr-x 3 sin staff 102 10 4 18:50 ..
5 エラー対処
エラーでLambdaのダウンロードに失敗したので、その対処を行います。 上記エラーが発生しなければ、このセクションの作業は、おそらく必要ないと思います。
1.lambdaコマンドでダウンロード。
lambdaが配置されるディレクトリに移動して、lambdaコマンドで直接Lambdaをダウンロードします。
$ cd lambda/custom/
$ ask lambda download --function arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:ask-custom-test-skill-furuya02 -p furuya02
arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:ask-custom-test-skill-furuya02 download finished.
$ ls -la
total 16
drwxr-xr-x 5 sin staff 170 10 4 19:02 .
drwxr-xr-x 3 sin staff 102 10 4 18:50 ..
-rw-rw-rw- 1 sin staff 1773 10 4 19:02 index.js
drwxr-xr-x 21 sin staff 714 10 4 19:02 node_modules
-rw-rw-rw- 1 sin staff 244 10 4 19:02 package.json
2. skill.jsonの編集
Lambdaがリンクしていないと認識されてしまったので、skill.jsonのapisの所が、外部のAPIに接続されているかのようになっています。
"apis": {
"custom": {
"endpoint": {
"uri": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:ask-custom-test-skill-furuya02"
}
}
},
これを、ローカルのLambdaのコードに関連つけるために、下記のように変更します。
"apis": {
"custom": {
"endpoint": {
"sourceDir": "lambda/custom"
}
}
},
3. .ask/configの編集
.ask/configの方にも編集が必要です。
{
"deploy_settings": {
"furuya02": {
"skill_id": "amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b",
"was_cloned": true
}
}
}
margeを追加します。(endpointにスキル名を指定する)
{
"deploy_settings": {
"furuya02": {
"skill_id": "amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b",
"was_cloned": true,
"merge": {
"skillManifest": {
"apis": {
"custom": {
"endpoint": {
"uri": "ask-custom-test-skill-furuya02"
}
}
}
}
}
}
}
}
6 動作確認
1. メッセージを「Hello World!」から「good morning!」に変更してみます。
index.jsのメッセージのみを修正してみます。
'SayHello': function () {
this.response.speak('good morning!')
.cardRenderer('hello world', 'hello world');
this.emit(':responseReady');
},
2. デプロイします
初回だけ、確認のメッセージが出ますが、Yesを選択すると、2回目以降は、表示されません。
$ ask deploy -p furuya02
? Do you want to proceed with the above deployments? Yes
-------------------- Update Skill Project --------------------
Skill Id: amzn1.ask.skill.5451dcf3-a4c3-48c9-88dc-87769f4a2a0b
Skill deployment finished.
Model deployment finished.
Lambda deployment finished.
3. テストで確認してみます
メッセージが変わっていることを確認できます。
7 最後に
今回は、ASK-CLIのcloneコマンドで、デプロイされたスキル及び、Lambdaのコピーから、内容を修正する作業を試してみました。 ASK-CLIは、まだベータですが、非常に強力なツールだと思います。
順次、他のコマンドも試してみたいと思います。
8 参考リンク
Skill Events in Alexa Skills
Add Events to Your Skill with SMAPI
List Events in Alexa Skills
Steps to Create a List Skill