As Sloth As Possible

可能な限りナマケモノでありたい

タグ:Plack

こないだ言ってたばりったーは実はもう完成してたんだけど、なんかサンプルアプリのつもりが作ってるうちに段々ガチなフレームワークと化してきて、大したアプリじゃないのに中身は意外と複雑でしかもバグだらけ、みたいなことになってしまった。

うーんこれ公開してもいいけど参考になんねーよな、つか飽きたなーとか思って別の遊びを始めたら意外とそっちが楽しくなってきちゃって、こんなものが出来た。

faultier's Asagao at master - GitHub

何これ

Plackを使ってSinatraっぽい感じでWebアプリを書ける雰囲気のフレームワークみたいな(弱々しく)。一応README.jaを読むとどんなものかは何となく伝わるんじゃないかしら。ドキュメントとサンプルアプリくらいは作ってみようとは思いますが、何ができるか試してみる際にはソース読んでくだしあ。(追記)簡単なサンプルコードドキュメント(予定地)作ったよ。

TODO

  • Sinatraが出来ることは一通り出来るようにはしたい
  • 例えばPlack::Builderのenableとかを直に書けるようにするとか
  • passとかbeforeとかafterとか
  • configとかdispatchとか適当すぎるのでどうにかする
  • 今テンプレートがText::MicroTemplateだけなので他のも対応する

思ったこと

Sinatraの中身は意外とサッパリしてた。割とさらっと読めるレベル。

あとこういうDSL的な見た目になるものを実装するのはやっぱりRubyのが楽でいいなぁと思った。同じことやるのにPerlの方がもうちょっとトリックがいる感じ。いやまぁ、慣れの問題もあるんだけども。

なんだか最近個人的にPlack期到来中なんだけど、面白いからみんなもっといじるといいよ。

追記

ブコメで「CPANにDancerってのがありますよ」と教えてもらった。うはぁ。ほんとだ、被ってら。向こうはバージョン1.0ですし当然ながらもっとずっとちゃんとしてます。ひー。わかっててやったんならともかく知らなかったのはとても恥ずかしい。

強いて言うなら、向こうは全部自前実装だけどこっちはPlackに乗ってるっていうのが強みなくらいかなぁ。動かせる環境が増えても楽とかミドルウェアを重ねられるとか、ほら、いいことあるよ。あと俺TemplateToolkit嫌いなのでText::MicroTemplateでviewを書けるようにしたとか。…でもDancerは最小限の依存しかないのでインストールやデプロイは楽そうだけど、AsagaoはAny::MooseとかPath::Dispatcherとか色んなものに依存しててレンタルサーバとかに上げにくいかもしれない。

むしろお手本にさせてもらおう。後でソース読もう。

さらに追記

ブコメで「Dancer::Handler::PSGI があるから plack の上でもうごかせるよ!」って教えてもらいました。

あれー。

あれー。

あれー。

残念でござる。もう完全に意味ないでござる。まぁ勉強だと思ってとりあえず作ろうと思ってたところまでは全部作っちゃうか。

タイトルからして既に残念な感じが漂ってるけど、前回の記事で言った通りPlackでアプリを作ってみようと試行錯誤中。ちなみにこないだサーバをApacheからnginxに変えたついでにHTTP::EngineのアプリもFastCGIで動かすようにしたので、PlackのアプリもFastCGIで動かしてみた。設定はこんな感じ。

# app.psgi
use NetaKit::TweetProxy::App;
use Plack::Builder;
builder {
    #mount '/baritter' => builder {
        NetaKit::TweetProxy::App->new->to_app;
    #};
};
#!/usr/bin/env perl
# bin/fcgi.pl
use strict;
use warnings;
use File::Spec;
use FindBin qw($Bin);
use Plack::Server::FCGI;
use lib File::Spec->catfile( $Bin, qw(.. lib) );
my $app = eval { require File::Spec->catfile( $Bin, qw(.. app.psgi) ) };
my $server = Plack::Server::FCGI->new(
    nproc       => 4,
    listen      => '/tmp/plack_netakit.sock',
    pidfile     => '/tmp/plack_netakit.pid',
    detach      => 1,
);
$server->run($app);
# nginx.conf
server {
    listen       80;
    server_name  localhost;
    location / {
        root   /var/www/faultier.jp/htdocs;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   share/nginx/html;
    }
    location /baritter {
        set $script "";
        set $path_info $uri;
        fastcgi_pass unix:/tmp/plack_netakit.sock;
        include fastcgi_params;
    }
}

PlackのがH::EよりもRackと似たような感じに書けて楽だった。DLSとかURLMapとかもあるしね。あと、Rackで言うところのconfig.ruにあたるのがapp.psgiなんだけど、せっかくこれ書いたのにfcgi.plで同じのまた書くのやだなぁと思ってなんとなくrequireしてみたら普通に行けた。素敵。使い方これでいいのか疑問だけど。mount使おうとして上手くいかなくてコメントアウトした形跡があるのはまぁ御愛嬌。

baritter

いい加減彼女が404ばかりで飽きてきたので今回は真面目になんかしら遊べるものを作ってみることにした。

バリバリ 嘘じゃないもん

まぁアプリ名とかから推測つきそうなもんですが、ようはtwitterのポストを拾ってきてアレげなフォーマットにはめ込んで表示するだけの簡単なお仕事をするサービスです。サンプルなので単語を抽出するとかそういう凝ったことは決してやりません!(キリッ。上のスクショはそもそも元発言(もしくは発言者の脳味噌)が残念なのであんまり変わらないけど、津田さんとか池田信夫さんとかにこのフィルタをかますと脱力感が半端ないので3秒くらいは楽しめた。

ちなみに成果物はこんなだけど、内部ではPlackとText::MicroTemplateとData::ModelとCoroを使ってるとかいう、構成だけ見ると面白いサンプルになってるんだぜ。無駄遣いにも程があるぜ。出来たらソースも公開する予定。

↑このページのトップヘ