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コマンドはセットアップされていることを前提としています
これらの機能を利用することで、社内の他のシステムと同様に監視ツールと組み合わせて障害の検知等を行うことができます。
最新ニュース
はてなブックマーク - 新着エントリー - 総合 新着エントリー
- AWS Summit Japan 2025 参加レポート - Techouse Developers Blogon 2025年7月4日 at AM 5:56
はじめに こんにちは、株式会社 Techouse でエンジニアをしている ReLU、AsagaKosho、miyatis、Kai です! 2025年6月25日、26日に開催された AWS Summit Japan 2025 に参加してきました! 弊社からは、総勢 15 名のエンジニアが参加しました! 日々の業務で利用している AWS の最新情報をキャッチアップするとともに、AW...
- ガソリンスタンドで働いていたら、競走馬を乗せた車が来て、『馬が喉に飯をつまらせて、水を飲ませて吐き出させないと命に関わるからホースを貸してくれ』と言われた話on 2025年7月4日 at AM 5:27
enter😈🍙🍃🐚超超超超ゲマズ2両日参戦! @enter_inop12 ガソスタに競走馬乗せたトラック来て、『馬が飯つまらして4にそう!水飲ましまくって吐き出させないと命に関わるからホースを貸してくれ!』とか、言われて今、自分の表情これ pic.x.com/iwT4HPXH5m 2025-07-01 13:32:05
- 60時間溶かして愛憎の果てにたどり着いた『シャインポスト Be Your アイドル!』のヤバさ(褒め言葉)を伝えたいon 2025年7月4日 at AM 5:18
KONAMIの新作タイトルが、アイドル育成ゲームの皮を被ったガチめに難しい経営シミュレーションゲームらしい──。 その噂を頼りに『シャインポスト Be Your アイドル!』のプレイを始めた。 結果、難しいことには嘘偽りはなかった。本作のゲームとしての難易度はハードコア仕様と言っていい。ほとんどの人が初回プレイ時に...
- 〈“変態教員グループ”事件〉生徒のリコーダーに体液を混入させた小学校教師は保釈後泣きながら「承認欲求を満たしたかった」少林寺拳法仲間は「プライベートは謎」「翼をくださいをMDで…」(集英社オンライン) - Yahoo!ニュースon 2025年7月4日 at AM 5:07
女児児童を盗撮し、画像や動画を共有した変態教師グループが逮捕され、はや一週間が経過した。この事件については、三原じゅん子こども政策担当大臣も「人権をないがしろにする行為、決して許されないものである」と強く非難したのも記憶に新しい。逮捕されたグループの一味で悪質だと言われているのは、15歳の少女のリ...
- 米環境保護局、政策批判の公開書簡に署名した職員約140人を休職扱いにon 2025年7月4日 at AM 4:40
自身の指名公聴会で証言する米環境保護局(EPA)のリー・ゼルディン長官=1月/Ting Shen/AFP/Getty Images (CNN) 米環境保護局(EPA)の職員らが、環境や公衆衛生に関するトランプ政権の政策に対して懸念を表明する公開書簡を発表した。これに対してEPAは、書簡に署名した職員のうち約140人を休職扱い...
- 《万引き事件で逮捕の往年の大投手》「不人気球団のコーチをやると解説の仕事がなくなる」「60歳を超えたら評論家は厳しくなる」米田哲也氏が明かす切実な収入事情on 2025年7月4日 at AM 3:58
歴代2位のプロ通算350勝、19年連続2ケタ勝利といった数々の大記録を持つ元阪急などの米田哲也氏(87)が、今年3月に兵庫県尼崎市のスーパーで「缶チューハイ2本」を万引きした事件。米田氏は窃盗罪で略式起訴され、尼崎簡裁が罰金20万円の略式命令を出した。販売価格303円の品に手を出すほど、米田氏は経済的に追い込ま...
- 《万引きで逮捕された元プロ野球・米田哲也氏が独占告白》「家賃は10年払っていない」「罰金は留置所で知り合った人に借りた」…取材に明かした別の“万引き事案”on 2025年7月4日 at AM 3:57
歴代2位のプロ通算350勝、19年連続2ケタ勝利といった数々の大記録を持つ元阪急などの米田哲也氏(87)が、今年3月に兵庫県尼崎市のスーパーで「缶チューハイ2本」を万引きした事件は衝撃をもって報じられた。米田氏は窃盗罪で略式起訴され、尼崎簡裁が罰金20万円の略式命令を出している。事件後、尼崎市内で初めて独占取...
- ゆきおとこ伝~地下芸人列伝 / ゆきおとこ伝~地下芸人列伝~ - 原田高夕己 | webアクションon 2025年7月4日 at AM 3:56
ゆきおとこ伝~地下芸人列伝~ 原田高夕己 光ある所に陰がある。華々しいお笑い界の陰で、小さな舞台でネタを披露し続ける芸人たちはいつしか「地下芸人」と呼ばれるようになった。その地下芸人の中でも「大御所」と呼ばれる「ゆきおとこ」の一代記。