entry-header-eye-catch.html
entry-title-container.html

entry-header-author-info.html
Article by

APLを使った画面対応Alexaスキル開発

コミック事業部の丸山(@alitaso)です。先日 Amazon 製スマートスピーカーの新シリーズ、 Amazon Echo Show が日本でも発売されました。 Echo Show はディスプレイサイズが10.1インチのタッチスクリーンを備えており、 Echo Spot の2.5インチスクリーンと比べるとかなり大型になっています。

本記事では初めて画面対応の Alexa スキルを作る人向けに Alexa Presentation Language(APL) の紹介と RenderDocument ディレクティブ、 ExecuteCommands ディレクティブの使用例を解説します。

Alexa Presentation Language(APL) とは

APL は画像やスライドショーを利用した視覚要素を持つスキルを開発するために Amazon が提供しているデザイン言語です。2018年12月25日現在、APL 関連の機能はパブリックベータとして提供されています。 APL を使うことにより自由度の高いレイアウトを構築でき、様々な画面サイズに合わせて最適な体験を提供できます。APL の公式ドキュメントはこちらです。

APL RenderDocument ディレクティブ

Alexa からのリクエストに RenderDocument ディレクティブでレスポンスを返すことで、デザインした画面を Alexa 対応デバイスに表示させることができます。画面レイアウトを定義しているのが APL ドキュメントと呼ばれる JSON オブジェクトです。 レイアウトは APL コンポーネントを組み合わせて作成します。以下は Pager コンポーネントを利用して画像を連続して表示させるサンプルコードの一部です。JSON ファイルを用意して、そこにレイアウト情報を記述しています。

APL データソースの生成

レイアウトは静的な JSON ファイルに記述しましたが、表示させたいコンテンツは作成するスキル毎に様々です。APL ドキュメントと同様に JSON ファイルにデータソースを記述することもできますが、動的に生成したい場面が大半だと思います。その場合は動的に APL データソースを生成し JSON オブジェクトとして扱うとよいでしょう。

テキストや画像、 Alexa に発話させたい文章など APL ドキュメントから参照したいデータは、 APL データソースとしてもたせます。 発話させたい文章がある場合はプレーンテキストあるいはSSML 形式のテキストを用意しておき、トランスフォーマーを使って APL ドキュメントへのバインディングに適した形式へ変換します。

以下のコードはデータソースの値を APL ドキュメントから参照する例です。 今回は画像URLを適当に指定していますが、スキルを作成する際は外部 API や DB などから取得してきたデータを datasources に入れることになります。

APL ExecuteCommands ディレクティブ

RenderDocument ディレクティブを使うことで画像をスライドショーで表示させ、 APL データソースを生成してレンダリングする内容を変えることができました。次は ExecuteCommands ディレクティブを使って、画面上の画像コンテンツおよび音声を変更します。

RenderDocument ディレクティブと同じく addDirecitive を使用して type に ExecuteCommands ディレクティブ を指定します。ExecuteCommands ディレクティブを使用する際は、 先に利用した RenderDocument ディレクティブの token と同じ値を設定する必要があります。

標準コマンドのつち、ページを遷移させる SetPage コマンドと音声を出力する SpeakItem コマンドを試します。どちらのコマンドでも、コマンドを実行する対象のコンポーネントを componentId で指定します。 SpeakItemSetPage を繰り返すことで、各画面のコンテンツ内容を発話させることができます。

まとめ

画面対応の Alexa スキル開発に必要な APL と主なディレクティブについてサンプルコードを交えながら紹介しました。まだまだスマートスピーカー、 Alexa スキルに関する知見が少ないので開発の一助になれば幸いです。

20191219010152
alitaso
2018年4月入社。Ruby/Railsを使ってpixivコミックの開発に携わっています。好きな野球グラブはウイルソン A2000 1786型 です。