だるろぐ

だるいぶろぐです

PlackとText::Xslateでケータイからtwitterするwebアプリを書いた

公式のケータイ用のサイトが重いし落ちてる事が多いのでさっさと書いた。
色々足りんけど自分用に使うにはこれで十分。
GitHub - hirafoo/filmoa: simple twitter web-app for mobile phone
なおPlackとText::Xslate使ったとか書くと凄く聞こえるけど実際は触り程度にしか使ってない。

追記

Config::Pitでconsumer keyとかtwitterでoauthするときに必要な情報を管理してます。
当然そんなものリポジトリに同梱しないしサンプル書くのもめどいので、これを使いたい珍しい人はコード読んで自分で用意するよろし。簡単だから。

構成

psgiファイルが1個と、他はテンプレのファイルのみ。
何か軽くてさくっと使えるWAF無いかなーと探したけどいいのがsinatraしか無かった。
やりたい事は極わずかだったので、んじゃpsgi1個でいいか、と。
静的ファイルとか無いし。そもそもフロントエンドが無い。

ディスパッチ

Plack::Builder のbuilder関数はネイティブで Plack::App::URLMap をサポートしてる。とpodに書いている。
別にbuilder関数の中には1個のpsgi appしか書いちゃいけないなんてことはないので、ディスパッチテーブルがこの程度ならこれでいい。

builder {
    mount "/"         => builder { $filmoa->gen_app("index") };
    mount "/mentions" => builder { $filmoa->gen_app("mentions") };
    mount "/retweets" => builder { $filmoa->gen_app("retweets") };
    mount "/messages" => builder { $filmoa->gen_app("messages") };
    mount "/update"   => builder { $filmoa->gen_app("update") };
    mount "/reply"    => builder { $filmoa->gen_app("reply") };
};

$filmoa->gen_app はpsgi appを返す。

ツイート中のリンク

以下参照。
http://developer.cybozu.co.jp/kazuho/2010/09/twitter-xss-f73.html

TTライクにXslateを使う

Text::Xslate::Syntax::TTerse という素敵なモジュールのおかげで、TTの文法が大体使える。
INCLUDEやWRAPPERの引数にコーテーションが必要だとか、FOREACHはFORにするとかその程度の差異。
あとテンプレートの中で変数を宣言するときは、TTではMETAとかSETを使って

[% META
  hoge = "_hoge_"
  bar = "_bar_"
%]

とか書けばラッパーの中とか外とかINCLUDEしたファイルとかあちこちでグローバルに共有してしまうが、Xslateだと

[% WRAPPER "_wrapper.html" WITH hoge = "_hoge_", bar = "_bar_" -%]

みたいに、WRAPPER/INCLUDEの引数として渡すし、スコープもレキシカルになる。


余談。別件でTTからXslateに移行する作業をしていたのだけど、

とつぶやいてたら
と作者さんから言われた。ただこれには事情があって
という。俺はテンプレートをまたがない場合でも、ビューで変数宣言はあんまりしたくない派。


うんまぁ大した事してないので書く事も無い。終わり。


ところでケータイサイトで「アクセスが集中して繋がりにくいです」って画面をよく見るけど、実際はあれはアクセス集中なんかしてなくて単に裏でエラー起きてるけど素直にそう言わずにアクセス過多って言ってるだけの場合が多い。俺からすれば、それが原因で繋がらないって言っちゃう方が恥ずかしい。