LoginSignup
7
4

More than 5 years have passed since last update.

Alexaプログラムをlambda-localを使ってローカル実行する方法

Last updated at Posted at 2019-01-19

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

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4