ステップ2: スキルコードを実装する

ステップ2: スキルコードを実装する

前のステップでは、Alexa開発者コンソールで新しいスマートホームスキルを作成しました。次は、スマートホームスキルのコードをアマゾン ウェブ サービス(AWS)のLambda関数として実装します。この関数は、スキルコード、設定情報、Identity and Access Management(IAM)ロールで構成されます。IAMロールは、ユーザーに代わってスキルコードを実行する許可をLambdaに与えます。Lambda関数では、オプションでデータをAWS DynamoDBに保存したり、ログをAWS CloudWatchに書き込んだりできます。

コードは、AWS Lambdaコンソールで直接作成することも、スキルのコード作成に使用するプログラミング言語に最適な開発環境で作成することもできます。Lambda関数は、Node.js、Java、Python、C#、Go、Ruby、PowerShellで作成できます。簡潔にするため、このチュートリアルのステップではAWS Lambdaコンソールのコードエディターを使用し、PythonとNode.jsのコード例を提供します。

AWSコンソールでのスキルコードの実装手順

仮想電球を制御するスキルコードを実装するには、以下の手順を実行します。

  1. IAMロールを作成する
  2. Lambda関数を作成する
  3. スキルコードを追加する
  4. Lambda関数をテストする
  5. リソース名をコピーする

手順2.1: IAMロールを作成する

この手順では、新しいIAMロールにスマートホームポリシーをアタッチします。ステップbでは、Lambda関数にロールを割り当てます。

AWS開発者コンソールでAWS Lambda関数のIAMロールを作成するには

  1. AWSマネジメントコンソールにサインインします。
  2. IAMダッシュボードを開きます。
  3. IAMダッシュボードで、左側のメニューからアクセス管理ロールをクリックします。
  4. IAM>ロールページで、ロールの作成をクリックします。
  5. IAM>ロール>ロールの作成ページで、次の情報を入力します。
    1. 信頼されたエンティティを選択信頼されたエンティティタイプで、AWSのサービスを選択します。
    2. ユースケースLambdaを選択し、次へをクリックします。
  6. 許可を追加で、AWSLambdaBasicExecutionRoleというポリシーをフィルタリングして見つけます。
  7. AWSLambdaBasicExecutionRoleというポリシーとAWS管理というタイプの横にあるチェックボックスをオンにし、次へをクリックします。
  8. 名前、確認、および作成ページのロール名に、「lambda_smart_home_skill_role」と入力し、ページの下部にあるロールを作成をクリックします。

これで、使用可能なロールのリストにlambda_smart_home_skill_roleが表示されます。

手順2.2: Lambda関数を作成する

この手順では、Lambda関数を作成し、IAMロールを追加して、Lambdaが開発者に代わってコードを実行できるようにします。その後、サンプルスキルコードを追加します。

AWS開発者コンソールでAWS Lambda関数を作成するには

  1. Lambdaダッシュボードに移動します。Lambda関数を作成したことがある場合、コンソールには関数のリストが表示されます。
  2. AWS Lambdaページで、関数の作成をクリックします。
  3. 関数の作成をクリックします。
  4. 関数の作成で、一から作成を選択します。
  5. 基本情報で、次の情報を入力します。
    1. 関数名に、「my-smart-home-skill」と入力します。
    2. ランタイムで、PythonまたはNode.jsのバージョンを選択します。
    3. アーキテクチャはデフォルトのままにします。
    4. アクセス権限>デフォルトの実行ロールの変更で、既存のロールを使用するを選択します。
    5. 既存のロールで、lambda_smart_home_skill_roleを選択し、関数の作成をクリックします。
  6. Lambda>関数>my-smart-home-skillページで、関数の概要+トリガーを追加をクリックします。
  7. トリガーを追加ページで、スキルをトリガーするための以下の情報を入力します。
    1. トリガーの設定で、Alexaを選択します。
    2. Alexa製品を選択で、Alexa Smart Homeを選択します。
    3. スキルID検証で、有効(推奨)を選択します。
    4. スキルIDに、ステップ1: スマートホームスキルを作成するで保存したスキルIDを貼り付けます。
    5. スキルを呼び出すトリガーを追加するには、追加をクリックします。

手順2.3: スキルコードを追加する

次に、サンプルスキルコードをLambda関数に追加します。サンプルコードには、電球をモデル化する検出応答と、電球を制御するAlexa応答が含まれています。Alexaからディレクティブを受信すると、Lambda関数がスキルコードを実行します。

検出応答は、電球のエンドポイントを識別し、製造元、モデル、シリアル番号など、エンドポイントに関する識別情報をできるだけ多く含めます。さらに、検出応答は電球の機能を識別します。この例では、応答にAlexa.PowerControllerインターフェースが含まれており、ユーザーが電球をオンまたはオフできることを示しています。検出の詳細については、Alexa検出についてを参照してください。

ユーザーがAlexaに電球をつけるように指示すると、AlexaはTurnOnディレクティブをスキルに送信します。これに応答して、スキルはデバイス制御クラウドの適切なインターフェースを呼び出して電球をオンにし、電球エンドポイントの現在の状態をAlexaに返します。

フル機能のスマートホームスキルには、エンドポイントデバイスの機能を最も適切に表す機能インターフェースの組み合わせが含まれる場合があります。また、スキルは通常、Alexaがデバイスのステータスを最新に保てるようにするために、状態および変更レポートをサポートしています。使用可能なスマートホームインターフェイスを使用してデバイスタイプをモデル化する方法については、Alexaインターフェースとサポートしている言語の一覧を参照してください。

スキルコードをLambda関数に追加する

  1. Lambda>関数>my-smart-home-skillページで、コードタブをクリックしてソースコードを表示します。
    Pythonの場合、スキルコードはlambda_function.pyファイルにあります。Node.jsの場合、スキルコードはindex.jsファイルまたはindex.mjsファイルにあります。このチュートリアルでは、index.mjsの名前をindex.jsに変更します。
  2. 関数コードを表示するには、lambda_function.pyまたはindex.jsをクリックします。
  3. 既存のコードを、仮想電球を制御する以下のスマートホームスキルコードに置き換えます。
    このコードはAcceptGrantDiscoveryTurnOnTurnOffディレクティブをサポートしています。

  1. ファイルを保存するには、ファイル保存を選択します。
  2. 関数をデプロイするには、デプロイをクリックします。

Lambda>関数>my-smart-home-skillページの上部にある緑色のボックスに、関数が正常に更新されたことを示すメッセージが表示されます。

手順2.4: Lambda関数をテストする

スキルコードを保存したら、Lambda関数を呼び出して、AWS開発者コンソールで結果を確認できます。次のコード例は、Alexa.Discoveryリクエストを送信してエンドポイント機能を報告し、Alexa.PowerControllerリクエストを送信してライトをオンにします。

検出テストを定義する

  1. Lambda>関数>my-smart-home-skillページで、テストタブをクリックします。
  2. テストイベントで、新しいイベントを作成を選択します。
  3. イベント名に、「DiscoveryTest」と入力します。
  4. テンプレートのドロップダウンメニューから、Alexa Smart Home Discovery Requestを選択します。
  5. イベントJSONコードエディターで、既存のコードを以下のテストコードに置き換えます。

クリップボードにコピーしました。

{
    "directive": {
        "header": {
            "namespace": "Alexa.Discovery",
            "name": "Discover",
            "payloadVersion": "3",
            "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
        },
        "payload": {
            "scope": {
                "type": "BearerToken",
                "token": "access-token-from-skill"
            }
        }
    }
}
  1. テストコードを保存するには、保存をクリックします。

電源オンテストを定義する

  1. テストイベントで、新しいイベントを作成を選択します。
  2. イベント名に、「PowerOnTest」と入力します。
  3. テンプレートのドロップダウンメニューから、Alexa Smart Home Control Turn On Requestを選択します。
  4. コードエディターで、既存のコードを以下のテストコードに置き換えます。

クリップボードにコピーしました。

{
  "directive": {
    "header": {
      "namespace": "Alexa.PowerController",
      "name": "TurnOn",
      "messageId": "1bd5d003-31b9-476f-ad03-71d471922820",
      "correlationToken": "1bd5d003-31b9-476f-ad03-71d471922820",
      "payloadVersion": "3"
    },
    "endpoint": {
      "scope": {
        "type": "BearerToken",
        "token": "access-token-from-skill"
      },
      "endpointId": "sample-light-01",
      "cookie": {}
    },
    "payload": {}
  }
}
  1. テストコードを保存するには、変更を保存をクリックします。

AWS開発者コンソールでLambda関数をテストするには

  1. テストを開くには、テストイベントで、イベント名のドロップダウンメニューからDiscoveryTestを選択します。
  2. テストを実行するには、テストイベントで、テストをクリックします。
    テストに成功すると、実行結果:成功と表示されます。
  3. ログを表示するには、実行結果ボックス内の詳細を展開します。
  4. ログを閉じるには、xをクリックします。
  5. PowerOnTestについても手順1~4を繰り返します。

手順2.5: リソース名をコピーする

すべてのLambda関数には、関数へのエンドポイントを定義するAmazonリソースネーム(ARN)があります。AlexaはARNによってスキルコードにアクセスします。

以下の画像は、Lambdaコンソールに表示されるサンプルARNを示しています。

スマートホームスキルのフォーマット済みリソース名。

AWS開発者コンソールでLambda関数のARNをコピーするには

  1. Lambda>関数>my-smart-home-skillページの上部にあるARNのコピーをクリックします。
  2. Windowsのメモ帳やMacのテキストエディットなど、参照しやすい場所にARNを貼り付けて保存します。
    この値は、ステップ3: サービスエンドポイントを設定するで使用します。

このページは役に立ちましたか?

最終更新日: 2025 年 11 月 25 日