C#によるAlexaスキル実装の基礎:特集:はじめてのAlexaスキル開発(1/3 ページ)
AlexaのスキルをVSとC#を使って実装してみよう。これを助けてくれる拡張機能とNuGetパッケージもあるので、とてもカンタンだ。
前回は、Alexaのスキルを開発するための基礎知識を取り上げた。今回はスキルから呼び出されて、実際に何らかの処理を行うAWS Lambda関数(以下、Lambda関数)のコードをVisual Studio 2017(以下、VS 2017)を使って実装してみよう。
今回のポイントとなるのは次のような事項だ。
- VS 2017でLambda関数のコードを記述するにはAWS Toolkit for Visual Studioが必要
- Lambda関数内でAlexaスキルからのリクエストを処理するためにAlexa.NETというパッケージを(本稿では)使用する
- Lambda関数のシグネチャに注意
- Lambda関数の内部ではリクエストの種類、さらにインテントの名前によって処理を切り分けていく
それでは上から順に見ていこう。
AWS Toolkit for Visual Studio
VS 2017を使用して、Alexaのスキルから呼び出されるLambda関数を実装するには、AWS Toolkit for Visual Studio(以下、AWS Toolkit)が必要だ。また、本稿ではNuGetで配布されているAlexa.NETパッケージを使用する。
AWS Toolkitのセットアップ
まずは、AWS Toolkitの設定から行おう。これはVS用の拡張機能として提供されている。
インストールが完了すると、VS内に次のようなタブが表示される。
このタブでは、VSからAWSにアクセスするために必要な認証情報を入力する必要がある。必要になるのはアクセスキーとシークレットキーの2つ。これらを得るには、AWSのマネジメントコンソールにアクセスして、IAM管理画面からLambda関数をデプロイ/実行するユーザーアカウントの情報を表示して[認証情報]タブで[アクセスキーの作成]ボタンをクリックする*1。
*1 IAMとは「AWS Identity and Access Management」のことで、AWS上に作成した各種リソースへのアクセスを制御するためのサービス。AWSに登録したアカウントには全てのリソースへの無制限なアクセスが認められているが、通常はそのようなアカウントを使用せずに、プロジェクトやタスクに合わせた「IAMアカウント」と呼ばれるアカウントを作成して、それを日常の作業に使用することが推奨されている。今回はAWS Lambdaへのアクセスのみを許可されたユーザーを作成して、そのアカウントを利用している。
作成したアクセスキーとシークレットキーを、VS内に表示されたタブの[Access Key]欄と[Secret Key]欄に入力する。
以上で、AWS Toolkitのセットアップが完了だ。次に、新規にLambda関数プロジェクトを作成して、C#でコードを記述してみよう。ただしその前に、C#を使ってAlexaのスキルに対応したLambda関数のコードをより簡単に記述できるように、NuGetで提供されているパッケージもインストールしておこう。
Lambda関数プロジェクトの作成とAlexa.NETパッケージのインストール
AWS Toolkitをインストールすると、VSの[新しいプロジェクト]ダイアログにLambda関数プロジェクトを作成するためのプロジェクトテンプレートが追加される。
ここでは[AWS Lambda Project (.NET Core)]を選択して、プロジェクトを新規に作成してみよう。テンプレートを選択して、必要事項を記入し(ここではプロジェクト名を「InsiderNetAlexaSkillFunc」とした)、[OK]ボタンをクリックすると、続いて次のような画面が表示される。
この画面ではLambda関数のテンプレートコード(Blueprint)を選択できる。ただし、本稿執筆時点(2018年3月5日)では、Alexaのスキルに対応したものがないので、左上にある[Empty Function]を選択して、[Finish]ボタンをクリックする。
VSでAlexaからのリクエストを処理するLambda関数をC#で実装するには、NuGetパッケージで提供されているパッケージを利用するとよい。そうしたパッケージは幾つか存在しているが、本稿ではその中でAlexa.NETパッケージを使用する。
このパッケージは、C#で書かれたLambda関数とAlexaとの間でやりとりされるリクエスト/レスポンスをラップしたものだ。GitHubで提供されているC#用のサンプルコード(「Build An Alexa Fact Skill in C#」など)のソースコードには「AlexaAPI」フォルダの下にC#のLamdba関数コードとAlexaがやりとりするためのインタフェースがソースコードの形で存在しているが、これと同等なものをNuGetパッケージ化したものと考えてもよいだろう(実際には、AlexaAPIフォルダをそのままパッケージ化したというものではないので、Alexa.NETパッケージをインストールしたプロジェクトで、前述のサンプルをそのままビルドできるというわけではない)。
NuGetを利用して、このパッケージをインストールすれば、Lambda関数を実装する準備は完了だ。
Copyright© Digital Advantage Corp. All Rights Reserved.