ニフクラmBaaSお役立ちブログ

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

Herokuを使ってmBaaSを定期実行する

mBaaSから定期的にデータを取得したり、逆にデータを載せたいといった要望を聞くことがあります。今のところ定期実行させるような機能はないのですが、Herokuを使うことで同様の操作を簡単に行えるようになります。

Herokuに配置するスクリプトについて

Herokuにデプロイするコードですが、次のようになります。今回は簡単なスクリプトなので index.js のみがソースファイルになります。

.gitignore
index.js
node_modules
package.json
Procfile

index.jsの内容は次のようになります。Herokuの環境設定を使っているので、アプリケーションキーとクライアントキーは隠蔽できます。

var NCMB = require('ncmb');

var application_key = process.env.APPLICATION_KEY;
var client_key      = process.env.CLIENT_KEY;
var ncmb = new NCMB(application_key, client_key);

var Heroku = ncmb.DataStore('Heroku');
var heroku = new Heroku;
heroku.set('text', 'Hello, from heroku.');
heroku.save()
  .then(function(o) {
    console.log(o)
  });

Procfileは次のようになります。

cron: node index.js

今回はJavaScript SDKを使っていますので、npmを使ってインストールします。

npm init
npm install ncmb --save

.gitignoreは次のようになります。

node_modules/

これで準備完了です。

Herokuにデプロイする

Herokuへのデプロイはソースコードをプッシュするだけです。

git push origin master

その後でアプリケーションキーとクライアントキーを環境変数として設定します。

heroku config:set APPLICATION_KEY=d2...c0
heroku config:set CLIENT_KEY=f9...cc

次にスケジューラーをインストールします。そして、そのままスケジューラーの設定画面を開きます。

heroku addons:create scheduler:standard
heroku addons:open scheduler

設定する内容は次の通りで、 node index.js を10分ごとに実行とします。

最後にWeb側のプロセスを消します。Cronだけにすれば課金もされないので安心です(実行時間が長いと課金されます)。

heroku ps:scale web=0

管理画面で確認する

mBaaSの管理画面に入るとデータストアにデータが追加されているのが分かります。

データの作成時間を見ると分かりますが、10分ごとの実行と指定してもかなりばらつきがあります。正確に10分単位という訳にはいかないので注意が必要です。ただ、1日1回のバッチ処理などであれば、Herokuを使ってデータを取得して外部ストレージに保存するといった処理もできるでしょう。

ぜひお試しください!