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コマンドはセットアップされていることを前提としています
これらの機能を利用することで、社内の他のシステムと同様に監視ツールと組み合わせて障害の検知等を行うことができます。
最新ニュース
はてなブックマーク - 新着エントリー - 総合 新着エントリー
- [第14打席]野球・文明・エイリアン - へじていと/山岸菜 | 少年ジャンプ+on 2025年8月22日 at PM 3:04
野球・文明・エイリアン へじていと/山岸菜 <毎週土曜更新!最新2話無料>淡々と日々を過ごしていた大学生の高次は、超がつくほどの野球好きであるにいなさんと出会う。野球のことしか頭にない彼女に惹かれ、順調に交際を重ねる高次だったが…?異彩三刀流ラブコメディ(?)、開幕! [JC1巻9/4発売]
- [第18話 後編]都市伝説先輩 - 平岡一輝 | 少年ジャンプ+on 2025年8月22日 at PM 3:01
都市伝説先輩 平岡一輝 <隔週土曜更新!最新2話無料>オカルトが大好きな大学1年生のもくめは、"都市伝説を引き寄せる"と噂の「くぐつ先輩」を求め、オカルトサークルに入るが――?「雀児」の平岡一輝によるオカルトコメディが遂にスタート! [JC2巻発売中]
- 司法書士から聞いた怖い話で、老人ホーム内で「認知症の高齢男性が単身の高齢女性と勝手に結婚」させられ遺産相続権を半分もってく新手の「地面師」みたいな問題が頻発してるらしいon 2025年8月22日 at PM 1:10
白いカラスの男 @kidasarada 昨日、司法書士の方から聞いた怖い話で、老人ホーム内で勝手に認知症の高齢男性が単身の高齢女性と結婚させられて、高齢女性側が遺産相続権を半分もってく問題が頻発しているらしい。周りのスタッフとかも、仲良いからとノリで婚姻届出すらしいけど、家族には知らされてない。高齢男性側の家...
- 2024年の国内アニメ制作市場は、過去最高の3621億円を記録。一方で元請制作の6割は業績悪化。制作現場ではコスト高騰と人材不足が収益を圧迫し、「利益なき繁忙」の状態に。帝国データバンクの調査で判明on 2025年8月22日 at PM 1:05
以下、プレスリリースの全文を掲載しています アニメ制作市場 2024年は3621億円 過去最高を更新 元請制作の6割が「業績悪化」アニメーター不足が顕在化帝国データバンクでは、信用調査報告書ファイル「CCR」(200万社収録)ほか外部情報をもとに、アニメ制作会社を対象とした業界調査を行った。なお、同様の調査は202...
- 走って下山し鉢合わせか 「スプレー」噴射できず 羅臼岳ヒグマ襲撃:朝日新聞on 2025年8月22日 at AM 11:55
世界自然遺産・知床にある羅臼岳(標高1661メートル)で、下山途中の男性がヒグマに襲われて死亡した事故で、亡くなった東京都墨田区の男性会社員(26)は走って移動していた際、見通しの悪い場所でヒグマと…
- 妻が痴漢に遭ったところを警官の夫が現行犯逮捕、妻の通勤に同行するために公休まで取っていた→逮捕に至るまでの経緯に様々な反応が集まるon 2025年8月22日 at AM 11:11
リンク 朝日新聞 妻から痴漢被害を相談された警察官の夫、駅で痴漢容疑者を現行犯逮捕:朝日新聞 神奈川県警に勤務する妻から痴漢被害の相談を受け、警視庁に勤務する夫が公休を取って妻の通勤に同行し、駅のホームで妻の下半身を触った容疑者を現行犯逮捕した。 県警戸部署によると、県迷惑行為防止条例違反容… 9
- 「極右排外主義が国会で多数を占めぬように」共産・田村委員長、街頭演説への抗議活動容認on 2025年8月22日 at AM 11:05
共産党の田村智子委員長は22日の記者会見で、参政党が掲げる「日本人ファースト」などの主張について「極右排外主義」と位置づけ、排外主義や差別主義に対して「知性と理性、そして理論と事実で反論していく」と宣言した。 「日本人ファースト」を掲げた参政党は、参院選で改選前1議席から14議席に躍進した。田村氏は「...
- ネットで有名人の写真を勝手にアイコンとかにしている人がいる問題|佐藤満春on 2025年8月22日 at AM 11:03
SNS全般がもう終わりだということは以前にも書いたのだが、その理由の大きな1つになっているのが、みんなあたり前のように「みんな芸能人や有名人の写真・画像を無断使用している」ことだ。真面目だなと思われるかもしれないけど真面目だ、とても真面目だと自分でも思う。 プロフィール写真やら、その芸能人がSNSに...