1.0APL変更ログ﻿APLコマンドコマンドは、画面上のコンテンツの視覚および音声の表現を変更するメッセージです。コマンドはAlexaから受け取ることも(通常は音声の発話に対する応答)、APLドキュメントでイベントハンドラーが生成することもあります(たとえば、ボタンが押されたことへの応答など)。コマンドはコンテンツの操作、ドキュメントのシーンの切り替え、音声と視覚表示の同期に使われます。具体的なコマンドについては、APL標準コマンドとAPLメディアコマンドを参照してください。高速モードコマンドツリーの終了シーケンサーについてコマンドと画面アクションコマンドがサポートするシーンでのアクションには、次のタイプがあります。単一コンポーネントのオーディオコンテンツを読む2つ以上のコンポーネントのオーディオコンテンツを読むコマンドの評価コマンドの個々のプロパティはデータバインディングをサポートします。コマンドは、そのコマンドの発行要因に関する情報を含むeventプロパティとコマンド受信者のターゲットプロパティが追加された、ソースデータのバインディングコンテキストの組み合わせで評価されます。イベントの内容コマンドはソースデータのバインディングコンテキストで評価を行います。Alexaから受け取ったコマンドは、最上位レベルのデータバインディングコンテキストで評価を行います。viewportと環境が定義されていて、名前付きのリソースにアクセスできるデータバインディングコンテキストです。画面タッチなどのAPLのイベントに応答して発行されたコマンドは、コマンドが定義されているローカルのデータバインディングコンテキストで評価を行います。次にTouchWrapperのサンプルを示します。}}TouchWrapperを押すと、最初の引数は「値は24.3です」と設定されます。イベントの定義ソースデータのバインディングコンテキストは、コマンドが評価されるときにイベントデータによって拡張されます。すべてのイベントデータは、eventプロパティで利用可能です。eventプロパティにはsourceサブプロパティが含まれています。これは、イベントを発生させたコンポーネントに関してシステムから提供される情報です。}}Sourceペイロードのsourceセクションは、イベント発生要因に関するメタ情報です。このsourceセクションは、スキル開発者ではなくAPLランタイムによって生成されます。この情報はスキル開発者が使うこともできますが、分析目的で使用することも意図しています。sourceオブジェクトには、次の値が含まれます。このメッセージを開始したコンポーネントの型です。このメッセージを開始したイベントハンドラーの名前です。「Press」や「Checked」です。通常、イベントハンドラーは、頭にonを付けて「onXXXXX」と命名されます。このハンドラーは慣例的に「XXXX」としてレポートされます。このメッセージを開始したコンポーネントのIDです。ランタイムで生成されたコンポーネントIDです。このメッセージを開始したコンポーネントの値です。次の表では、標準的なsource値を示します。明示されるsource値については、個々のコンポーネントの定義を参照してください。APL標準コマンドおよびAPLメディアコマンドTargettargetプロパティは、イベントを受け取るコンポーネントについての状態情報を提供します。targetプロパティの値は、コンポーネントごとに定義されます。標準的なtarget値をいくつか以下に示しますが、この値はコンポーネントによって異なります。コンポーネント式の評価コマンドの中には、componentId値をtargetとするものがあります。コンポーネントがコマンドを発行し、そのコマンドが同じコンポーネントをターゲットにする場合、componentIdは省略できます。ExecuteCommandsディレクティブを使用する場合は、componentIdを指定する必要があります。コマンドのデータバインディング式は、コマンドを定義するときではなく、コマンドを実行するときに評価されます。ExecuteCommandsディレクティブが、グローバルデータバインディングコンテキストを参照するデータバインディング式を含んでいる場合があります。これらの式は、デバイスでコマンドが実行されたときに評価されます。コマンドがクラウドで作成されたときではありません。イベントハンドラーとExecuteCommandsディレクティブの両方が、実行するコマンドの配列を取り出します。配列はrepeatCountが0であるSequentialコマンドと同様に扱われます。コマンドのシークエンス実行コマンドはAPLランタイム環境で実行されます。このランタイムにはコマンドシーケンサーが1つだけ組み込まれており、このシーケンサーがコマンドの実行を受け持ちます。シーケンサーのルールシーケンサーのルールは次のとおりです。画面をタッチすると、既存のシークエンスを直ちに中止します。実行中のコマンドはすべて中止されます。すべてのコマンドが破棄されます。ExecuteCommandsディレクティブは、現在実行中のシークエンスをすべて中止し、新しいコマンドに置き換えます。コマンドの構成に誤りがあるか、存在しないコンポーネントを参照しているためにコマンドの実行に失敗した場合、コマンドをスキップします。コマンドに関連する遅延値は処理されます。すべてのイベントハンドラー(onPressなど)は、1つ以上のコマンドと関連付けられている場合があります。イベントハンドラーに2つ以上のコマンドが割り当てられている場合、そのコマンドはSequentialコマンド内で暗黙的にラップされます。次の例では、onPressイベントハンドラーにコマンド配列があります。この配列は、実行されるシーケンシャル配列として扱われます。ここでは、まずTextコンポーネントが読み上げられ、発話終了後にSendEventがディスパッチされます。],}コマンドシークエンスの実行は、一度に1つのみサポートされます。新しいコマンドシークエンスが開始されると、古いコマンドシークエンスは途中で終了し、古いコマンドシシークエンス内の未実行のコマンドは実行されません。コマンドのソースは、コマンドの実行をトリガーするものです。ユーザーの操作を示すソースや、タイミングの推移に基づいてアクションをトリガーするソースを使用できます。ソースには次の種類があります。ExecuteCommandsディレクティブ画面のタッチ画面のドラッグ(スクロール)背景ビデオで発生する特定のVideoコンポーネントイベント(onTrackUpdateなど)ソースは、実行する一連のコマンドを起動します。これらのコマンドは、連続または並行して実行される別の一連のコマンドを構成することがあります。各コマンドは瞬時に行われることも、時間がかかることもあります。コマンドツリーコマンドツリーとは、実行される一連のコマンドのことです。コマンドツリーが発生するのは、コマンドがネストされている場合や、あるコマンドによって新しいイベントハンドラーが起動される場合です。次のようなプリミティブコマンドに、ネストされたコマンドが含まれます。ParallelSequentialOpenURLユーザー定義のコマンドにもネストが含まれていることがあります。プリミティブコマンドはイベントハンドラーを起動することもあります。onScrollイベントは、Scroll、ScrollToComponent、SpeakListイベントのいずれかによってトリガーされる可能性があります。コマンドツリーは最後まで実行することも、途中で終了することもできます。コマンドツリーを終了すると、直ちにすべてのコマンドの実行が中止されます。ソースはコマンドツリーの実行をトリガーし、コマンドツリーは、最後まで実行することも、途中で終了することもできます。コマンドツリーのサンプルは次のようになります。ExecuteCommandsメッセージを使用して、画面の一番上までスクロールし、いずれかの項目を読み上げて、ビデオを再生します(画面の別のセクションで再生されるとします)。再生中にユーザーが画面にタッチすると、実行中の会話、スクロール、ビデオの再生が停止します。ルール:ユーザー起動の単一の「ライブ」ソースを取得します。既存のユーザー起動のソースが実行中である場合、該当するソースを終了して、新しいユーザー起動のソースが開始します。ユーザー起動以外のソースでは、常に最後まで実行されます。唯一の例外として、APLテンプレートが閉じられると、ソースも終了します。ユーザー起動以外のソースが複数同時に実行されることがあります。高速モードコマンドツリーの一部として実行されるコマンドには、実行に一定の時間がかかるコマンドが含まれている場合があります。画面上のリストをスクロールする、テキストを読み上げる、エフェクトを遅らせるなどです。実行中のコマンドシークエンスでは、イベントハンドラーをトリガーして新しいコマンドシークエンスの実行を開始する場合があります。onScrollイベントハンドラーの場合、ロングスクロールの操作中に画面のフレームレートで起動される可能性があります。onScrollイベントハンドラーが実行に時間がかかるコマンドシークエンス(テキストを読み上げるなど)をトリガーできるように設定されている場合、読み上げテキストをキューに入れて後で処理するか、読み上げテキストに別の読み上げテキストを何度も割り込ませなければならなくなります。読み上げテキストに何度も割り込みが発生するのを防ぐために、コマンド実行に通常モードと高速モードという概念を取り入れています。フレームレートで実行可能なイベントハンドラーから生成されたコマンドシークエンスは、高速モードで実行されます。それ以外のコマンドシークエンスは、通常モードで実行されます。高速モードでコマンドを実行する場合、コマンド内のすべてのdelay設定は無視され、実行に時間がかかるコマンドは無視されます。イベントハンドラーは次のように動作します。通常モード/高速モードユーザーの操作(TouchWrapperを押すなど)によって発生するイベントは、常に通常モードで実行されます。スクロールや時間の更新などのイベントは、常に高速モードで実行されます。いずれのモードでも、実行できるイベントは通常のアクション(ビデオトラックの終了など)または最終的に高速モードでトリガーされたコマンド(スクロールイベントによるビデオの一時停止など)によってトリガーされます。外部コマンドは通常モードで実行されます。各コマンドの説明には、高速モードでの動作が記載されています。次の表は、高速モードの動作をまとめたものです。終了状態にジャンプします。command=playの場合は無視されます。それ以外の場合は実行されます。