[Alexa] ask-cliを使用してスキルのクローンを作成してみました

alexa-eyecatch

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. 作成されたスキルです。

001

5. 作成されたラムダです。

002

6. テストから動作が確認できます。

006

デフォルトでは、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.jsonapisの所が、外部のAPIに接続されているかのようになっています。

"apis": {
      "custom": {
        "endpoint": {
          "uri": "arn:aws:lambda:us-east-1:xxxxxxxxxxxx:function:ask-custom-test-skill-furuya02"
        }
      }
    },

これを、ローカルのLamdaのコードに関連つけるために、下記のように変更します。

"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. テストで確認してみます

メッセージが変わっていることを確認できます。

006

7 最後に

今回は、ASK-CLIcloneコマンドで、デプロイされたスキル及び、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

AWS Cloud Roadshow 2017 福岡