※この記事はすでに内容が古くなっています。こちらをご覧ください。

前回の記事を書いてからまだ 2 日しか経っていないが、継続的な開発の結果 Automatic Ruby の汎用フレームワークとしての完成度が高まってきたので、改めて記事を書きたいと思う。

いつもどおり最新の仕様は日本語ドキュメントに書かれているので詳しくはそちらを読んで欲しい。

レシピとは
Automatic Ruby はインスパイア元の Plagger と同様、プラグインの組み合わせで何でもできる無限の可能性を秘めたフレームワークである。このプラグインの組み合わせを定義するのがレシピと呼ばれる YAML 形式のファイルである。

以下にレシピの例を紹介する。

plugins:
  - module: SubscriptionFeed
    config:
      feeds:
        - http://example.com/rss2
        - http://hogefuga.com/feed

  - module: FilterIgnore
    config:
      link:
        - hoge
        - fuga

  - module: StorePermalink
    config:
      db: permalink.db

  - module: PublishHatenaBookmark
    config:
      username: your_hatena_id
      password: your_password

このサンプルレシピの例では
1. フィードを購読し
2. 無視キーワードを含む URL を除外し
3. パーマリンクをデータベースに保存し
4. はてなブックマークをする
という一連の処理をプラグインの組み合わせで実現している。

このように、プラグインと設定情報をレシピに記述するだけで複数のプラグインの組み合わせにより自由な処理を実現できる。たとえば Twitter に投稿する Publish::Twitter プラグインを作成し上記のレシピに記述すれば、自動的に記事を Twitter に投稿する自動処理が完成する。 Gmail に送信する Publish::Gmail プラグインを作成しレシピに追加すれば、フィードの記事を Gmail で読めるようになる。他にもリンクを元にブログ記事全文を取得したり、電子書籍の形式にして Kindle で読めるようにしたり、データベースにブログ記事全文を保存してローカルのアプリで読めるようにしたりなど、プラグインの組み合わせ次第で無限の可能性を実現することができる。

一度でも Plagger を利用したことのある人なら、レシピの形式が Plagger とそっくりであることに気づいたことだろう。内部実装は大きく異なるが、少なくとも外部設計においては Plagger に近づいてきたと思う。

プラグインをつくりましょう

フレームワークのコアの部分は最初のコミットに比べるとだいぶ形になってきたが、そもそも開発を開始してまだ数日しか経っていないしプラグインが全然足りない。そんなわけで開発に協力して欲しい。プラグインの実装方法は日本語ドキュメントに書かれている。簡単なものなら数行でも実装可能なはずなのでべんりなスクリプトを作っては片っ端から Automatic Ruby に組み込んでいきたい。

コアを改善して欲しい

フレームワークのコアの部分についてまだ膨大な改善の余地があると思う。特に一番改善したいのはプラグイン全体を再帰的に require している部分である。このため不要なコードもすべて読み込むことになり非常に富豪的な処理になってしまう。理想としてはレシピで必要としたプラグインのみを読み込む仕組みを作ることである。このあたりは「動くコード」によって添削して欲しい (意訳: パッチをください) 。それ以外にも効率の良いコード、性能を改善するコード、安定性を高めるコードなど何でもパッチウェルカムである。

その他の TODO

まずテストがまだ無いのでテストコードが必要である。幸いなことに、プラガブルな設計であるためテストは基本的に引数と戻り値をひたすらアサートしていけば良く楽である。それからドキュメントが日本語しか無いので英訳が得意な人がいれば歓迎である。その他、単にこのフレームワークの知名度を広めてくれるだけでも貢献と言えよう。そんなわけで広く協力してもらえると幸いである。

2/22 20:52 追記
初めて Pull Request をいただきました! 実に素晴らしい。ありがとうございます。 daic-h さんを Collaborators に追加しましたのでばりばりコードを書いていただけるとありがたいです。また他にも開発に協力してくださる人がいましたら追加しますので声をかけてください。よろしくお願いします。

Posted on by 774