githubはじめました。delayed_job を fork しました。

最近 fork をしたいと思ったり、ソースをみたいプロジェクトがかなりの確率で github という事が多かったので、一念発起して github にアカウントを作りました。

http://github.com/mitoma/

そんで手始めに delayed_job を fork してみました。
https://github.com/mitoma/delayed_job/tree/v2.0

delayed_job ってのは ruby (主にrails)で非同期処理を実行するのに便利なプラグインなのだけど、ちょっと不便なところがあります。
例えば非同期処理を行いたいジョブがインポート、エクスポート、メール送信とか複数種類あった場合、普通に実装してくと全部の非同期処理を1種類のワーカーが実行してしまいます。そうすると、メール送信とか非同期処理であってもなるべく早いタイミングで処理してほしいジョブがインポートやエクスポートなどの時間のかかる処理によってブロックされ、ユーザの待ち時間に大きな影響を与えてしまいかねません。

今の delayed_job の場合、それぞれのジョブのワーカーを分けようとすると、プライオリティを工夫し、例えばメール送信はプライオリティは20、その他は0などとプロジェクトで決めごとをし、以下のようにワーカーを分けて立ち上げる事になります。

./script/delayed_job --min-priority 20 --max-priority 20 start
./script/delayed_job --min-priority 0 --max-priority 0 start

で、ワーカーを複数立ち上げる事自体は異論は無いのですが、プライオリティを本来の意味で使っていないのが気持ち悪い。と言うわけで、ジョブグループの概念を delayed_job に付け足して、以下のようにジョブグループ毎にワーカーを立ち上げることができるように修正しました。

./script/delayed_job --job-group mail start
./script/delayed_job start

これでプライオリティでワーカーを分割するよりも少しマシになりました。ヤッホー。

と、ここまで修正したものの、実は業務で使う予定はまったくありません。

こういうオープンソースのプロダクトを使う会社って、「せっかくオープンソースなんだから手を入れてナンボ!」って思っている会社もあれば「世界の優秀なプログラマーが作ったものだから中途半端に手を入れず、いつでもバージョンアップに追従できるようにしておく」って考えの会社もあります。
自分はどちらかというと前者の発想になってしまいがちなのですが、どちらかというと後者の思想を持った会社に在籍しているので、そうすると「世界の優秀なプログラマーに提案をして、本家に取り入れてもらう」というのがちょっと回りくどいようでもベストウェイなのかなぁと思います。

次の難関はどうやって英語で本家に pull request を投げるかです。