iOSでmobile backendスクリプトを試して、アプリ内の抽選ロジックを作ってみた！

# スクリプト機能について

[スクリプト機能](http://mb.cloud.nifty.com/function.htm#script)とはニフティクラウドmobile backendが提供するサーバーサイドにスクリプトを設置できる機能です。
スクリプトって簡単なロジックって説明に書いているけど、何ができるかなと思いますね！

# スクリプトを試すこと

今回ちょっと試して、作ろうとしているのは「抽選ロジック」をサーバーに置きました！
三つの選択肢の中にランダムに選んでくれる機能を入れました。

![スクリーンショット_2016_03_29_20_06.png](https://qiita-image-store.s3.amazonaws.com/0/18698/b114ef67-6c7e-5441-03bc-5bf6fd8fe2c2.png)

# スクリプト作成

基本的にnodejsで書くことと同じく、javascriptでモジュールを書く必要があります。Queryに変数を渡し、ランダム数生産し、結果をデータストアに保存する。


```js
module.exports = function(req, res) {
  if (req.query.select1val && req.query.select2val && req.query.select3val) {
    var selectArray = [req.query.select1val, req.query.select2val, req.query.select3val];
    var selected  = selectArray[Math.floor( Math.random() * 3 )] ;
    //save to datastore
    var NCMB = require('ncmb');
    var ncmb = new NCMB("APPKEY",
                "CLIENTKEY")
    var Chose = ncmb.DataStore('ChoseResult');
    Chose.fetchAll()
         .then(function(result){
              if (result[0] != null) {
                result.setIncrement(selected, 1)
                      .update()
                      .then(function(chose){
                         res.send(selected);
                      })
                      .catch(function(err){
                         res.send("save failed"+ err);
                      });
              }
              else {
                var chose = new Chose();
                chose.set(selected, 1)
                      .save()
                      .then(function(chose){
                         res.send(selected);
                      })
                      .catch(function(err){
                         res.send("save failed"+ err);
                      });
              }

         });

  }
  else {
    res.send("Something missing error");
  }
}

```
ダッシュボードの画面にてスクリプトをアップしましょう！
GETを選択し、「実行可能」を選び、アップロードします。

![ニフティクラウドmobile_backend.png](https://qiita-image-store.s3.amazonaws.com/0/18698/b8139aeb-1584-30b0-fcd2-ec2d0660031b.png)

実行してみよう！
![ニフティクラウドmobile_backend2.png](https://qiita-image-store.s3.amazonaws.com/0/18698/3518d598-6823-e9d1-d666-07ba1aafb830.png)


# アプリでの実装

上記のスクリプトを呼び出する実装をします

```js
- (IBAction)onSelectBtn:(id)sender {

    NSString *select1val = _select1.text;
    NSString *select2val = _select2.text;
    NSString *select3val = _select3.text;
    NCMBScript *script = [NCMBScript scriptWithName:@"chusenScript.js"
                                             method:NCMBExecuteWithGetMethod];
    [script execute:nil
            headers:nil
            queries:@{@"select1val":select1val, @"select2val":select2val, @"select3val":select3val}
            withBlock:^(NSData *data, NSError *error) {
               if (error) {
                  NSLog(@"error:%@", error.description);
               } else {
                  NSLog(@"data:%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
                   _result.text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
               }
            }];
}
```


# 結果

アプリからも動くことをみよう！a,b,cを入力、Selectを選ぶと！

![ニフティクラウドmobile_backend3.png](https://qiita-image-store.s3.amazonaws.com/0/18698/2fa817db-9bd0-d2a5-4fba-3a96f6120e27.png)

どのぐらい選べられたかも保存できた！

![ニフティクラウドmobile_backend4.png](https://qiita-image-store.s3.amazonaws.com/0/18698/ee86aadf-30c8-e8e1-632c-8dacd5f54ea9.png)