読者です 読者をやめる 読者になる 読者になる

Ruby で Plagger の二番煎じを作って gem を公開してみた

ruby

Plagger の二番煎じを作ってみた

いや、違うな。Pragger や Yapra や、最近では Automatic Ruby なんてのも出たから、五番煎じくらいか。

ソースコードは GitHub で公開している。

だいぶ前に Python でも作ったけど、性懲りもなく、今度は Ruby で作ってみた。機能をかなり割り切っているので、Plagger の名前を出すのも恐れ多い気がしてきた。

名前の由来

付けようと思っていた名前が既に使われていたので、スマホに入っている曲名から響きが綺麗な単語を選んで付けてみた。ちなみに Every Little Thing の曲からじゃない。『壊れやすい』という意味だけど、初めて作る gem に付ける名前としては自虐的でオモシロイかも。

作った動機

Plagger とかの設定ファイルを YAML じゃなくて Ruby スクリプトで書けたらいいよね」って思ったので、gem 作成の勉強として一から挑戦してみた。作った動機はたったそれだけ。その設定ファイルを記述するための内部 DSL は、Rake や Rack を意識している。

特徴

  • Plagger 同様、プラグインを組み合わせて処理を自動化
  • 本体は極限までシンプル
    • 依存する gem 無し
  • ディレクトリやローカルの gem からプラグインを自動でロードしたりしない
    • 設定ファイルは Ruby スクリプトなんだから、require すればいい
  • デーモンも無い
    • 定期的に実行したいなら cron やタスクスケジューラーで実行

使い方

簡単に説明すると、

# プラグインの読み込み
require "fragile/plugin/rss_input"
require "fragile/plugin/select_filter"
require "fragile/plugin/console_output"

# パイプラインの定義
pipeline "console_sample" do
  use "rss_input", :url => "http://d.hatena.ne.jp/griefworker/rss"
  use "select_filter", :proc => lambda{|x| x[:title].include?("[Ruby]")}
  use "console_output"
end

といった内容のレシピファイルを作成し、

fragile -f <recipe_path> <pipeline_name>

で実行するだけ。

ドキュメントちゃんと書かないとな…。

プラグイン

RSS を取得してフィルタしてメール送信するのに使えるものを用意してみた。本体に同梱しているプラグインは、これまたどれも依存する gem 無し。他の gem に依存するプラグインは別のプロジェクトにする予定。

今後の予定

自分で使っていて不具合を見つけたり、欲しいプラグインが思いついたときに、コツコツ開発していくと思う。とりあえず、DSL の実装がイマイチなので修正したいかな。