投稿された動画の変換や、一日一回のリマインドメール送信といった、即時に終わらない処理や、定時に起動して実行するジョブ。Webベースのサービスと、こういったジョブを連携させたい場合、たとえフレームワークをベースにWebのプログラムを組んでいたとしても、それらのフレームワークをはみ出してUNIXの機能を使う方法が最もオーソドックスだと思います。
たとえば、データベースやファイルシステムやソケットに特定の「合図」を書き込んで、それを見張っている何かがジョブを起動したり、たとえばcronを使って定時にプロセスを起動したりするやり方です。
しかし、これらの方法はオーソドックスであるという利点を持っている反面、
- フレームワーク側からジョブのステータスを得るための標準的な方法がない
- cronやシェルといったフレームワークを記述する言語と異なる仕組みを利用しなければならないため、環境に依存しやすい/円滑なデプロイメントの妨げになる
といった欠点もはらんでいます。
こうした欠点を補うために、フレームワークとシームレスに連動するようなバックグラウンドジョブ実行の機構がいくつか開発されています。これらの機構を利用すると、たとえばWebインターフェイスから動画変換の処理をキックし、変換状況の進捗をグラフ表示するといった処理が一貫性のある方法で記述できます。
この連載では、私の独断と偏見でRuby on Rails + BackgrounDRbの例を見て行きたいと思います。
BackgrouDRbを選ぶ理由としては、比較的ポピュラーであること、定時実行と逐次実行両方の機構をもっていることが大きいのですが、もう一つ重要な理由として、BackgrounDRbの前バージョンである0.2系列と、2007年12月20日にリリースされた1.0の間で大きな仕様変更が行われているようで、最新版の機能について紹介されている文書があまり見あたらなかったので私自身困ったということが挙げられます。