FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

サーバとニフティクラウド mobile backendを連携させてみよう(Ruby編)

ニフティクラウド mobile backendはmBaaSの一つになりますので、アプリを開発する際に全てのバックエンドを任せたくなります。しかし既にサーバがある場合はどうでしょうか。スイッチングコストが障壁になってしまうでしょう。

しかしニフティクラウド mobile backendには位置情報検索、プッシュ通知、ユーザ管理など魅力的な機能もたくさんあります。そこでお勧めしたいのが必要な機能だけニフティクラウド mobile backendを使う、つまり既存サーバとの連携です。

そこで役立ちそうなのがニフティクラウド mobile backendが提供するREST APIです。Web APIを使ってニフティクラウド mobile backendにアクセスできるのでシステム連携も実現できます。

REST APIについて

REST APIはこちらにドキュメントがあります。iOS/Android/JavaScript向けに提供されているSDKも基本的にこのREST APIをラッピングしてコールする仕組みになっています。そのため各SDKでできることは基本的にREST APIを通して操作できます。

  • データストア
  • 会員管理
  • プッシュ通知
  • ファイルストア

について、登録/取得/更新/削除/検索ができるようになっています。

今回は拙作であるRuby用ライブラリ ncmb-ruby-client を使った操作法を紹介します。先日紹介したRubyからのアクセス法をgemとしてまとめたものになります。

ncmb-ruby-clientについて

ncmb-ruby-client は ニフティクラウド mobile backendの操作を一通りできるRubyライブラリを目指しています。とは言え、現時点ではデータストアの検索とデータ登録くらいしかできません。

恐らく肝になるのはシグネチャの生成です。アプリケーションキー、クライアントキー、メソッド、パス、クエリーパラメータなどを使って生成します。

REST API リファレンス:シグネチャの生成方法 | ニフティクラウド mobile backend

シグネチャ、アプリケーションキー、シグネチャ生成時の時刻をリクエストヘッダーに追加することで、REST APIの認証が可能です。

例えばデータ取得は次のように行います。

@ncmb = NCMB.init(application_key: 'application_key', 
                  client_key: 'client_key'
                  )
queries = {:count => "1", :limit => "20", :order => "-createDate", :skip => "0"}
todo_class = @ncmb.data_store 'TODO'
todo_class.get queries
-> {"count":5,"results":[{"objectId":"VwswoCe7PEuSbGEU","createDate":"2014-05-07T12:03:37.428Z","updateDate": …

クエリーに条件を当てはめて get メソッドを実行すればデータの取得が可能です。

さらにデータの登録も同様です。

queries = {todo: "Test task"}
todo_class = @ncmb.data_store 'TODO'
response = todo_class.post queries

データの取得、登録は簡単に処理できるようになるかと思います。

利用例(位置情報検索)

ニフティクラウド mobile backend のデータストアは位置情報検索に対応しています。そこで今回はFoursquareからデータを取得してそれをデータストアに保存し、検索する処理を行ってみたいと思います。

データはFoursquareのベニュー検索APIを使っています。こちらは認証不要で使えるAPIです。

このJSONデータをデータストアに保存します。

venues_class = @ncmb.data_store 'Venues'
json['response']['venues'].each do |venue|
  params = {
    name: venue['name'],
    location: {
      "__type" => "GeoPoint",
      "latitude" => venue['location']['lat'],
      "longitude" => venue['location']['lng']
    }
  }
  puts venues_class.post(params).body
end

ここで大事なのは位置情報としてデータを保存する場合は、__type/latitude/longitudeを指定して保存する必要があるということです。これにより、位置情報検索が使えるようになります。

データを保存したら、次に検索を行います。

params[:where] = {
  "location" => {
    "$nearSphere" => {
      "__type" => "GeoPoint",
      "longitude" => 139.745433,
      "latitude" => 35.691152
    },
    "$maxDistanceInKilometers" => 10
  }
}
puts venues_class.get params
-> {"results":[{"objectId":"plcaEQmqglsPd8W4","createDate":"2014-05-20T08:04:37.582Z","name":"機械振興会館",…

これは緯度経度が35.691152/139.745433である位置情報を中心として、最大10km内にあるデータを一覧取得しています。検索条件として使えるオペランドはこちらのドキュメントを参考にしてください。このスクリプトはexamplesの中にあります。


ncmb-ruby-clientはまだ実用的というレベルではなく、今後機能追加やエラー処理追加などを行っていきます。Ruby on RailsやRubyスクリプトからニフティクラウド mobile backendを手軽に使えるようになれば、既存サーバと連携させるなどmBaaS利用の幅が広がるのではないでしょうか。

f:id:mbaasblog:20180927104348p:plain

moongift/ncmb-ruby-client