ニフクラ mobile backendは3月末で終了します。
ニフクラ mobile backendからの移行先として、お勧めしているのがParse Serverです。設計思想が近く、変更するコード量が少なく済むのではないかと思います。
NCMBではスクリプト機能と呼んでいたFaaS(Function as a Service)ですが、Parse ServerではCloud Codeと呼ばれています。JavaScriptで書かれた関数をサーバー側で実行できます。
今回はParse ServerのCloud Codeの使い方を解説します。
起動時の設定
Parse Serverはデフォルトでは ./cloud/main.js
にCloud Codeを配置します。このファイルを作成し、関数を書いていきます。これを変える場合には、起動時のオプションで指定してください。
環境変数の場合は PARSE_SERVER_CLOUD
にて指定します。コードの場合は以下のように cloud
キーで指定します。
const express = require('express');
const { ParseServer } = require('parse-server');
// Parse Serverの起動オプション
const config = {
// 省略
};
const app = express();
const api = new ParseServer({...config, {
cloud: './path/to/cloud.js' // cloudキーで指定
});
api.start()
.then(() => {
app.use('/parse', api.app);
});
const port = 1337;
app.listen(port, function() {
console.log('parse-server-example running on port ' + port + '.');
});
関数の作成
コードの基本の形です。 Parse.Cloud.define
を使い、1つ目の引数が関数名になります。最終的に文字列や数字を返せば、それがレスポンスとなります。
Parse.Cloud.define("averageStars", async (request) => {
const query = new Parse.Query("Review");
query.equalTo("movie", request.params.movie);
const results = await query.find();
let sum = 0;
for (let i = 0; i < results.length; ++i) {
sum += results[i].get("stars");
}
return sum / results.length;
});
関数の呼び出し
関数の呼び出しは、各SDKを利用するのが簡単です。
Javaの場合
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("movie", "The Matrix");
ParseCloud.callFunctionInBackground("averageStars", params, new FunctionCallback<Float>() {
void done(Float ratings, ParseException e) {
if (e == null) {
// ratings is 4.5
}
}
});
Swiftの場合
PFCloud.callFunction(inBackground: "averageRatings", withParameters: ["movie":"The Matrix"]) {
(response, error) in
let ratings = response as? Float
// ratings is 4.5
}
Unityの場合
IDictionary<string, object> params = new Dictionary<string, object>
{
{ "movie", "The Matrix" }
};
ParseCloud.CallFunctionAsync<IDictionary<string, object>>("averageStars", params).ContinueWith(t => {
var ratings = t.Result;
// ratings is 4.5
});
JavaScriptの場合
const params = { movie: "The Matrix" };
const ratings = await Parse.Cloud.run("averageStars", params);
NCMBとの相違点
NCMBのスクリプトとParseのCloud Codeは、基本的な使い方は似ています。似ているのは以下の点です。
- HTTP呼び出し
- Node.jsが利用できる
違う点は以下になります。
- ParseにはRubyが利用できません
- ParseはHTTPメソッドを指定する必要がありません
- ParseのCloud RunではSDKが利用しているアプリで初期化済みです
まとめ
Parse ServerのCloud RunはNode.jsを手軽に実行するのに便利です。もちろんTypeScriptで書いてmain.jsにトランスパイルすることもできます。ただし、ParseのJavaScript SDKは型情報がないので、自作する必要があります。
データの管理方法などはParse ServerとNCMBで似ています。他のmBaaSと比べると、全体の修正量はそこまで多くないと思われます。載せ替え先として検討に挙げてください。