Heroku

Herokuでスケジューラ(cron)を設定する方法【Heroku Scheduler】

Herokuには「Heroku Scheduler」というスケジューラ(cron)機能があります。今回はこの機能を使って、Heroku上にデプロイしているRailsアプリケーションにスケジューラを設定してみました。基本的には、Heroku公式サイトの手順どおりに進めれば簡単に設定できます。

アドオンをインストールする

Heroku Schedulerを使うためには、スケジューラのアドオンをインストールする必要があります。以下コマンドで、アドオンをインストールします。

$ heroku addons:create scheduler:standard --app アプリ名
view raw rails.sh hosted with ❤ by GitHub

アドオン自体は無料なのですが、アドオンをインストールするためにはクレジットカードの登録が必要です。クレジットカードの登録をしていない場合、以下のエラーが出ます。

▸ Please verify your account to install this add-on plan (please enter a credit card) For more
▸ information, see https://devcenter.heroku.com/categories/billing Verify now at
▸ https://heroku.com/verify
view raw rails.sh hosted with ❤ by GitHub

タスクを定義する

スケジューラで実行するタスクを定義します。lib/tasks/scheduler.rakeを作成し、その中にタスクを定義します。今回は、Userテーブルのレコードを全削除するタスクを作成します。タスク名は、delete_all_user_tableとしました。

scheduler.rake

desc "This task is called by the Heroku scheduler add-on"
task :delete_all_user_table => :environment do
User.delete_all
end

タスクを定義したあとは、ローカル環境でタスクの動作確認を行っておきましょう。delete_all_user_tableの箇所は定義したタスク名と置き換えてください。

$ rake delete_all_user_table
view raw rails.sh hosted with ❤ by GitHub

動作確認まで完了すれば、忘れずHerokuにアプリケーションをデプロイしておきましょう。

Heroku上でタスクの動作確認を行う

以下コマンドで、Heroku上でタスクの動作確認を行います。ここでも、delete_all_user_tableの箇所は定義したタスク名と置き換えてください。

$ heroku run rake delete_all_user_table --app アプリ名
view raw rails.sh hosted with ❤ by GitHub

スケジューラを設定する

定義したタスクをスケジューラに登録します。以下コマンドで、Herokuのスケジューラの画面を開きます。

$ heroku addons:open scheduler
view raw heroku.sh hosted with ❤ by GitHub


「Add new job」を選択します。


ローカル環境でタスクの動作確認を行ったコマンドを入力し、スケジューラの設定を行います。今回は、毎日3時にタスクを実行する設定にしました。時刻のタイムゾーンはUTC形式(日本と9時間時差がある)なので注意です。


ここまでくれば設定は完了です。お疲れさまでしたー。

ログを確認する

以下コマンドで、スケジューラでタスクが実行されたことを確認します。きちんと実行されていますね。

$ heroku logs --app アプリ名
2019-03-03T18:01:03.993968+00:00 heroku[scheduler.1429]: Starting process with command `bundle exec rake delete_all_user_table`
2019-03-03T18:01:04.719886+00:00 heroku[scheduler.1429]: State changed from starting to up
2019-03-03T18:01:08.257970+00:00 heroku[scheduler.1429]: State changed from up to complete
2019-03-03T18:01:08.186482+00:00 app[scheduler.1429]: D, [2019-03-03T18:01:08.140073 #4] DEBUG -- : SQL (3.0ms) DELETE FROM "users"
2019-03-03T18:01:08.242006+00:00 heroku[scheduler.1429]: Process exited with status 0
view raw heroku.sh hosted with ❤ by GitHub

まとめ

Herokuでスケジューラ(cron)を設定する方法でした。Heroku Schedulerを使うと簡単に設定できるのでおすすめです。

参考リンク

-Heroku

S