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コマンドはセットアップされていることを前提としています
これらの機能を利用することで、社内の他のシステムと同様に監視ツールと組み合わせて障害の検知等を行うことができます。
最新ニュース
はてなブックマーク - 新着エントリー - 総合 新着エントリー
- 商船三井のLNG船がホルムズ海峡を通過 日本関係船舶では初:朝日新聞2026年4月3日 に AM 11:04 に
イランにより事実上封鎖されているホルムズ海峡を、商船三井のLNG(液化天然ガス)船が3日(日本時間)までに通過したことが同社への取材でわかった。中東情勢の悪化の影響で、ホルムズ海峡以西のペルシャ湾内…
- いやいや、アメリカとイスラエルが勝手に始めた戦争でなんで政府が無能無..2026年4月3日 に AM 11:03 に
いやいや、アメリカとイスラエルが勝手に始めた戦争でなんで政府が無能無策なせいで医療も生活も窮乏しなきゃならんの 民間でいくら頑張っても限度があるんだわ 経済産業省の資料見たことあるか? 数年前から世界の資源獲得競争が激しくなってる、米中は国家規模でカネ出して囲い込み始めてる、いうて日本はハシタ金を補...
- 迫りくる麻疹の流行 求められる対策とは(高山義浩) - エキスパート - Yahoo!ニュース2026年4月3日 に AM 10:42 に
沖縄県は4月3日、今年初めてとなる麻疹(はしか)の感染者が確認されたと発表しました。感染が判明したのは、県内在住の20代男性です。男性は3月28日に県外から沖縄へ戻った後、発熱などの症状が出現し、検査の結果、感染が確認されました。 現時点での聞き取り調査では、観光客のように県内を広範囲に移動した形跡は見...
- アルテミス計画を行うNASAの管制室にセーラームーンのキャラ・アルテミスのぬいぐるみが置いてあった「リアルかぐや姫の恋人」2026年4月3日 に AM 10:32 に
NASA @NASA Next stop: lunar flyby. The Orion spacecraft recently ignited its main engine on the service module for about six minutes to provide about 6,000 pounds of thrust. This maneuver not only sets the Artemis II astronauts on the path to the Moon. It also puts the crew in a free return traje...
- 初出社後の新社会人「こんな疲れてんのに家帰ってご飯作れるわけなくて草 毎日これって本気なの?」先輩たちが毎日の乗り切り方を伝授2026年4月3日 に AM 9:35 に
初出社を遂げた新社会人は疲労困憊しており、帰宅して料理する気力がないことやこれからこの生活が続くことに絶望すると投稿。多くの新社会人が共感。家事・育児・通勤をこなすワーママやきれいな暮らしを維持する人に尊敬の念を抱きつつ、無理だと感じている。先輩たちは何事もはじめるときが一番大変だと語りつつ、自...
- 構成団体として対応真摯に/辺野古沖事故 田村委員長が哀悼の意 | しんぶん赤旗|日本共産党2026年4月3日 に AM 9:17 に
日本共産党の田村智子委員長は2日の国会内での記者会見で、米軍新基地の建設が強行されている沖縄・辺野古沖での船の転覆事故について問われ、亡くなった2人に心からの哀悼の意を表明し、「ご遺族、事故に遭われた高校生のみなさん、ご家族の方々に心からお見舞い申し上げます」と述べました。 転覆した船2隻の運航主...
- 戦争犯罪を痛快がるトランプ氏、少なくとも短期的には処罰できず2026年4月3日 に AM 9:03 に
【4月3日 AFP】イランの電力網を破壊し、9000万人の国民を窮地に追い込むと脅迫するドナルド・トランプ米大統領は、戦争犯罪に当たる可能性のある行為を容認するだけでなく、痛快がるという前例のないことをしている。 専門家らは、トランプ政権が国際規範の維持を担う国際機関の弱体化に尽力していることから、少なくと...
- 158撃目 - ワンパンマン - FC2ホームページ2026年4月3日 に AM 8:48 に
読み込み中…





