Alexa-hostedスキルにインポート可能なGitリポジトリを作成する（スキルパッケージ形式）

#はじめに

Alexa-hostedスキル作成時のインポート機能を試してみたかったのでGitHubにリポジトリを作成したが、マニュアルどおりにファイル配置してもエラーになってしまい、しかもこのメッセージ以外の情報がなくて原因がわからず、試行錯誤した結果、確実にうまく行く方法がこれしか思いつかなかったのでメモ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/258e82a9-db51-797e-24e7-f389d4856e4b.png)


#前提
- ASK CLI v2
- Alexa Developer Console
- GitHub

※作業環境 Windows

# 手順
1. ask new でAlexa-hostedスキルを作成する
2. 作成されたスキルを削除する
3. ファイルを修正する
4. GitHub リポジトリ作成する
5. リポジトリへアップロードする
6. Alexa-hostedスキルを作成する


# ask new でAlexa-hostedスキルを作成する

`任意のフォルダ` を作成し、`ask new` する。
`ASK CLI v2` を使っているので、生成されるフォルダ構成はv2のスキルパッケージ形式で作成される。

```
PS C:\hosted> ask new

? Choose the programming language you will use to code your skill:  (Use arrow keys)
> NodeJS
  Python
  Java

<ENTER>

? Choose a method to host your skill's backend resources:  (Use arrow keys)
> Alexa-hosted skills
  Host your skill code by Alexa (free).
  AWS with CloudFormation
  Host your skill code with AWS services and provision with AWS CloudFormation (requires AWS account)
  AWS Lambda
  Host your skill code on AWS Lambda (requires AWS account).
  ──────────────
  self-hosted and manage your own hosting

<ENTER>

? Please type in your skill name:  (Hello World Skill) 

test-alexa-hosted-skill-package <ENTER>

? Please type in your folder name for the skill project (alphanumeric):  (test-alexa-hosted-skill-package)

<ENTER>

/ Creating your Alexa hosted skill. It will take about a minute.      

Project directory for test-alexa-hosted-skill-package created at
        C:\hosted\test-alexa-hosted-skill-package
- Cloning Alexa Hosted Skill...warning: LF will be replaced by CRLF in .gitignore.
The file will have its original line endings in your working directory

Lambda code for test-alexa-hosted-skill-package created at
        ./lambda

Skill schema and interactionModels for test-alexa-hosted-skill-package created at
        ./skill-package

Skill is enabled successfully.
Hosted skill provisioning finished. Skill-Id: amzn1.ask.skill.186f4e9e-2ce0-4100-a62b-135e30f57b8f
Please follow the instructions at https://developer.amazon.com/en-US/docs/alexa/hosted-skills/build-a-skill-end-to-end-using-an-alexa-hosted-skill.html#askcli to learn more about the usage of "git" for Hosted skill.
PS C:\hosted>

```

# 作成されたスキルを削除する

`ask new` すると `任意のフォルダ` にファイルが生成されると同時に、`Alexa Developer Console` 上に `test-alexa-hosted-skill-package` スキルが作成されてしまうので削除する。言語も `英語（米国）` のため使えない。`任意のフォルダ` に生成されたファイルを使用する。

`アクション` の `削除` をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/60fcefba-a443-ab31-6b20-b2cc449c6790.png)

`はい、スキルを削除します` をクリックするとスキルが削除される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/354e6d1d-6647-ac6e-0f57-e3b930723ff6.png)


# ファイルを修正する

`skill.json` と `en-US.json` を修正する。

### skill.json の変更

`"regions"` を削除する。
`"locales"` の `"en-US"` を `"ja-JP"` に変更する。


```json:修正前：skill.json
{
  "manifest": {
    "apis": {
      "custom": {
        "endpoint": {
          "uri": "arn:aws:lambda:us-east-1:841233596264:function:186f4e9e-2ce0-4100-a62b-135e30f57b8f:Release_0"
        },
        "regions": {
          "EU": {
            "endpoint": {
              "uri": "arn:aws:lambda:eu-west-1:841233596264:function:186f4e9e-2ce0-4100-a62b-135e30f57b8f:Release_0"
            }
          },
          "NA": {
            "endpoint": {
              "uri": "arn:aws:lambda:us-east-1:841233596264:function:186f4e9e-2ce0-4100-a62b-135e30f57b8f:Release_0"
            }
          },
          "FE": {
            "endpoint": {
              "uri": "arn:aws:lambda:us-west-2:841233596264:function:186f4e9e-2ce0-4100-a62b-135e30f57b8f:Release_0"
            }
          }
        }
      }
    },
    "publishingInformation": {
      "locales": {
        "en-US": {
          "name": "test-alexa-hosted-skill-package"
        }
      }
    }
  }
}
```

```json:修正後：skill.json
{
  "manifest": {
    "apis": {
      "custom": {
        "endpoint": {
          "uri": "arn:aws:lambda:us-east-1:841233596264:function:186f4e9e-2ce0-4100-a62b-135e30f57b8f:Release_0"
        }
      }
    },
    "publishingInformation": {
      "locales": {
        "ja-JP": {
          "name": "test-alexa-hosted-skill-package"
        }
      }
    }
  }
}
```
### en-US.jsonのファイル名を変更する

```:修正前：en-US.json
C:\hosted\test-alexa-hosted-skill-package\skill-package\interactionModels\custom\en-US.json
```

```:修正後：ja-JP.json
C:\hosted\test-alexa-hosted-skill-package\skill-package\interactionModels\custom\ja-JP.json
```

# GitHub リポジトリ作成する

`Repository name` 欄に入力して、`Create repository` をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/7ed64282-642d-f8e7-00e4-da905cb6f060.png)


# リポジトリへアップロードする


```
PS C:\hosted\test-alexa-hosted-skill-package> git init
Reinitialized existing Git repository in C:/work/AlexaSkills/a/hosted/test-alexa-hosted-skill-package/.git/

PS C:\hosted\test-alexa-hosted-skill-package> git add .
　：

PS C:\hosted\test-alexa-hosted-skill-package> git commit -m "init"
　：

PS C:\hosted\test-alexa-hosted-skill-package> git remote add origin https://github.com/TAKARA328/test-alexa-hosted-skill-package.git

PS C:\hosted\test-alexa-hosted-skill-package> git remote -v
origin  https://github.com/TAKARA328/test-alexa-hosted-skill-package.git (fetch)
origin  https://github.com/TAKARA328/test-alexa-hosted-skill-package.git (push)

PS C:\hosted\test-alexa-hosted-skill-package> git push -u origin master

```

アップロードされるとこんな感じ。
`v2` のスキルパッケージ形式のフォルダ構成になっていることがわかる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/9ff455f9-a4e4-5505-015d-39f4532d4710.png)

`Use Git or checkout with SVN using the web URL.` に表示されているURLが、Alexa-Hostedスキルのインポート時に指定するURLとなる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/47ffc2c6-c97e-a0d9-d91e-729ebfee4f23.png)


# Alexa-hostedスキルを作成する

`Alexa Developer Console` から `スキルの作成` をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/b0016dd0-d02f-e6cc-3048-ee78479ebcd0.png)

`スキル名` に任意の文字列を入れ、`デフォルトの言語`に`日本語（日本）`を選択し、ホストするリージョンで`米国西部（オレゴン）`を選択する。そして、`スキルを作成` をクリックする。

※日本語スキルを作成する場合は`米国西部（オレゴン）`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/0410f942-6ecc-45f2-a61e-b0f7ff63f739.png)

`スキルをインポート` （白い方）をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/03db3171-d6a5-83f7-537b-82690681134e.png)

`パブリックなGitリポジトリのURLを入力します。` 欄に、先ほどのGitHubリポジトリのURLを入力し、`インポート`をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/9af06aaf-eea2-541a-739e-d7b42b28b6ab.png)

けっこう時間がかかる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/0931b442-416e-0b9c-8028-995863294cd6.png)

だいたい１分ぐらいかな。
いつもの見慣れた画面が表示されればＯＫ！
あとは、スキルの中身を仕上げれば完成！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/e84f9b1f-8e46-0757-c729-d88996dcce24.png)

何か不備があると以下のようなエラーメッセージが表示される。
だけど、何が悪いのかがわからないので対処するのが非常に困難。そのうちエラーの内容が表示されるようになると思うけど。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426739/258e82a9-db51-797e-24e7-f389d4856e4b.png)

# 試してうまくいった方法

- [Hello World スキルのテンプレートをcloneする（フォルダ構成がv1となっている）](https://github.com/alexa/skill-sample-nodejs-hello-world)
- 自分で公開しているスキルをコピーする（フォルダ構成がv1でもv2でもうまくいく）

※2020年7月12日時点の情報

# おわりに

なんかマニュアル通りにいかないというか、なにをどうすれば良いのかがイマイチわからなかった。今でも何が正解かわからない。

マニュアルに記載されている通りにファイルを配置しても、インポートエラーになったりするので、今のところこのやり方が良いと思ってる。

普通にデプロイできるスキルを作って、それをGitHubに置いてもダメなんだよな。

# 参考
- [GitリポジトリをAlexa-hostedスキルにインポートする（※Amazon公式サイト）](https://developer.amazon.com/ja-JP/docs/alexa/hosted-skills/alexa-hosted-skills-git-import.html)
- [スキルパッケージAPIリファレンス（※Amazon公式サイト）](https://developer.amazon.com/ja-JP/docs/alexa/smapi/skill-package-api-reference.html)
- [Hello World スキルのテンプレート](https://github.com/alexa/skill-sample-nodejs-hello-world)