Q1:Herokuでバックグラウンド処理は扱える? Webアプリケーションのような様々なユーザーと対話しながら実行されるリアルタイム処理とは異なり、バックグラウンド処理は、メールの一括送信やデータの削除処理といった、定期的に実行した方が効率的とされるプログラムの実行に利用します。 Herok...
Q1:Herokuでバックグラウンド処理は扱える?
Webアプリケーションのような様々なユーザーと対話しながら実行されるリアルタイム処理とは異なり、バックグラウンド処理は、メールの一括送信やデータの削除処理といった、定期的に実行した方が効率的とされるプログラムの実行に利用します。
HerokuにはWebアプリケーションの他にもバックグラウンドで処理する機能がいくつか提供されており、利用用途に応じて使い分けることになります。ここでは以下の2つを紹介します。
Heroku Scheduler
Heroku Schedulerは、Herokuのアドオンとして提供されており、Heroku上にデプロイしたプログラムを指定の期間で繰り返し実行させることができます。
heroku runコマンド
heroku runは、HerokuよりCLI(Command Line Interface)として提供されているHerokuツールに含まれるコマンドです。このコマンドを利用することで、Heroku上のプログラムをコマンドラインから直接実行することができます。
Herokuでのバックグランド実行の単位は、前回の記事で紹介したWebアプリケーションのプロセス数単位であるWeb Dynosと同様にWorker Dynosというプロセス単位で数えられ、1 Worker毎に$0.05/hとなっています。
Q2:ジョブの定期実行はどうやるの?
設定した期間で定期的にジョブを実行させるには、Herokuではアドオンで用意されているHeroku Schedulerを利用します。cronというアドオンも登録されていますが、現在は非推奨となっており、その代わりとしてこのSchedulerを利用することが推奨されています。
Heroku Schedulerは、指定の時間の間隔(10分、1時間、1日おき)で定期的にアプリケーション上のコマンドを実行する機能です。Ruby on RailsアプリケーションであればRakeタスク(RakeはRubyで記述されたタスクをコマンドから呼び出す機能)を作成し、Schedulerに登録して定期的に実行させます。また、スクリプトファイルを直接Schedulerに登録することができるので、直接rubyスクリプトや、bashスクリプトをバックグラウンド処理として実行させることが出来ます。
ここではRakeタスクによるSchedulerの利用を紹介します。まずはプロジェクトがSchedulerを利用できるようにherokuコマンドを利用します。
$ heroku addons:add scheduler:standard
次に、”Hello World”と出力するRakeタスクをRailsアプリケーションのlib/tasksにscheduler.rakeとして保存し、Herokuにデプロイします。
task :output_greeting => :environment do puts "rake task is running..." puts "Hello World." end
次にHeroku上のアプリケーションのHeroku Schdulerページからジョブを登録します。コマンドラインからheroku addons:open schedulerを実行することでブラウザが起動し、Heroku Schedulerページが表示されます。ここでスクリプトが定期的に実行されるジョブとして登録され、それ以降、定期的に実行されます。
後述するheroku logsコマンドを実行すると次のようにRakeタスクが実行されていることが分かります。
2012-04-30T17:33:29+00:00 heroku[run.1]: State changed from created to starting 2012-04-30T17:33:37+00:00 heroku[run.1]: Starting process with command `bundle exec rake output_greeting` 2012-04-30T17:33:38+00:00 heroku[run.1]: State changed from starting to up 2012-04-30T17:33:40+00:00 app[run.1]: rake task is running... 2012-04-30T17:33:40+00:00 app[run.1]: Hello World. 2012-04-30T17:33:41+00:00 heroku[run.1]: Process exited with status 0 2012-04-30T17:33:41+00:00 heroku[run.1]: State changed from up to complete
Q3:ジョブをHerokuの外部から実行するにはどうしたらいい?
Herokuの外部からジョブを実行するには、Q1でも紹介したHerokuツールのrunコマンドを利用します。このコマンドはHerokuの仮想環境下でコマンドを実行することができます。つまり、ローカル環境のPCなどからheroku runコマンドを使用することで、Heroku上にデプロイしたプログラムを実行することができるのです。
この機能を社内システムのバッチ処理の途中に組み込むことで、Herokuを社内のバッチ実行環境の1つとして利用することが可能となります。
以下に、Q2で使用したrakeタスク、rubyスクリプト、bashスクリプトを、ローカル環境でheroku runコマンドを実行した結果を載せます。
$ heroku run rake output_greeting Running rake output_greeting attached to terminal... up, run.1 rake task is running... Hello World.
このように、ローカル環境からHeroku上のプログラムを実行し、その結果を標準出力として受け取りますので、処理結果をローカル環境でハンドリングすることができます。
Q4:ジョブやプロセスの監視はどうやるの?
通常のシステムでは、バッチ処理実行中にプロセスが正常に稼働しているか、エラーが発生していないか、ログやプロセスを確認して監視していると思います。Herokuでもプロセスやログを確認するための機能がherokuコマンドで提供されています。
プロセスの監視
heroku psコマンド※
コンソール(Windowsならばコマンドプロンプト)を開き、対象アプリケーションのローカルgitリポジトリから「heroku ps」を実行すると、対象のアプリケーションのプロセスの実行状況を確認できます。
$ heroku ps Process State Command ------------ ------------------ --------------------------------------------- web.1 up for 8h bundle exec thin start -p $PORT -e production web.2 up for 3m bundle exec thin start -p $PORT -e production worker.1 up for 1m bundle exec stalk worker.rb
コマンドの実行結果から、ジョブごとのプロセスの状態が確認できます。実行した場合の処理のイメージは以下のようになります。
ログの監視
heroku logsコマンド※
「heroku ps」と同じくコンソールから「heroku logs」を実行すると対象のアプリケーションのサーバーログが取得できます。
$ heroku logs 2010-09-16T15:13:46-07:00 app[web.1]: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) [GET] 2010-09-16T15:13:46-07:00 app[web.1]: Rendering template within layouts/application 2010-09-16T15:13:46-07:00 app[web.1]: Rendering post/list 2010-09-16T15:13:46-07:00 app[web.1]: Rendered includes/_header (0.1ms)2010-09-16T15:13:46-07:00 app[web.1]: Completed in 74ms (View: 31, DB: 40) | 200 OK [http://myapp.heroku.com/] 2010-09-16T15:13:46-07:00 heroku[router]: GET myapp.heroku.com/posts queue=0 wait=0ms service=1ms bytes=975 2010-09-16T15:13:47-07:00 app[worker.1]: 2 jobs processed at 16.6761 j/s, 0 failed ...
「heroku logs」ではオプションに「–tail」をつけることでUnixコマンドの「tail -f <filename>」と同様に、ログを表示し終わっても終了せずに、その後、ログに追加された内容を表示することができます。
ただし、「heroku logs」はあくまでログの確認しかできないため、直接ログファイルにアクセスできません。しかしアドオンの「Loggly」を利用することで、ログを保存して参照することが可能になります。
Logglyを利用すると、HerokuのAdd onsメニューから状況や中身を参照できるようになります。また、オプションでAWSのストレージサービス(S3)への保存も可能な便利なアドオンです。
※herokuコマンドはセットアップされていることを前提としています
これらの機能を利用することで、社内の他のシステムと同様に監視ツールと組み合わせて障害の検知等を行うことができます。
最新ニュース
はてなブックマーク - 新着エントリー - 総合 新着エントリー
- 年間100本以上映画館に通う俺が選ぶ「これ観てない奴とは正直、映画の話をしたくない」20選2026年8月18日 に PM 3:04 に
「死ぬまでに観るべき映画」なんて手垢のついたテーマだと分かってる。 でもググって出てくるランキングは判で押したように無難な名作揃いで、正直あくびが出る。 だから今回は、年間100本以上を劇場で観続けてきた人間として、無難さを捨てて選んだ。 基準はひとつ。「観る前と観た後で、世界の見え方が変わるかどうか...
- 僕は「有頂天」に100億円払った|松浦勝人2026年8月18日 に PM 1:37 に
成功と有頂天についての、僕の経験と結論 人生で一番高い買い物は何か、と聞かれたら、僕の答えは決まっている。 車でも、家でもない。 有頂天だ。 僕は30代の半ば、有頂天という状態に、100億円払った。 正確に言えば、払わされた。世の中はよくできていて、調子に乗った人間のところには、あとから必ず請求書が届く。...
- 非正規が3年で雇い止めになるの「3年も経験を積んだ重要な戦力をクビにしてまた1から新人を育てるなんてしないだろう」と思って作られてそうだけど、現実は全然違った2026年8月18日 に PM 12:52 に
ひきこうもり @Hikikomori_ 非正規職員が3年間で雇い辞めになるの、 「職場の経験を積んだ重要な戦力を、小銭を惜しんで正社員にせずクビにして、また新しい人に1から再教育コストをかけるような馬鹿な事はしないだろう」 と思ってそういう決まりになったんだろうけど、その馬鹿な事を平気でやってしまったのが現実なん...
- 楽天グループ株式会社の防衛分野に関する一部報道について|楽天ドローン-Rakuten Drone2026年8月18日 に PM 12:48 に
※楽天ドローン株式会社が提供するサービス分野とは異なります。 ※本フォームからいただいた内容については、楽天グループ株式会社の担当部署に共有させていただきます。返信は行っておりませんのであらかじめご了承ください。
- 開発14年の大作宇宙MMO『Star Citizen』公式放送の実演プレイが“バグまみれ”で困惑広がる。開発チームも「もう締めて」と気まずい空気 - AUTOMATON2026年8月18日 に PM 12:39 に
デベロッパーのCloud Imperium Gamesは8月6日、『Star Citizen』の公式番組「Star Citizen Live」を放送した。この中で開発者らは、テスト環境での不具合で批判が相次いだ「Siege of Orison」のプレイを実演。しかし依然として不具合は目立ち、開発者間の気まずいやり取りも見られたことで、ユーザーの間には困惑が広が...
- 体重50キロの秋田犬が用水路に入って犬ダムを作るも水圧に押し流される動画がとっても夏の風景2026年8月18日 に PM 12:22 に
秋田犬 銀✩.*˚ @gin20200122 秋田犬の銀6歳♂ 現在体重50.15Kg! (2020年1月22日生まれ) 私と銀の誕生日が同じです♪ 2歳7ヵ月でぶどう膜炎とぶどう膜皮膚症候郡(フォ-クト小柳原田病)と仮診断。もう目は見えていません… お返事が疎かになり気味ですが、しっかり見せて頂いております!いつもありがとうございます(*ᴗˬᴗ)”
- 米国30年金利をどう考えるべきか?|村松 一之(フォーライクス 代表)2026年8月18日 に AM 11:54 に
米国30年金利5.3%だけを見て「危機」と判断してよいのか米国の長期金利上昇が市場の大きな焦点となっている。8月17日の米国債市場では30年債利回りが5.31%まで上昇し、2007年以来約19年ぶりの高水準となった。一方、10年債利回りも4.725%程度まで上昇した。 30年金利が5%を大きく上回るという数字だけを見れば、住宅...
- ロシア、プーチン氏の北方領土訪問批判で日本大使呼び出し・抗議2026年8月18日 に AM 11:52 に
【8月18日 AFP】ロシア外務省は18日、ウラジーミル・プーチン大統領が先週、北方領土・択捉島を初めて訪問したことを日本側が批判したことを受け、駐ロシア日本大使を呼び出し、強く抗議した。 先週13日のプーチン氏による北方領土訪問を受け、日本政府は駐日ロシア大使を呼び出し、抗議した。今回、ロシア側もそれに対...




