[自分メモ]Alexaスキル開発で外部モジュールを使うための手順

投稿者: | 2018年8月27日

Alexaのスキル開発、簡単なものであれば外部モジュールを使うこともないため、Lambdaのインラインエディタ(ブラウザ)で開発ができる。今回、どうしてもNode.jsで外部モジュールを使う必要ができたため、必要なコツを自分メモとしてまとめておく。

大まかには「プログラムファイルと同じフォルダに必要なモジュールをインストール」「まとめてZIPファイル化」「Lambdaの画面からアップロード」の3つの手順となる。

1.モジュールのインストール

LambdaのインラインエディタからAlexaスキルを開発するとき、テンプレートを選択することで自動的にSDK(v1ならalexa-sdk、v2ならask-sdk)が/node_modulesのフォルダに設置されており、パッケージ管理用のJSONファイルも生成されている。

今回はそれが使えないので、ざっくりこんな手順でファイルをそろえた。(自己流なので他にはお勧めできない)

  1. プロジェクトのフォルダを作成、その中で「npm init」を実行する
  2. 同じくindex.jsを作成して、ソースコードを記述する。文字コードはUTF-8としておくこと。
  3. 必要なモジュールをインストールする。例えばAlexa SDKのv1なら「npm install alexa-sdk」(-gオプションはつけない)
  4. 余分なパッケージがあれば削除する。そのためには、package-lock.jsonを見て依存関係を確認する。今回、alexa-sdkをインストールすると、なぜかSDK v2であるところのask-sdkもインストールされており、ファイルサイズが膨大になってしまう。そのため、alexa-sdkと、alexa-sdkのrequiresに含まれるi18-next,i18-next-sprintf-postprocessor,xml2js、さらにrequire先モジュールのrequiresに含まれるsax,xmlbuilderを残し、他の実ファイルとpackage-lock.jsonの記述を削除した。

2.まとめてZIPファイル化

注意するのは「プロジェクトのフォルダごとZIP化せず、中身のファイルやnode_modulesを圧縮する」という点。自分はWindowsのコマンドプロンプトから実行できるzipコマンドを使い、プロジェクトフォルダ内で「zip -r d:\projectname.zip index.js package.json package-lock.json node_modules\」のようにした。

3.Lambdaの画面からアップロード

あとは、Lambdaの関数の画面の「コード エントリ タイプコード」から「.ZIPファイルをアップロード」すればよい。アップロード後のファイルサイズが小さい場合は、そのままインラインエディタでも編集ができるようになる。

これでやり方がわかったので、懸案となっているAlexaスキルへの組み込みを頑張ることにする。

参考:windowsコマンドでzipする方法

[自分メモ]Alexaスキル開発で外部モジュールを使うための手順」への1件のフィードバック

  1. ピンバック: 初めてのAlexaスキルができるまで – ぼっちの王国

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください