AWS 認定 Alexa スキルビルダー 専門知識 サンプル問題を解説します

こんにちは。

今回は、 AWS 認定 Alexa スキルビルダー 専門知識のサンプル問題解説です。

Amazon Alexa のスキル開発者の方向けの認定試験です。

## AWS 認定とは
>AWS 認定は、クラウドの専門知識を検証し、専門家が需要の高いスキルを強調し、組織が AWS を使用してクラウドイニシアチブにおける効果的で革新的なチームを構築するのに役立ちます。個人やチームが独自の目標を達成できるように、役割と専門分野ごとに設計したさまざまな認定試験から選択します。

AWS 認定は領域やレベルごとに分けられ、本校執筆時点(2021/1)では12の認定資格が存在しています。

* レベル
 * 基礎
 * アソシエイト(中級ととらえてください)
 * プロフェッショナル(上級ととらえてください)
 * 専門知識(対象分野に特化した高度な認定) 
* 領域
 * 全般
 * ソリューション
 * 開発
 * 運用
 * DBや機械学習といった専門分野 

表にまとめると以下の通りです。

|#|レベル|認定名|
|---:|:---|:---|
|1|基礎|クラウドプラクティショナー|
|2|アソシエイト|ソリューションアーキテクト アソシエイト|
|3|アソシエイト|デベロッパー アソシエイト|
|4|アソシエイト|SysOps アドミニストレーター アソシエイト|
|5|プロフェッショナル|ソシューションアーキテクト プロフェッショナル|
|6|プロフェッショナル|DevOps エンジニア プロフェッショナル|
|7|専門知識|高度なネットワーク|
|8|専門知識|Alexa スキルビルダー|
|9|専門知識|セキュリティ|
|10|専門知識|機械学習|
|11|専門知識|データ分析|
|12|専門知識|データベース|


## AWS 認定 Alexa スキルビルダー 専門知識
試験の概要や出題割合などは、以下の試験ガイドをご確認ください。
https://d1.awsstatic.com/ja_JP/training-and-certification/docs-alexa-skill-builder-specialty/AWS-Certified-Alexa-Skill-Builder-Specialty_Exam-Guide.pdf


## サンプル問題を解いてみよう
それでは、サンプル問題を確認していきましょう。

サンプル問題：
https://d1.awsstatic.com/ja_JP/training-and-certification/docs-alexa-skill-builder-specialty/AWS-Certified-Alexa-Skill-Builder-Specialty_Sample-Questions.pdf

※以降、Markdown 記法に合わせて、サンプル問題の ABCD を 1234 と置き換えています。

### 第1問
#### 問題文
Alexa スキル開発者が、SSML の audio タグを使用して、短い MP3 ファイルの再生をするスキルを作成しています。
MP3 ファイルをホストする、可用性と拡張性が最も高いソリューションを開発するには、どうすればよいですか。  

1. ファイルを Amazon S3 バケットに格納する。
2. ファイルを Amazon EC2 インスタンスに格納する。
3. ファイルを Amazon DynamoDB テーブルに格納する。
4. ファイルを Amazon ElastiCache に格納する。

#### 回答
１

#### 解説
MP3 ファイルを格納する場所として最適なものはどれか？という問題です。MP3 ファイルは HTTPS アクセスができる場所に格納できる必要があります。
https://developer.amazon.com/ja-JP/docs/alexa/custom-skills/speech-synthesis-markup-language-ssml-reference.html#hosting-the-audio-files-for-your-skill

1. **適当であると考えます。** Amazon S3 は可用性と耐久性が高いストレージであること、容量無制限のため拡張性も選択肢の中では最も高いです。
2. 不適当です。HTTPS アクセスは可能ですが、Amazon EC2 にアタッチした Amazon EBS に MP3 ファイルを格納し、 AMI 化して AutoScaling を使えば可用性は得られますが、拡張性に関しては難しいところです。例えば、新しいファイルを導入するたびに AMI を作る必要が出てきますし、容量上限もあります。
3. 不適当です。Amazon DynamoDB には MP3 ファイルをそのまま格納することができません。
4. 不適当です。Amazon ElastiCache はデータベースなどのデータをキャッシュするサービスで、データを永続的に格納するには適していません。またメモリ容量にも限界があります。


### 第2問
#### 問題文
Login with Amazon を使用して Amazon Alexa スキル用のアカウントリンクをのコンフィギュレーションを行う際、個人情報 (PII) へのアクセス権の取得を避けるには、どのスコープを使用すればよいですか。 

1. profile:email
2. profile:user_id
3. profile
4. profile:name


#### 回答
２

#### 解説
選択肢の中から、個人情報(PII:Personally Identifiable Information)へのアクセス権を取得することなく、ユーザーを一意に識別できるスコープはどれか？という問題です。
https://developer.amazon.com/ja/docs/login-with-amazon/customer-profile.html

1. 不適当です。このスコープは存在しません。
2. **適当であると考えます。** ユーザーを一意に識別できる情報を取得しつつ、メールアドレスや名前といった個人を特定する情報が含まれません。
3. 不適当です。メールアドレスや名前にアクセスするため、個人情報へのアクセス権の取得を行ってしまいます。
4. 不適当です。このスコープは存在しません。


### 第3問
#### 問題文
Alexa スキル開発者が、リクエスト処理中の値を検査するために、console.log() ステートメントを使用して AWS Lambda 関数をデバッグしています。

log ステートメントの出力結果は、どこで確認できますか。 

1. ログファイルが Amazon CloudWatch Logs に格納される。
2. 出力結果を表示するカードが Amazon Alexa アプリに作成される。
3. ask simulate --debug コマンドの使用時に、メッセージがコンソールに表示される。
4. メッセージが Amazon Alexa の音声出力として再生される。

#### 回答
１

#### 解説
AWS Lambda のログはどこに出力される？という問題です。

1. **適当であると考えます。** CloudWatch Logs 内の対象の AWS Lambda 関数のロググループに格納されます。
2. 不適当です。console.log() の内容はカードとして作成されません。 Amazon Alexa アプリにカードとして登録するには、JSON 応答に card プロパティを追加します。
3. 不適当です。ask simulate --debug (ask v2 では ask smapi simulate-skill --debug )コマンド で、 console.log() の内容は表示されません。
4. 不適当です。console.log() は Amazon Alexa の音声出力にはなりません。


### 第4問
#### 問題文
地元企業を検索するスキルが、次の出力を応答として返しました。

```xml
<speak>I’ve found <emphasis level=”strong”>Bananas & Bears</emphasis></speak>
```
Alexa スキル開発者はテスト中、スキルの処理が何回も失敗ていることに気付きました。Amazon CloudWatch のログを確認したところ、次のエラーが見つかりました。

```json
"error":{
     "type":"INVALID_RESPONSE" ,
     "message":"Invalid SSML Output Speech for requestId amzn1.echoapi.request.afb31745-05ad-400e-8703-3a.Error:Fatal error occurred when processing SSML content.This usually happens when the SSML is not well formed.Error:Unexpected character ' ' (code 32) (missing name?)¥n at [row,col {unknown-source}]:[1,101]"
}
```
\<speak\> タグ内の応答テキストで、誤っている点は何ですか。 


1. \<emphasis\> の代わりに \<say-as\> を使用する必要がある。
2. 文字列全体を引用符で囲む必要がある。
3. 「I've」内のアポストロフィを削除する必要がある。
4. テキスト内にアンパサンド (&) がある。

#### 回答
４

#### 解説
音声合成マークアップ言語(SSML:Speech Synthesis-Markup Language)の構成で誤っている箇所を見つけ出すという問題です。

1. 不適当です。内容を見る限り Bananas & Bears を強く発話せよと読み取れるので emphasis タグは正しいです。 say-as タグはテキスト内容の解釈の仕方を指定するタグです。そのため、エラー内容と異なります。
2. 不適当です。speak タグ内の文字列全体を引用符で囲んでしまうと、その中の emphasis タグも発話対象文字列として扱われてしまいます。
3. 不適当です。Alexa スキルの発話ルールとして、アポストロフィは所有格や短縮形を示す際に使うとあるので問題ありません。
4. **適当であると考えます。** アンパサンド(&)はそのまま使ってしまうと、 XML の制御文字として認識されてしまい、誤動作を起こします。そのため、エラーメッセージの内容と合致します。



### 第5問
#### 問題文
スキルでマルチターンの対話をサポートするには、どうすればよいですか。 

1. スキルに、プロンプトのテキストを含んだ「必須」とマークされたスロットがある必要がある。
2. スキルがフォローアップの質問をして、ユーザーに応答する必要がある。
3. スキルで、質問と応答を格納するためのセッションアトリビュートを定義する必要がある。
4. スキルは、応答で shouldEndSession=false を返す必要がある。

#### 回答
４

#### 解説
ワンショットではなく、Alexa と対話して利用するスキルを作るにはどうしたらよいか？という問題です。

1. 不適当です。必須とマークされたスロットがあっても、マルチターンの対話にはなりません。
2. 不適当です。reprompt メソッドを指していると思いますが、それだけでは、マルチターンの対話にはなりません。
3. 不適当です。セッションアトリビュート自体は、セッションが維持されている間、記憶できる領域です。セッションを継続するために使われるものではありません。
4. **適当であると考えます。** shouldEndSession=false を返すことでユーザーからの応答待ち状態になります。


### 第6問
#### 問題文
Alexa スキル開発者が、ASK SDK と AWS Lambda を使用してポッドキャストスキルを作成しています。開発者は、ユーザーがポッドキャストのどのタイミングにいるか (途中、最後、最初) に応じて、スキルをそれぞれ異なる方法で起動させたいと考えています。

スキル呼び出しの再開タイミングを格納するには、どのアトリビュートを使用すればよいですか。 


1. 永続アトリビュート
2. ユーザーアトリビュート
3. セッションアトリビュート
4. デバイスアトリビュート

#### 回答
１

#### 解説
スキル呼び出しの再開タイミングとあるので、セッションが終了した後、改めて起動した際に参照できるアトリビュートはどれか？という問題です。
https://developer.amazon.com/ja-JP/docs/alexa/alexa-skills-kit-sdk-for-nodejs/manage-attributes.html

1. **適当であると考えます。** 現在のセッションのライフサイクルが終了しても存続するアトリビュートなので要件を満たせます。
2. 不適当です。ユーザーアトリビュートは存在しません。
3. 不適当です。現在のスキルセッションが継続している間存続するアトリビュートなので、再開時には破棄されているため要件を満たせません。
4. 不適当です。デバイスアトリビュートは存在しません。


### 第7問
#### 問題文
outputSpeech オブジェクトを返すことができる Amazon Alexa リクエストは、次のうちどれですか(2 つ選択してください)。 

1. IntentRequest
2. SessionEndedRequest
3. Display.ElementSelected
4. PlaybackController.NextCommandIssued
5. AudioPlayer.PlaybackStarted

#### 回答
１，３

#### 解説
文字通り、選択肢の各種リクエストを実行後、応答として outputSopeech オブジェクトを返すことが可能なものはどれかという問題です。
https://developer.amazon.com/ja-JP/docs/alexa/custom-skills/request-and-response-json-reference.html#outputspeech-object

1. **適当であると考えます。** IntentRequest リクエストに対する応答時に outputSpeech オブジェクトを返すことができます。
2. 不適当です。SessionEndedRequest リクエストに対する応答時に outputSpeech オブジェクトを返すことができません。
3. **適当であると考えます。** Display.ElementSelected リクエストに対する応答時に outputSpeech オブジェクトを返すことができます。
4. 不適当です。PlaybackController.NextCommandIssued リクエストに対する応答時に outputSpeech オブジェクトを返すことができません。
5. 不適当です。AudioPlayer.PlaybackStarted リクエストに対する応答時に outputSpeech オブジェクトを返すことができません。


### 第8問
#### 問題文
Alexa スキル開発者が、「cat and dog facts」というスキル呼び出し名を選択しました。

このスキル呼び出し名は無効です。それはなぜですか。 

1. 文字数が多すぎる。
2. 音節が 4 個以上ある。
3. 「and」という接続語が含まれている。
4. 文法的に誤っている。


#### 回答
３

#### 解説
スキル呼び出し名のつけ方を理解しているか？という問題です。
https://developer.amazon.com/ja-JP/docs/alexa/custom-skills/choose-the-invocation-name-for-a-custom-skill.html#cert-invocation-name-req

https://developer.amazon.com/ja-JP/docs/alexa/custom-skills/understanding-how-users-invoke-custom-skills.html#cert-invoke-specific-request

1. 不適当です。文字数には特に規定はありません。
2. 不適当です。特別な場合を除き、1語の呼び出し名は認められませんが、1語より多い分には規定はありません。
3. **適当であると考えます。** and は特定のリクエスト（インテント）でスキルを呼び出す際に用いられる語句(つなぎ語/接続語)であるため、呼び出し名としては無効です。
4. 不適当です。文法的に誤っていても「呼び出し名」の要件を満たしていれば問題ありません。


### 第9問
#### 問題文
Alexa スキル開発者が、2 都市間での電車の接続情報を取得するスキルを作成しています。このスキルの呼び出し名は「train finder」です。また、接続を検索するためのメインインテントで、次のサンプル発話を指定しています。

* trains between {cityA} and {cityB}
* connections between {cityA} and {cityB}
* how do I go from {cityA} to {cityB}
* when is the next train from {cityA} to {cityB}

認定プロセスで合格するサンプルフレーズはどれですか(2 つ選択してください)。 

1. 「Alexa, how can I go from Manchester to London」
2. 「Alexa, ask train finder for connections from Manchester to London」
3. 「Alexa, ask train finder when is the next train from London to Manchester」
4. 「How do I go from Manchester to London」
5. 「Alexa, ask train finder what are the trains between London and Manchester」

#### 回答
３、４

#### 解説
認定プロセスでは、サンプルフレーズの中に指定したサンプル発話が完全に含まれていないと合格できません。よって、選択肢の中から、指定したサンプル発話と合致するものはどれか？という問題です。
ちなみに、 Alexa, ... はウェイクワード込みでの発話です。

1. 不適当です。how do I ～ のサンプル発話はありますが、 how **can** I ～ のサンプル発話が存在しません。
2. 不適当です。connections between ～のサンプル発話はありますが、 connections **from** ～ のサンプル発話が存在しません。
3. **適当であると考えます。** 上から4つ目のサンプル発話と合致します。
4. **適当であると考えます。** 上から3つ目のサンプル発話と合致します。
5. 不適当です。上から1つ目のサンプル発話に合致しているように見えますが、**what are the** という疑問詞がありません。疑問詞は上から5番目のサンプル発話(when is the)のように含まれている必要があります。


### 第10問
#### 問題文
次の JSON コードでは、MEDIA_TYPE という名前のカスタムスロットタイプを指定しています。このスロットには値が 2 つあります。 

```json
{
   "types":[
      {
         "name":"MEDIA_TYPE",
         "values":[
            {
               "id":"SONG",
               "name":{
                  "value":"song",
                  "synonyms":["tune","single","track"]
               }
            },
            {
               "id":"ALBUMS",
               "name":{
                  "value":"album",
                  "synonyms":["record","lp","cd"]
               }
            }
         ]
      }
   ]
}
```

ユーザーが「change the record」と言ったときに、あるインテントが一致し、MEDIA_TYPE スロットの値が格納されるとします。標準スロット値として返されるものはどれですか。 

1. ALBUMS
2. album
3. record
4. song


#### 回答
２

#### 解説
発話した内容からどの値が格納されるかを判断する問題です。JSON 内で **synonyms** が定義されているので同義語が存在していますので、発話の内容と同義語が一致するものの値(value)が回答です。

1. 不適当です。ALBUMS は id で定義されている内容です。値の ID として返されるものです。
2. **適当であると考えます。** synonyms に record が存在するので、その value で定義されている album が標準スロット値として返されます。
3. 不適当です。record は synonyms で定義されている内容であり、標準スロット値としては album が返されるので record は正しくありません。
4. 不適当です。「change the record」と発話しているので、value: song やその synonyms と合致しません。



## サンプル問題以外の学習リソース
様々な学習リソースが用意されています。

以下はその一例です。

* AWS 公式の模擬問題
 * [AWS 認定サイト](https://www.aws.training/certification)から受験可能です。
* AWS 公式のトレーニング教材
 * [Exam Readiness: AWS Certified Alexa Skill Builder - Specialty (Japanese)](https://www.aws.training/Details/eLearning?id=45890) から受講可能です。

## まとめ
Alexa スキルビルダー 専門知識試験は、Alexa スキルの開発時に必要となるお作法に加えて、AWS のサービスとどう組み合わせていくとよいのかを理解しているか問うものです。そのため、可能であれば、 Alexa スキルを開発して、リリースするまでの一連の流れを体験すると試験対策としても実りのあるものになると考えます。


記載されている会社名、製品名、サービス名、ロゴ等は各社の商標または登録商標です。