Perl-users.jp

LL温泉2008用の資料です。

最近でたばかりのフレームワークである Mojolicious をつかってみましょう。

Mojolicious?

オールインワンなウェブアプリケーションフレームワークです。依存がほとんどないです

インストール

すごいかんたんです。

    # Mojo をダウンロード
    % wget http://mojolicious.org/Mojo-latest.tar.gz

    # 解凍
    % tar xzvf Mojo-latest.tar.gz
    % cd Mojo

    # Makefile 生成
    % perl Makefile.PL

    # make する
    % make

    # テストスィーツをうごかしてみる
    % make test

    # インストール
    % sudo make install

    # うまくいったか確認
    % mojolicious daemon
    Server available at http://127.0.0.1:3000.

アクセスしたら、こんな画面がでます

http://gyazo.com/ef11a052ae49b35fd69825287f3ae26f.png " />

つかってみる

    # スケルトン生成
    % mojolicious generate app BBS
      [mkdir] /private/tmp/bbs/bin
      [write] /private/tmp/bbs/bin/bbs
      [chmod] bbs/bin/bbs 744
      [mkdir] /private/tmp/bbs/lib
      [write] /private/tmp/bbs/lib/BBS.pm               # ディスパッチャ
      [mkdir] /private/tmp/bbs/lib/BBS
      [write] /private/tmp/bbs/lib/BBS/Example.pm       # controller
      [exist] /private/tmp/bbs/lib/BBS
      [write] /private/tmp/bbs/lib/BBS/Context.pm       # コンテキストクラス
      [mkdir] /private/tmp/bbs/t
      [write] /private/tmp/bbs/t/basic.t
      [mkdir] /private/tmp/bbs/public
      [write] /private/tmp/bbs/public/404.html
      [exist] /private/tmp/bbs/public
      [write] /private/tmp/bbs/public/index.html
      [mkdir] /private/tmp/bbs/templates/example
      [write] /private/tmp/bbs/templates/example/welcome.phtml
    # はしらせてみる
    % cd bbs
    % perl bin/bbs daemon
    Server available at http://127.0.0.1:3000.

http://gyazo.com/90a6a75811d3fbbb5294e48ea32d655e.png" />

イジッテミル

templates/example/welcome.html の中身をみてみる

embedded perl っぽい記法なので、初心者でも安心です。

    % my $c = shift;
    
        Welcome to the Mojolicious Web Framework!
        
            

Welcome to the Mojolicious Web Framework!

This page was generated from the template "templates/example/welcome.phtml", click here to reload the page or here to move forward to a static page.

このファイルを下記のようにかきかえてしまう

    % my $c = shift
    
    Mojolicious 掲示板
    
        

Mojolicious 掲示板

コントローラをかく。

DBI をつかうので

    sudo -H cpan DBI DBD::SQLite

しておきます

    package BBS::Example;
    use strict;
    use warnings;
    
    use base 'Mojolicious::Controller';
    use DBI;
    
    sub welcome {
        my ($self, $c) = @_;
        my $path = '/tmp/bbs.sqlite';
    
        # データベースハンドラをひらく
        my $dbh = DBI->connect("dbi:SQLite:dbname=${path}", '', '') or die $DBI::errstr;
        # schema を定義する
        $dbh->do(q{CREATE TABLE IF NOT EXISTS entries (id INTEGER PRIMARY KEY, body VARCHAR(255))}) or die $dbh->errstr;
    
        if ($c->tx->req->method eq 'POST') {
            # POST のときは投稿。

            # クエリをとりだす
            my $body = $c->tx->req->params->param('body') || '';

            # INSERT する
            if ($body) {
                my $sth = $dbh->prepare('INSERT INTO entries (body) VALUES (?)') or die $dbh->errstr;
                $sth->execute($body) or die $dbh->errstr;
            }
    
            # リダイレクトする
            my $res = $c->tx->res;
            $res->code(302);
            $res->headers->header('Location' => $c->tx->req->url); # 本当は URL をとりだすコードのかきかたがあるとおもうのだけど、うまくうごかない
        } else {
            # GET のときは掲示板表示
            my $sth = $dbh->prepare('SELECT id, body FROM entries ORDER BY id DESC LIMIT 30') or die $dbh->errstr;
            $sth->execute() or die $dbh->errstr; # 実行
            my $rows = $sth->fetchall_arrayref(); # 取得
            $c->stash->{rows} = $rows; # テンプレートエンジンにわたす
            $c->render(); # テンプレートエンジンで描画
        }
    }
    
    1;

httpd を起動します。

    % perl bin/bbs daemon

下記のような画面がでれば完成です。

http://gyazo.com/98d676ee8a78ba85e474a9e91bfaee1e.png" />


目次へ

Last modified: $Date: 2008-10-26T05:38:56.231052Z $