プログラマのおぐらです。
このところとんでもなく暑い日ばかりですが、みなさんいかがお過ごしでしょうか。こう暑い日が続くと、プログラミングしている間だけでも涼しさを感じられるような工夫が欲しいですね。
というわけで、今回はice_cubeという涼しげな名前のRuby用ライブラリのご紹介です。
ice_cubeは、
- 毎日
- 隔週の月曜日と火曜日
- 毎月1日と最終日
- 毎月第1と最終の火曜日
- 2時間おき
といった、「一定のルールに基づいて繰り返し処理を行う」ときにネックとなる日時の計算を一手に引き受けてくれるライブラリです。予定の管理やメールの配信といったスケジューリングの必要な機能を実装する際に利用することで、複雑なルールも容易に扱うことができるようになります。
インストール
ice_cubeはgemパッケージとして公開されていますので、インストールは以下のようにgem
コマンドで行います。
$ gem install ice_cube
ice_cubeの内部ではActiveSupportが既存クラスに対して追加するメソッドを呼び出す箇所があるのでactive_support
もインストールしておきましょう(Railsをお使いであれば既にインストールされているはずです)。
$ gem install activesupport
基本的な使い方
ice_cubeの中心となるのはIceCube::Scheduleクラスです。インスタンスを生成する際は、開始日をコンストラクタに渡します。
schedule = IceCube::Schedule.new(Time.local(2010, 7, 1))
スケジュールに特定の日付を指定して使う場合は、以下のようになります。
上記のように特定の日時を指定することもできますし、一定の条件で何度も繰り返すスケジュールを定義することもできます。
ただし、複雑なルールを定義した場合の挙動には若干バギーな部分もありますので、実際に使う前には想定した結果が返ってくることを確認しておいたほうがよさそうです。
Railsで使う
IceCube::Schedule
クラスには、スケジュールを永続化するためにYAMLやHash
に変換するメソッドも定義されています。
これらのメソッドをうまく利用することで、ActiveRecordなどのモデルにスケジュールを保持させることができます。
参考資料
ice_cube
の作者であるJohn Crepezziさんのプレゼン資料も公開されていますので、興味のある方はこちらもご覧ください。