ISUCONのサンプルアプリケーションのフレームワークだったKossyを単独ディストリビューションにして、いくつか機能追加した。ただしテストはないのでアルファクオリティ。

https://github.com/kazeburo/Kossy

Plack、Router::Simple、Text::Xslateがベースで、独自のvalidatorが付いている程度のそれほど特徴はないsinatra風フレームワークです。それでもツールや管理画面を作るのに楽だと思う。

スケルトンを作るスクリプトが付いたのでそれを使うサンプル。

% kossy-setup MyApp
% cd MyApp
% plackup app.psgi

これだけでアプリケーションが起動。

生成されたファイルツリーは

% tree
.
├── Makefile.PL
├── app.psgi
├── lib
│   ├── MyApp
│   │   └── Web.pm
│   └── MyApp.pm
├── public
│   ├── css
│   ├── images
│   └── js
├── t
│   └── 00_compile.t
└── views
    ├── base.tx
    └── index.tx

lib/MyApp/Web.pmがアプリケーションのクラス、public以下に静的ファイル。views以下にテンプレートを置きます。Web.pmの中身を見ると以下のようになっています。

package MyApp::Web;

use strict;
use warnings;
use utf8;
use Kossy;

filter 'set_title' => sub {
    my $app = shift;
    sub {
        my ( $self, $c )  = @_;
        $c->stash->{site_name} = __PACKAGE__;
        $app->($self,$c);
    }
};

get '/' => [qw/set_title/] => sub {
    my ( $self, $c )  = @_;
    $c->render('index.tx', { greeting => "Hello!" });
};

get '/json' => sub {
    my ( $self, $c )  = @_;
    my $result = $c->req->validator([
        'q' => {
            default => 'Hello',
            rule => [
                [['CHOICE',qw/Hello Bye/],'Hello or Bye']
            ],
        }
    ]);
    $c->render_json({ greeting => $result->valid->get('q') });
};

1;

filter はアプリケーション内ミドルウェアのような機能です。Plack::Middleware同様、$appをラップして動作します。使うにはdispacherの第二引数に配列のリファレンスとして指定します。

dispacherはget(head)とpostがサポート。

get 'url' => [フィルター指定] => code

という形式でアプリケーションを構築して行きます。codeにはMyAppのオブジェクトとKossy::Connectionのオブジェクトが渡されます。MyAppのオブジェクトはアプリケーションのプロセスが死ぬまで有効、Kossy::Connectionのオブジェクトはリクエスト単位になるので、その辺で使い分けができると思う。

その他のクラスやvalidatorの使い方はPodに書いてみたりしているので、興味があれば見て頂けたらと思います。Kossyはもうすこしアプリケーションを作ってみながら機能追加して行く予定です。

このブログ記事について

このページは、Masahiro Naganoが2011年11月16日 19:03に書いたブログ記事です。

ひとつ前のブログ記事は「cloudforecast に2つの機能追加をしました」です。

次のブログ記事は「 Kansai.pm #14 に参加して発表しました 」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja