4.2. Cloud Functionsコード実装

4.2.1. ハンドラ実装

Cloud Functionsのコード実装を行います。

ここでは、"Hello world, [名前]!!!" という応答を返す単純なロジックを作成してみます。 ("名前" は引数として呼び出し時に引き渡します)

エディタを開き index.js という名前のファイルを以下の内容で作成してください。

'use strict';

exports.sayHello = (event, context) => {
    let name = "John Doe";
    if (context.clientContext.queryParams.name) {
        name = context.clientContext.queryParams.name[0];
    }

    const response = {
        message: "Hello world, " + name + " !!!"
    };
    context.succeed(response);
};

上記 sayHello が「ハンドラ」です。ハンドラがコードのエントリポイントになります。 ハンドラ関数は exports で外部公開する必要があります。

このハンドラでは、context.clientContext.queryParams.name[0] で名前を受け取り、メッセージを response.message に 格納して返却しています。

ハンドラには以下2つの引数が引き渡されます。

  • event: 呼び出し元が指定したリクエストボディが格納されます。
    • Content-Type が "application/json" の場合、リクエストボディの JSON オブジェクトをパースしたものが引き渡されます。
    • これ以外の場合は、リクエストボディを格納した Buffer が渡されます。
  • context: ランタイム情報が格納されます。

context にはいくつかのメソッドやオブジェクトが定義されています。 ハンドラの処理が正常に完了した場合は context.succeed() を、異常終了した場合は context.fail() を呼び出す必要があります。

context の詳細は コンテキスト を参照してください。

4.2.2. コードのパッケージングと登録

コードができたので、モバイルバックエンド基盤サーバに登録します。

まず package.json ファイルを確認し、"main" プロパティに "index.js" が指定されていることを確認してください。 サーバは main に指定されたコードを最初に実行します。

確認したら以下手順でコードをパッキングします。

$ npm pack

"hello-1.0.0.tgz" というファイル名でコードが生成されるはずです。 (ファイル名が異なる場合は、package.json の name, version の値を確認してください)

次にコードをサーバに登録します。

$ nebula create-code

create-code コマンドを実行すると、package.json の内容に従い hello-1.0.0.tgz ファイルをサーバにアップロードします。

コードはファイルバケットに格納されます。デフォルトでは "CUSTOM_CODE" という名前のバケットに格納されます。

コードが登録されたかどうかは "nebula list-code" で確認できます。 コードを削除したいときは "nebula delete-code <ファイル名>" で削除してください。