定期的にmBaaSを実行してデータを作成したり、集計したいというニーズはあるかと思います。残念ながら現在のニフクラ mobile backendでは定期実行(タイマー、cronとも呼びます)の仕組みは用意されていません。そこで使ってみたいのが、無料で使えるHerokuです。
Herokuのスケジュール機能を使うことで、定期実行処理が簡単に実現できます。今回はその実装方法を紹介します。
必要なもの
- Herokuのアカウント
- Herokuコマンド
- ニフクラ mobile backendのアカウント
スクリプト例
今回はJavaScript SDKを使います。スケジュールで実行するので、Expressなどは使いません。
const NCMB = require('ncmb'); const config = require('./config'); const ncmb = new NCMB(config.applicationKey, config.clientKey); (async () => { try { const push = new ncmb.Push; await push .set('immediateDeliveryFlag', true) .set('message', '何かお困りですか?') .set('target', ['ios', 'android']) .set('searchCondition', { 'createData': { '$gte': {"__type":"Date", "iso": new Date(new Date() - 7 * 24 * 60 * 60 * 1000).toISOString()} } }) .send(); console.log('送信しました'); } catch (e) { console.log(e); } })();
同じディレクトリで npm init
し、 npm i ncmb -S
でJavaScript SDKをインストールします。
Herokuへデプロイ
Herokuコマンドがインストールされていれば、デプロイは簡単です。まず最初に heroku login
で認証します。上記のスクリプトがあるディレクトリはGit管理されていることとします。そして、そのディレクトリで heroku create
を実行します。
そうするとGitリポジトリにHerokuのリポジトリが登録されますので、デプロイします。
$ git push heroku master
これで準備完了です。試しにコマンドを打って、ちゃんと動くか確認します。
$ heroku run node push.js Running node push.js on ⬢ pacific-fortress-82011... up, run.7015 (Free) 送信しました
ちゃんと動いたらWebのプロセス自体不要なので、削除しておきます。
$ heroku ps:scale web=0
スケジューラーのインストール
続いてスケジューラーをインストールします。
$ heroku addons:open scheduler
これでHerokuの管理画面が開きますので、スケジュールを設定します。例えば node push.js
を毎日1回動かすといった具合です。
後は予定された時間になったらNCMBへのアクセスがあることを確認できれば完了です。
まとめ
Herokuを使うことで無料で定期的に実行するスクリプトが実現できます。無料枠の中では、長時間実行されるものは向きませんが、ちょっとしたスクリプトであれば問題ないでしょう。ぜひNCMBと組み合わせて、バッチ処理を実現してください。