セカイノカタチ

世界のカタチを探求するブログ。関数型言語に興味があり、HaskellやScalaを勉強中。最近はカメラの話題も多め

マーブルワーズ

Scalaによるcronライブラリ"cronish"の紹介

Scala advent calendar 2013 15日目の記事です。

みなさん。Scalaでcronのように時間を指定して処理を実行したいことってよくありますよね。
そんな時に、使えるかもしれないライブラリを紹介する誰得記事です。

というわけで、早速GitHubのリンクを貼っておきます。
philcali/cronish · GitHub

あとは、READMEを見てください・・・だと、話が終わってしまうので、特徴など。

特徴1 Scalaで実装されている

Scalaで実装されているため、プログラムから呼び出して使うのに便利です。
実行タイミングを司る、Cronクラスと実行する処理を司るCronTaskクラス、日時を表す、Scalendar(別プロジェクトになっている)などを組み合わせて使います。

特徴2 自然言語っぽく記述できる(ただし英語)

そして、作者一押しなのが、自然な英語で、タスクの実行タイミングを記述できる機能のようです。

REDMEより

"Every day at midnight".crons == "0 0 * * *"
"Every 15 minutes at midnight on the weekend".crons == "*/15 0 * * 0,6"
"Every other minute in July at noon on the weekday".crons == "*/2 12 * 7 1-5"
"Every 1st day in April at midnight".crons == "0 0 1 4 *"
"Every day on the weekday at 3:30".crons == "30 3 * * 1-5"

なんかすごいね!
でも、ネイティブじゃないので、全然うれしくありません。残念。

そのため、cronぽい文字列をパースするパーサーを書いてみたんだけど、ここでは割愛します。
cronの文字列をパース

特徴3 ライブラリ版とアプリ版とsbt版がある

そして、このライブラリを使って実装された、アプリケーションとsbtのプラグインがあります。

philcali/cronish-sbt · GitHub

philcali/cronish-app · GitHub

これらを利用すれば、Scalaで実装された、cronっぽいタスクマネージャをすぐに利用できます。
また、実装例としても参考になります。

感想

本当は、機能強化版cronみたいなのが欲しくて、適当(適切)に検索してたら、こんなの発見しました。
開発は、現在活発じゃないようですが、シンプルな実装なので、改造のベースとしても良いかなと思いました(こなみかん)。