- 印刷する
- PDF
Node.js
- 印刷する
- PDF
Classic/VPC環境で利用できます。
Node.js形式のアクションを作成して様々な形で活用する方法と、その例を紹介します。
アクションの作成
JavaScriptで作成したコードは複数の関数を含めますが、Main関数はプログラムのエントリーポイントとして宣言される必要があります。 以下は、この点を考慮して名前と場所を含めて「Hello World」を出力するJavaScript形式の簡単なサンプルコードのhello.js
です。
function main(params) {
var name = params.name || 'World';
var place = params.place || 'Naver';
return {payload: 'Hello, ' + name + ' in ' + place + '!'};
}
以下は、上記で作成してコードを使用してコンソールで「hello」という名前のアクションを作成する手順です。
Node.jsモジュールにパッケージ化してアクション作成
コードを作成していると、複数のファイルを作成したり、基本的に提供されるライブラリの他に別のライブラリを使用する場合があります。 こういった場合は、関連するファイルを一つのモジュールにパッケージ化し、パッケージ化されたファイルを利用してアクションを作成できます。 簡単な例を通じてNode.jsモジュールにパッケージ化してアクションを作成する手順を確認すると、以下のとおりです。
- JSON形式の
package.json
ファイルを作成します。{ "name": "my-action", "main": "index.js", "dependencies" : { "left-pad" : "1.1.3" } }
- 「left-pad」を利用する簡単な「index.js」ファイルを作成します。
function myAction(args) { const leftPad = require("left-pad") const lines = args.lines || []; return { padded: lines.map(l => leftPad(l, 30, ".")) } } exports.main = myAction;
npm install
コマンドで「left-pad」ライブラリをインストールし、ZIPファイルを作成します。$ npm install $ zip -r action.zip *
- ZIPファイルの作成時、「package.json」ファイルは必ずZIPファイルのルート(root)に配置
- コンソールで、3.のZIPファイルを使用してアクションを作成します。
- コンソールでアクションを実行して結果を確認します。
現在、npm install
の実行時にインストールされたDependencyのうち、バイナリファイルが含まれた場合は、アクションが正常に実行されません。
非同期アクションの作成
非同期(Asynchronous)で動作するアクションを作成できます。 非同期で動作するJavaScript関数は、main
関数の終了後にActivationの結果を返さなければならない場合があります。 このような場合、アクション内でPromise
を返すことで解決できます。 非同期アクションのasyncAction
を作成するサンプルコードは以下のとおりです。
サンプルコードのように実行すると、リソースを独占して課金額が膨らむ原因になり得ます。ご注意ください。
function main(args) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve({ done: true });
}, 2000);
})
}
main
関数でPromise
を返しています。 これはアクションの実行がまだ完了しておらず、未来に完了することを意味します。setTimeout
関数により、2秒後にCallbackが実行されます。 Callback内のresolve()
関数が実行される時点でPromiseが満たされ、アクションの実行が正常に完了します。reject()
関数を呼び出す場合、アクションが異常完了したことが分かります。- コンソールで同様に
asyncAction
を作成して実行した後、アクションの実行結果情報を確認すると、以下のようにstart
とend
の間のTimestampが約2秒ほどずれていることが確認できます。