サーバー構築不要!スマートフォンアプリ向けの新クラウド

トップ >ドキュメント >スクリプト(iOS):基本的な使い方

スクリプト(iOS)

基本的な使い方

スクリプト機能について

スクリプト機能は、JavaScriptで記述したスクリプトをニフクラ mobile backendに登録し、
スクリプトの実行結果をアプリで受け取る機能です。

スクリプトの作成

スクリプトファイルはJavaScriptファイル(.js)として作成してください。
スクリプトファイルは1ファイルあたり8KBまでご利用頂けます。
スクリプトのタイムアウトは30秒となっております。
スクリプトで利用できるNode.jsのバージョンは以下の通りです。

  • latest
  • 6.11.1
  • 6.9.1
  • 6.3.0
  • 5.11.1
  • 5.7.0
  • 5.6.0

※CVE-2017-11499 に対応した 6.11.1 以上のバージョンをご利用ください。(6.11.1 より前のバージョンは後方互換性のためにのみに利用可能としています。)
※latest を指定した場合、スクリプトシステムのアップデートによりバージョンが変動します。必要に応じて固定のバージョンをご指定ください。

モジュール化

スクリプトは、1モジュール1ファイルとして扱われます。
以下のようにmodule.exportsで関数をモジュールとして定義してください。

function myFunc(req, res) {
  res.send("Hello World");
}

module.exports = myFunc;

匿名関数を用いて以下のようにも定義できます(推奨)。

module.exports = function(req, res) {
  res.send("Hello World");
}

module.exportsについての詳細はNode.js Documentationをご参照ください。

リクエスト/レスポンス

モジュール化された関数にはExpress.js準拠のrequestオブジェクトとresponseオブジェクトの2つの引数が渡されます。

  • requestオブジェクトのプロパティ
名前 説明
request.query クエリストリングで渡されたパラメーターのオブジェクト
request.body リクエストボディで渡されたパラメータのオブジェクト(MethodがPOST / PUTの場合のみ)
request.headers リクエストヘッダーのオブジェクト
request.header(key) keyで指定されたリクエストヘッダーの値を返す
request.get(key) keyで指定されたリクエストヘッダーの値を返す
request.url APIリクエスト時のURL
request.method APIリクエスト時のメソッド
  • responseオブジェクトのプロパティ
名前 説明
response.set(key, value) 引数として渡された値をレスポンスヘッダーに追加
response.get(key) keyで指定されたレスポンスヘッダーの値を返す
response.status(status) 引数として渡された数値をステータスコードとして指定
response.send(data) 引数として渡された文字列をレスポンスボディとして返却
response.json(data) 引数として渡されたJSONをレスポンスボディとして返却
ライブラリの使用

スクリプトのコード中では対応しているライブラリを使用することができます。
以下はJavaScript SDKを用いて、データストアから値を取得し、ランダムに返すサンプルスクリプトです。

module.exports = function(req, res) {
  var NCMB = require('ncmb');
  var ncmb = new NCMB(YOUR_APPLICATION_KEY, YOUR_SECRET_KEY)

  var Item = ncmb.DataStore('Item');
  Item.fetchAll()
        .then(function(items){
          item = items[Math.floor(Math.random() * items.length)]
          res.status(200)
              .json(item);
        })
        .catch(function(err){
          res.status(500)
              .json({error: 500});
        });
}

対応ライブラリ

現在は以下のライブラリが使用可能です。

ライブラリ名 version require 説明
ncmb_js 2.1.3 ncmb ニフクラ mobile backendのSDK
bookshelf 0.10.2 bookshelf ORMライブラリ
co 4.6.0 co 非同期処理を記述しやすくするライブラリ
fluent-logger 2.2.0 fluent-logger Fluentdのライブラリ
knex 0.12.6 knex SQLビルダーのライブラリ
lodash 4.16.4 lodash ユーティリティライブラリ
moment 2.15.2 moment 日付型を操作するためのライブラリ
mqtt 1.14.1 mqtt MQTTを利用するためのライブラリ
mysql 2.11.1 mysql MySQLのクライアントライブラリ
pg 6.1.0 pg PostgreSQLのクライアントライブラリ
redis 2.6.2 redis Redisのクライアントライブラリ
socket.io 1.5.1 socket.io Websocketなどを利用するためのライブラリ
superagent 2.3.0 superagent ajaxリクエストを容易に生成するためのライブラリ
underscore 1.8.3 underscore ユーティリティライブラリ
niftycloud-auth 0.1.2 niftycloud-auth ニフティクラウド APIの認証を行うライブラリ

対応ライブラリは随時追加予定です。

スクリプトをローカルでデバッグする

新しくnode.jsのプロジェクトを作成します。

以下のpackage.jsonを作成して、npm installを実行してください。
(node.jsをローカル環境にインストールする必要があります)

{
  "name": "ScriptSample",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "Apache License 2.0",
  "dependencies": {
    "express": "^4.14.0",
    "body-parser": "^1.15.2",
    "ncmb": "2.1.2",
    "superagent": "2.2.0"
  }
}

index.jsを作成し、同じ場所にデバッグするスクリプトを用意します。

var express = require('express');
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.json());

//デバッグするスクリプトをモジュールとして読み込む
var moduleForGetMethod = require('./testScript_GET.js');

var apiVersion = "/2015-09-01";
var servicePath = "/script";

//読み込んだスクリプトをハンドラーとして定義
app.get(apiVersion + servicePath + '/testScript_GET.js', moduleForGetMethod);

//expressでサーバーを起動
app.listen(3000, function () {
    console.log('app listening on port 3000');
});

node index.jsコマンドでサーバーを起動し、curlコマンドを利用してスクリプトを呼び出します。

$ curl "http://localhost:3000/2015-09-01/script/testScript_GET.js"
hello

スクリプトのアップロード

スクリプトのアップロードはダッシュボードから行います。
一覧画面にあるアップロードボタンをクリックします。

スクリプト一覧画面

アップロード画面が表示されたら、作成したスクリプトを選択してアップロードします。

スクリプトのアップロード画面

アップロード時には以下の設定が可能です。

  • ファイル名
  • メソッド:スクリプト実行のリクエストを受け付けるHTTPメソッド
  • ファイルの状態:スタンバイを選択すると、ダッシュボードでのみ実行可能になります。
  • バージョン:スクリプトを実行するNode.jsのバージョンを指定できます。
  • パーミッション:スクリプトを実行できる権限

スクリプトを選択したあとの設定画面

パーミッションの設定画面ではすべてのアプリ利用者や特定の会員、ロールに対して
スクリプト実行の権限を設定することができます。

スクリプトのパーミッション設定

スクリプトをアプリから呼び出す

作成したスクリプトをアプリから呼び出す場合には、NCMBScriptクラスを利用します。

NCMBScript *script = [NCMBScript scriptWithName:@"testScript.js"
                                         method:NCMBExecuteWithGetMethod];

[script execute:nil
        headers:nil
        queries:@{@"objectId":@"testId"}
      withBlock:^(NSData *data, NSError *error) {
          if (error) {
              NSLog(@"error:%@", error.description);
          } else {
              NSLog(@"data:%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
          }
      }];

スクリプトをダッシュボードで実行する

実行するスクリプトを選択します。
スクリプトの選択画面

詳細情報タグから実行タグに切り替えます。
以下の設定が可能です。

カテゴリ 説明
Body POST,PUT時のみ設定可能。スクリプト実行時のリクエストボディ
Header スクリプト実行時のリクエストヘッダー
Query スクリプト実行時のクエリパラメーター

スクリプトの実行タグ画面

実行ボタンクリック後にポップアップが表示されます。
確認を行ってから実行してください。
スクリプトのポップアップ画面

実行後、スクリプトの結果が画面に表示されます。
スクリプトの結果画面

スクリプトの更新

更新するスクリプトを選択し、右上の変更ボタンをクリックします。
スクリプトの選択画面

ポップアップが表示されますので、更新する内容を設定し変更ボタンをクリックします。
ファイル本体を更新する場合は、「ファイルの本体の変更」の「変更する」にチェックを入れ、
ファイルを再アップロードします。
スクリプトの選択画面

スクリプトの実行ログを確認する

実行ログのタグに切り替えます。
以下の設定で絞り込み検索が可能です。

カテゴリ 説明
取得件数 ログの取得件数(デフォルト最新20件)
期間 ログの取得対象日時  
ステータスコード スクリプト実行時のステータスコード  

スクリプトのログ画面

ログの取得ボタンをクリックするとログが表示されます。
スクリプトのログ出力画面

お探しの内容が見つからなかった場合はユーザーコミュニティ もご活用ください。(回答保証はいたしかねます)
なお、 Expertプラン以上のお客様はテクニカルサポートにてご質問を承らせて頂きます。

推奨画面サイズ1024×768px以上

ページの先頭へ