目次
Baas のサービス、 Parse.com があります。 Baas を使えば スマートフォンアプリ もサーバレスで開発できるというメリットがあり、 なかでも Parse.com はリクエスト数と登録ジョブ数が既定値以内なら無料で使い続けられるというメリットがあります。 今回そちらで Cloud Code の作成を行いました。 以下はその記録です。
環境
- Ubuntu 15.04
やったこと
iPhone のアプリからリクエストを送信して保存する際に、 データ内容に応じて他のカラムを設定する。
手順
Parse.com の Cloud Code のデプロイ先には次の2つの場所が選べます。
- Parse.com
- Heroku
今回は Parse.com にデプロイする方法を取りました。
セットアップ
まずは環境をセットアップする必要があります。 parse
コマンドをインストールします。 Parse.com のドキュメントに書かれている通りに行いました。
1 2 3 4 5 6 7 8 |
$ curl -s https://www.parse.com/downloads/cloud_code/installer.sh | sudo /bin/bash [sudo] password for the_user: Fetching latest version ... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 20 100 20 0 0 24 0 --:--:-- --:--:-- --:--:-- 24 ######################################################################## 100.0% Installing ... |
parse
コマンドの使い方は、 Parse.com のドキュメントにも載っていますし、 parse --help
で確認することもできます。
続いてディレクトリを用意します。 ここではアカウント情報、デプロイ先のアプリケーション、デプロイ先のサーバ(Heroku or Parse)、ローカルのディレクトリ名を入力する必要があります。 また、最後に最初のディレクトリ構成を入力するところがあります。 私はスケルトンを使用することにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
$ parse new We've changed the way the CLI works. To save time logging in, you should create an account key. Type "parse configure accountkey" to create a new account key. Read more at: https://parse.com/docs/cloudcode/guide#command-line-account-keys Email: your@email.com Password (will be hidden): Would you like to create a new app, or add Cloud Code to an existing app? Type "(n)ew" or "(e)xisting": e 1: ABC 2: DEF 3: GHI 4: JKL Select an App to add to config: 4 Which of these providers would you like use for running your server code: 1) Heroku (https://www.heroku.com) 2) Parse (https://parse.com/docs/cloudcode/guide) Type 1 or 2 to make a selection: 2 Please enter the name of the folder where we can download the latest deployed Cloud Code for your app "JKL" Directory Name: trigger_test You can either set up a blank project or download the current deployed Cloud Code. Please type "(b)lank" if you wish to setup a blank project, otherwise press ENTER: Your Cloud Code has been created at /home/the_user/current_directory/trigger_test This includes a "Hello world" cloud function, so once you deploy, you can test that it works, with the printed curl command. Next, you might want to deploy this code with: cd /home/the_user/current_directory/trigger_test parse deploy Once deployed you can test that it works by running: curl -X POST -H "X-Parse-Application-Id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -H "X-Parse-REST-API-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -H "Content-Type: application/json" -d '{}' https://api.parse.com/1/functions/hello |
これでカレントディレクトリ内に作業ディレクトリが作成されました。 その点は rails new
に似ています。
開発
今回は保存時のトリガ処理でした。 beforeSave
を使用します。 他には beforeSave
、afterSave
、beforeDelete
、afterDelete
といったトリガがあります。
コードは JavaScript で書きます。 そして、 beforeSave
の第1引数には、 クラス名を代入します。
beforeSave
は、 保存する直前に実行されます。 Webブラウザで手作業で入力する場合にも実行されますし、 他のアプリケーションからデータを挿入・更新したときにも実行されます。
コードはすべて main.js
に書くようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Parse.Cloud.beforeSave("Example", function(request, response) { var list = { "X":{ "a":"1", "b":"1", }, "Y":{ "a":"2", "b":"2", }, }; try { var valueString = request.object.get('value'); if (valueString in list) { var dataSet = list[valueString]; request.object.set("a", dataSet["a"]); request.object.set("b", dataSet["b"]); } } catch (e) { console.error(e.message); } response.success(); }); |
処理内容の説明
Example
のデータ保存時にデータを更新します。
value
フィールドの値が あらかじめ決められた list
の中にあれば フィールド a
、b
を更新するようになっています。
エラーが出ると保存できずに止まってしまうので、 エラーが出てもやりすごすための try
, catch
を用意しています。
console
はログに出力するための方法で、 console.log
、console.error
、console.warn
が利用可能です。 これらを使うと Parse.com のログ画面に出力することができます。 また、 console.error
と console.warn
はエラーログにも書き込みます。 ログの内容は コマンド parse logs
でも確認可能です。 またそれとは別に、トリガが動くとログに記録が残ります。
デプロイ
デプロイを行います。 デプロイは parse deploy
コマンドで行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ parse deploy We've changed the way the CLI works. To save time logging in, you should create an account key. Type "parse configure accountkey" to create a new account key. Read more at: https://parse.com/docs/cloudcode/guide#command-line-account-keys Email: your@mail.com Password (will be hidden): Uploading source files Uploading recent changes to scripts... The following files will be uploaded: /home/the_user/current_directory/trigger_test/cloud/main.js Finished uploading files New release is named v5 (using Parse JavaScript SDK v1.6.14) |
実際に稼働し出すまで数秒時間がかかりますが、 デプロイした後は自動的にトリガが効き始めます。
ログ
以下はログの例です。 エラーが発生した場合の例も書いています。
1 2 3 4 5 6 7 8 9 10 11 |
I2016-01-22T08:56:05.763Z]Deployed v3 with triggers: test: before_save Cloud Functions: Example E2016-01-22T08:57:02.850Z]v3 before_save triggered for test as master: Input: {"original":null,"update":{"value":"X"}} Result: TypeError: "Error Message" I2016-01-22T09:02:38.107Z]v4 before_save triggered for test as master: Input: {"original":{"createdAt":"2016-01-22T09:02:36.452Z","objectId":"OQ3dAPSrtr","updatedAt":"2016-01-22T09:02:36.452Z","value":"Y"},"update":{"value":"X"}} Result: Update changed to {"a":"1","b":"1"} |
Parse.com では cron のような Job の設定もできますが、 そのためにはまず上のようなメソッドの定義が必要です。