Node.js

Prev Next

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という名前のアクションを作成する手順は、次の通りです。

cloudfunctions-exmaple-nodejs_v2_01_ko

NodeJSモジュールでパッケージングしてアクションを作成

コードを作成していると、複数のファイルを作成する必要があったり、基本的に提供されているライブラリ以外に別のライブラリの使用が必要となる場合があります。このような場合は、関連する複数のファイルを1つのモジュールにパッケージングし、そのファイルを利用してアクションを作成できます。簡単なユースケースを通じて NodeJSモジュールでパッケージングしてアクションを作成する手順は、次の通りです。

  1. json形式の package.jsonファイルを作成します。

    {
      "name": "my-action",
      "main": "index.js",
      "dependencies" : {
        "left-pad" : "1.1.3"
      }
    }
    
  2. 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;
    
  3. npm installコマンドで left-padライブラリをインストールし、ZIPファイルを作成します。

    $ npm install
    $ zip -r action.zip *
    
    • ZIPファイルを作成する際、package.jsonファイルは必ず ZIPファイルのルート(root)に位置する必要あり
  4. コンソールで、3.の ZIPファイルを使用してアクションを作成します。
    compute-15-2-102_ko

  5. コンソールでアクションを実行し、結果を確認します。

注意

現在、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秒ほど違うことが確認できます。
    compute-15-2-104_ko