先日リリースされたスクリプト機能はiOS/Android/Unity/JavaScript SDKそれぞれがすでに対応しています。今回はJavaScript SDKからの使い方、スクリプト機能の使い方例を紹介します。
インストールについて
スクリプト機能はバージョン2.1.0以降が対応しています。インストールは下記の3つの方法があります。
- スクリプトをダウンロード
- Bower
- npm
スクリプトをダウンロードする場合はこちらのファイルをダウンロードしてください。最新版のJavaScript SDKになります。後はHTML側で読み込めばOKです。
<script src="./ncmb.min.js"></script>
Bowerを使う場合は下記のコマンドでデプロイされます。
bower install ncmb
npmの場合も同様ですが、Webブラウザから使う場合は別途Browserifyを実行する必要があります。または node_modules/ncmb/ncmb.min.js
を使います。
browserify -r -p licensify -t [ uglifyify -x .js ] -o ncmb.min.js lib/ncmb.js
スクリプトのアップロード
スクリプトはNode.jsで書く必要があります。その点においてJavaScript SDKを使っている場合はアプリとサーバ側が共通したコードで書けるので手軽です。記述方式は module.exportsを使います。
例えば以下のコードはデータストアのItemクラスを検索してランダムにデータを返すというものです。YOUR_APPLICATION_KEY、YOUR_SECRET_KEYはそれぞれ読み替えてください。
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}); }); }
スクリプトを実行するHTTPメソッドはGET/POST/PUT/DELETEと、RESTfulに選ぶことができます。適切なメソッドを選択してください。
アプリ側からはデータとして、 req.query(GETメソッド)と、req.body(POST/PUT/DELETEメソッド)が利用できます。また、ヘッダーを独自に追加することも可能です。例えばコードは次のようになります。
ncmb.Script .set({"user-agent": agent}) // リクエストヘッダを指定 .data({"name": name}) // リクエストボディを指定 .exec("POST", "formScript.js") .then(function(res){ // 実行後処理 }) .catch(function(err){ // エラー処理 });
なお、ファイル名は拡張子 .js をつけるようにしてください。
メソッドチェーンについて
ncmb.Script.exec()を呼び出した後の .then
および .catch
メソッドはそれぞれサーバ側で 200番台のステータスを返した場合と、400/500番台のステータスを返した場合とで分かれます。200番台の呼び出しは正常終了になりますので then
メソッドに対してサーバ側から指定したデータが入ってきます。
res.status(200).json(item);
200はGETを含めた正常終了、201はPOSTメソッドにおけるデータ作成完了時に利用することが多いです。
エラーの場合はエラー内容に応じて適切なHTTPステータスを選びましょう。スクリプト機能で利用するであろう主なエラーとしては、
- 400:リクエストエラー。バリデーションエラー含む。
- 401:認証エラー
- 403:アクセス権限エラー
- 404:リソースがない場合
- 409:データの重複
が考えられます。500番台はサーバエラーなのでmBaaS全体のエラーとして使うのが良いでしょう(スクリプトでは使わない方が良いでしょう)。
実行権限について
スクリプトには実行権限が付与できます。アプリから利用する場合は全員に実行権限をつけるべきでしょう。ただし、管理者であったり、特定のユーザだけが実行できるスクリプトも必要だと思いますので、その場合は適切なユーザに対して実行権限を付与してください。
追加モジュールについて
現在のスクリプト機能では、NCMBとSuperAgentモジュールが呼び出せるようになっています。SuperAgentはAjaxを含めたHTTPリクエストが簡単に使えるようになるモジュールです。
例えばこれを使うとユーザ登録があったタイミングでSlackにメッセージを飛ばすといった処理も作れるようになります。
var request = require('superagent'); request .post('https://hooks.slack.com/services/99999999/XXXXXXXX/9999999999999999') .send({"text": "ユーザ登録がありました"}) .end(function(err, res){ console.log(res); })
こういった処理の場合、ユーザ登録処理自体をスクリプトで行った上で、Slackにメッセージを飛ばすと言った形にするのが綺麗かと思います。
スクリプト機能によって、データストアや会員管理と連動した仕組みが簡単に作れるようになりました。アイディア次第で外部サービスや自社システムと連携した仕組みも簡単に作れるようになるはずです。
ぜひスクリプト機能を使いこなしてください。