1. はじめに
今回は、自分への備忘録も兼ねて、lambda-localを用いて、Alexaプログラム(Node.js)をローカル環境で実行する方法をお伝えします。
Alexaプログラムに限らず、簡単なLambda関数であればローカル実行できると思いますで、参考にしてください。
参考文献
今回の記事は、以下のサイトを参考に、2019年1月時点の開発環境にアレンジし、まとめたものとなります。
1-1. この記事を読んでできること
- lambda-localを使ってAlexaプログラム(Node.js)をローカル環境で実行できるようになる。
1-2. 前提条件
- nodeコマンドがローカル環境にインストールされていること。
- npmコマンドがローカル環境にインストールされていること。
- Alexaスキルをローカル環境で作成(ask new)できること。
1-3. 注意事項
- 特になし。
2. lambda-localモジュールのインストール
- ローカル環境でLambda関数(Node.js)を実行するために、npmコマンドを利用しlambda-localをインストールします。
コマンドライン
#lambda-localのインストール
$ npm install -g lambda-local
3. テスト用Request JSONの作成
- AlexaプログラムへのリクエストJSONを作成します。
- 作成場所は、index.jsと同じフォルダ階層に「test」フォルダを作成し、「test」フォルダ内に「LaunchRequest.json」ファイルを作成します。
- 今回のRequest JSONは、「ローンチリクエスト(LaunchRequest)」となりますが、JSONの記述を変えることで「インテントリクエスト」や「セッションエンドリクエスト」などにも対応することができます。
LaunchRequest.json
{
"version": "1.0",
"session": {
"new": true,
"sessionId": "session0001",
"application": {
"applicationId": "amzn1.echo-sdk-ams.app.0001"
},
"attributes": {},
"user": {
"userId": null
}
},
"request": {
"type": "LaunchRequest",
"requestId": "request0001",
"timestamp": "2018-08-11T13:04:56+0900"
}
}
4. 必要モジュールのインストール
- ローカル環境でLambda関数(Node.js)を実行するために、npmコマンドを利用し、利用しているモジュールをインストールします。
コマンドライン
#package.jsonファイルがある場合、package.jsonと同じフォルダ内で実行
#node_modulesフォルダが自動作成され、利用しているモジュールがインストールされる
$ npm install
コマンドライン
#package.jsonファイルがない場合、index.jsと同じフォルダ内で実行
#package.jsonファイルの作成
$ npm init
#利用しているモジュールのインストール
#例:ask-sdk
#node_modulesフォルダが自動作成され、モジュールがインストールされる
$ npm install ask-sdk
5. Alexaスキルのフォルダ構成
- プロジェクト名:hello-world
ディレクトリおよびファイル構成図
custom/
├─ node_modules/
| └─ ask-sdk(など)
├─ test/
| └─ LaunchRequest.json
├─ index.js
├─ package.json
└─ package-lock.json
6. Alexaプログラムのローカルテスト実行
- index.jsと同じフォルダ階層内から、lambda-localコマンドを実行する。
コマンドライン
$ lambda-local -l index.js -h handler -e ./test/LaunchRequest.json
info: START RequestId: 99999999-9999-9999-9999-999999999999
info: End - Message
info: ------
info: {
"version": "1.0",
"response": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak>Welcome to the Alexa Skills Kit, you can say hello!</speak>"
},
"reprompt": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak>Welcome to the Alexa Skills Kit, you can say hello!</speak>"
}
},
"shouldEndSession": false,
"card": {
"type": "Simple",
"title": "Hello World",
"content": "Welcome to the Alexa Skills Kit, you can say hello!"
}
},
"userAgent": "ask-node/2.3.0 Node/v10.15.0",
"sessionAttributes": {}
}
info: ------
info: Lambda successfully executed in 56ms.
4. おわりに
いかがだったでしょうか?ご参考になりましたでしょうか?
もしかしたら間違ってるよ、とかありましたら、コメント頂けると幸いです。
2019/01/19 TAKAHIRO NISHIZONO