flowrとは?
ブログや Wiki を使うときに、「使い勝手はこちらのツールが気に入っているんだけど、機能が足りないんだよなあ」とか「ブログサービスにこの機能を追加したいんだけど、勝手にそんなこと出来ないし……」などと思ったことはありませんか?
他の人が作った Web アプリケーションやサービスの連携や拡張を行ったものの、相手がバージョンアップして仕様が変わってしまったために、作り直さなくてはならなくなったという経験はありませんか?
flowr (フラワー) はそれらの問題を解決しうる方法の一つとして構想している、「外付け可能な Web 間アプリケーションフレームワーク」です。
flowr の仕組み
flowr が対象とするのは、パーマネントリンクを持つ Web アプリケーションです。一般的なブログや Wiki、Amazon のような製品情報ページの URL が一定のルールで固定化できる EC サイトなどが当てはまります
flowr の最も基本的な特徴は、URI の指す各リソースに対しステートマシンでその振る舞いを定義し、また個々の URI に対してメタデータを付加・制御することができるというものです。
Web アプリケーション に flowr を使って機能を追加するために必要なことは、各リソースの URL を取得する方法を用意するだけです。例えばブログの場合はブログパーツを貼り付けることで flowr との連携を行います。
flowr 本体は Ruby で実装されており、アプリケーション(ステートマシンの振る舞い)は Ruby による内部 DSL で記述します。
# flowr DSL の例(部分) class SampleStateChart < StateChart # 対象URL。正規表現やロジックも記述可 target_site :url=>'http://sample.com/blog/' # 本文部&タイトル部を抽出する場合のルール setting :body_xpath=>'div.entry-body' setting :title_xpath=>'#archive-title' class NotOwnedState < State name "所有者無し" end class OwnedState < State name "所有者有り" end class ThrowDiceTransition < Transition name "さいころを振る" edge :NotOwnedState, :NotOwnedState # 遷移を定義 edge :OwnedState, :OwnedState def guard(context) # 遷移可能か判定 if context.properties.join then '進んでください' if context.properties.dice > 0 else '参加してください' end end def action(context) # さいころを振る context.properties.dice = rand(6)+1 end end class PurchaseTransition < Transition name "購入" edge :NotOwnedState, :OwnedState :
この DSL はブログパーツの動作(状態、可能な遷移、各種プロパティの表示)も記述します。アプリケーションが異なっても同じブログパーツを使用することが出来、アプリケーション毎にブログパーツを作り直す必要はありません。
flowr の応用範囲
- ブログにワークフロー機能を追加
- Wiki で編集が終わったものをブログに公開
- ブログとブログをゲーム感覚でつないでいく
今後の flowr
flowr でどういったことができるかの一例としてコンセプトアプリケーション companula(カンパニュラ) を公開しています。
この companula の整備を行いながら、flowr そのものを試してもらえるようなアプリケーションをまた別途用意して、RubyForge などで公開することを予定しています
flowr についてのその他の情報
- LL魂2007 でのプレゼン資料動画 (2007/08/06)
- S6 によるプレゼン資料 (2007/08/20)
- BPMオフでのプレゼン資料 (2008/02/29)
お知らせ
- BPMオフ会において flowr の発表を行います(2008/2/18)
- flowr サイトを公開しました(2008/1/24)
- 新ゲーム、"companula"(カンパニュラ) で遊ぼう!(2008/1/24)