Dancerはじめました

 

この前のYAPCで当たり前のように話していたDancerという軽量フレームワークをうかつにも知らなかったのとdotCloudを使おうと思ったらサンプルがDancerだったのでちょっと調べてやってみました。

まずDancerとは

  • Dancerは、超軽量Perlフレームワーク
  • RubyのSinatraプロジェクトの移植として始まったが、独自路線で成長している
  • Dancerアプリは、スタンドアロンWebサーバーとして、またはPSGIを使用する任意のWebサーバーから実行することができる
  • DancerでのWebアプリケーション構築は、ライブラリのロードやルートハンドラーの定義と同じくらい簡単で、ルートハンドラーを定義し、様々なテンプレートエンジンでビューを描画できるようにし、静的ファイル提供をサポートし、セッションサポート、より多くの機能のためのエレガントな構文を提供

ふむふむこれは良さそうだ。

cpanm Dancer

でDancerをインストールしたら

dancer -a hoge

これでひな形完成。。簡単すぎる。。

後は

perl bin/app.pl

でサーバーが起動してhttp://localhost:3000を表示すると最初の画面が表示されます。

チョー簡単

とりあえず今回はTwitterクライアントを簡単に作ってみました。アプリ名はtwitterclとして作ってみます

まずルートにあるconfig.ymlにtwitterの設定を追記

[sourcecode]
plugins:
Auth::Twitter:
callback_url: http://localhost:3000/auth/twitter/callback
consumer_key: XXXXXXXXXXXXXXXXXXX
consumer_secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
callback_success: /
callback_fail: /fail
[/sourcecode]

テンプレートは標準でついてるんですが、やっぱり慣れているTTを使いたいのでconfig.ymlの
template: “simple”をコメントアウトしてtemplate: “template_toolkit”とenginesのコメントを外す
[sourcecode]
#template:
template:
engines:
template_toolkit:
encoding: ‘utf8’
start_tag: ‘[%’
end_tag: ‘%]’
[/sourcecode]

あとはソースはこんな感じでauth_twitter_init();を読み込み時の初期化処理として入れて、
OAuth処理はauth_twitter_authenticate_urlにリダイレクトさせてconfigのcallback_urlで設定した/auth/twitter/callbackに
戻してあげればsessionのtwitter_userにtwitterユーザ情報が入ってます。
あとはtwitterっていう名前をregistしてくれているのでtwitterで呼び出せば裏のNet::Twitterのインスタンスが使えます。
ヤバイ、ちょー簡単
lib/twittercl.pm
[sourcecode language=’perl’]

use Dancer ‘:syntax’;
use Dancer::Plugin::Auth::Twitter;

our $VERSION = ‘0.1’;

auth_twitter_init();

get ‘/’ => sub {
if (not session(‘twitter_user’)) {
return redirect uri_for(‘/login’);
}

my $list = twitter->friends_timeline({count => 10});
template ‘index’, {list => $list};

};

get ‘/forward_twitter’ => sub {
redirect auth_twitter_authenticate_url;
};

get ‘/login’ => sub {
template ‘login’;
};

post ‘/tweet’ => sub {
twitter->access_token(session(‘access_token’));
twitter->access_token_secret(session(‘access_token_secret’));
twitter->update(param(‘tweet’));
redirect uri_for(‘/’);
};

get ‘/fail’ => sub {
redirect uri_for(‘/login’);
};
true;
[/sourcecode]

あっという間ですね。
みなさんもLet’s Dance!!

コメント