Alexaのスキル開発、簡単なものであれば外部モジュールを使うこともないため、Lambdaのインラインエディタ(ブラウザ)で開発ができる。今回、どうしてもNode.jsで外部モジュールを使う必要ができたため、必要なコツを自分メモとしてまとめておく。
大まかには「プログラムファイルと同じフォルダに必要なモジュールをインストール」「まとめてZIPファイル化」「Lambdaの画面からアップロード」の3つの手順となる。
1.モジュールのインストール
LambdaのインラインエディタからAlexaスキルを開発するとき、テンプレートを選択することで自動的にSDK(v1ならalexa-sdk、v2ならask-sdk)が/node_modulesのフォルダに設置されており、パッケージ管理用のJSONファイルも生成されている。
今回はそれが使えないので、ざっくりこんな手順でファイルをそろえた。(自己流なので他にはお勧めできない)
- プロジェクトのフォルダを作成、その中で「npm init」を実行する
- 同じくindex.jsを作成して、ソースコードを記述する。文字コードはUTF-8としておくこと。
- 必要なモジュールをインストールする。例えばAlexa SDKのv1なら「npm install alexa-sdk」(-gオプションはつけない)
- 余分なパッケージがあれば削除する。そのためには、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スキルへの組み込みを頑張ることにする。
ピンバック: 初めてのAlexaスキルができるまで – ぼっちの王国