最新の値上げをチェックして賢くお買い物!値上げニュース
Webクリップ

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コマンドはセットアップされていることを前提としています

これらの機能を利用することで、社内の他のシステムと同様に監視ツールと組み合わせて障害の検知等を行うことができます。

最新ニュース

  • ちょっとしたライブラリを書いた話: 処理の前提変数確保 - Nealle Developer's Blog
    on 2025年6月11日 at AM 8:06

    こんにちは、ニーリーの佐古です。 現在開発速度や開発者体験の向上のため、取り組みの諸々を遂行しています。 事前準備がかさばって本題にフォーカスできない問題 さあ本題です。本題までが長い話は読む気がなくなりますね。 成長期のプロダクトをDjangoで開発していると あまり型情報が信用できなかったりそもそもなか...

  • 国民民主、山尾志桜里氏の公認取り消しへ 参院選比例代表 | 毎日新聞
    on 2025年6月11日 at AM 8:05

    国民民主党は11日、参院選比例代表で立候補を予定していた山尾志桜里元衆院議員の公認を取り消す調整に入った。党関係者が明らかにした。5月14日の両院議員総会で擁立を決めたが、過去の不倫疑惑などを巡りインターネット上で批判が続出し、党支持率の下落につながったとの声が出ていた。 山尾氏は今月10日に記者会見を...

  • ソフトバンク 業務委託先から個人情報13万件余流出か | NHK
    on 2025年6月11日 at AM 7:51

    通信大手ソフトバンクは、業務委託先の会社から携帯電話の契約者の氏名や住所、それに電話番号など13万7156件の個人情報が流出した可能性があると発表しました。 個人情報の中には、クレジットカードや口座情報などの情報は含まれていないということです。 会社は「重大な事象が発生したことを真摯(しんし)に受け止め...

  • 損害保険ジャパン 不正アクセスで最大1750万件の情報漏えいか | NHK
    on 2025年6月11日 at AM 7:40

    損害保険大手の損害保険ジャパンは、ことし4月に社内のシステムが外部から不正なアクセスを受け、契約者の名前や住所、電話番号、メールアドレスを含む個人や企業の情報が漏えいした可能性があると発表しました。 会社によりますと、漏えいした件数は最大で1750万件にのぼるということです。 会社は、現時点では外部への...

  • 自動車部品大手マレリ 連邦破産法適用を米裁判所に申請 | NHK
    on 2025年6月11日 at AM 7:19

    自動車部品メーカー大手のマレリホールディングスは、日産自動車をはじめ取引先の業績悪化に伴って資金繰りが厳しくなり、金融機関との債務の減免をめぐる調整も難航したため、11日、日本の民事再生法にあたる連邦破産法第11条の適用をアメリカの裁判所に申請しました。事業を継続しながら負債を整理し、再建を目指すと...

  • 損保ジャパン、顧客情報1750万件漏洩の可能性 不正アクセスで - 日本経済新聞
    on 2025年6月11日 at AM 7:18

    損害保険ジャパンは11日、社内のシステムから約1750万件の顧客情報が漏洩した可能性があると発表した。4月17日から21日にかけ、外部から侵入した第三者が顧客情報にアクセスできる状態になっていた。現時点で不正に利用された事実は確認できていないという。企業への不正アクセスとしては異例の規模といえる。外部から閲...

  • 24TBのHDDが安くなったと話題になる→「これ持って新幹線に乗ればかなり速い速度でやり取り出来る」と閃く人が登場「結局手渡しが1番速い」「速いけど遅延がすごいぞ」
    on 2025年6月11日 at AM 7:09

    ツクモネットショップ @Tsukumo_netshop 【大容量は正義】 24TBで5万切り…! Seagate ST-24000DM001 今なら在庫あります shop.tsukumo.co.jp/goods/07636491… pic.x.com/hkVqv9Zv0z 2025-06-10 18:31:42

  • 無許可でリフォーム工事 “スーパーサラリーマン”に有罪判決 | NHK
    on 2025年6月11日 at AM 6:54

    「スーパーサラリーマン清水」を名乗り、無許可でリフォーム工事を請け負った罪に問われた被告に対し、東京地方裁判所は、「高額の売り上げを優先し、違法と知りながら犯行を繰り返した」として執行猶予の付いた有罪判決を言い渡しました。 SNSで「スーパーサラリーマン清水」と名乗っていた清水謙行被告(50)は国や自...



出典:公式総合情報データベースサイト「coron」 執筆者 : .

管理人のアンテナlive!


coronでは、サイトの利用状態の記録解析やパーソナライズ機能を利用するために、Cookieなどを使用してアクセスデータを取得・利用しています。
利用を続ける場合、これらの情報の取得・利用及びウェブサイト利用規約に同意したものとみなします。以下から詳細及びオプトアウトについてご確認ください。

ウェブサイト利用規約    
掲載されている広告について    
推奨環境