Mojolicious::Lite で掲示板を書きます。
Mojolicious::Lite は perl 5.10.1 以降で動きます。
Perl を参考に perlbrew を使って、どうせなら 5.18.1 を入れておきましょう。
CPAN モジュールは cpan ではなく cpanm でインストール。
$ cpanm Mojolicious::Lite
素晴らしい翻訳版 がありますが、もしかしたら古くなっているかもしれません。
古い情報で時間を潰さないように Mojolicious::Lite に限らず、 公式のドキュメント を読むようにしましょう。
ドキュメントは日付とバージョンの確認を忘れずに。
次々と仕様変更が襲いますが YAGNI を忘れずシンプルに。
まずは ひとことメッセージ掲示板(Mojolicious::Liteバージョン) を動かしましょう。
$ mkdir bbs
$ cd bbs
$ vim bbs.pl
$ chmod +x bbs.pl
$ morbo bbs.pl
[Thu Dec 5 12:46:49 2013] [info] Listening at "http://*:3000".
Server available at http://127.0.0.1:3000.
動いたらテストを書きましょう。
$ ls
bbs-data.txt bbs.pl
$ mkdir t
$ vim t/01-page.t
use Test::More;
use Test::Mojo;
use FindBin;
require "$FindBin::Bin/../bbs.pl";
my $t = Test::Mojo->new;
# Short Message BBS の文字を調べていますが、本来ならページ下部の Copyright などがよい。
# なぜなら、ページの途中でエラーが発生して表示されていないことを検知できるため。
$t->get_ok('/')->status_is(200)->content_like(qr/Short Message BBS/);
# title が長すぎる場合
$t->post_ok('/create' => form => { title=>'a'x3000, message=>'a' })->status_is(200)->content_like(qr/Title is too long/);
done_testing();
$ ./bbs.pl test
Running tests from '/usr/home/vagrant/bbs/t'.
t/01-page.t .. ok
All tests successful.
Files=1, Tests=6, 0 wallclock secs ( 0.02 usr 0.01 sys + 0.20 cusr 0.04 csys = 0.26 CPU)
Result: PASS
以下のテストを追加してみましょう。
- Title と Message の必須チェック
- Title と Message の長さチェック
- 入力したものが表示されているか
- XSS は大丈夫か
参考。
- テスト
- Mojolicious::Lite の Testing
- memowe/bootylite - Mojolicious::Lite アプリのテストの参考に
テンプレートに Xslate を使ってください。
テストがそのまま通ることを確認してください。
ファイルではなく MySQL に登録してみる。
SQLi のテストを追加する。
Mojolicious::LiteでDBIx::Skinnyを使ってみた - 日曜プログラマのそゞろ事
余力があるなら Skinny の後継 Teng を試してみる。
書き込みをテキストと Markdown で選べるようにする。
Text::Markdown - search.cpan.org
日本のアプリらしく、入力→確認→登録を実装してみる。
ログインしないと見えないようにしてください。
また、管理者と一般ユーザを作ってください。管理者は記事を削除できるようにしてください。
ところで、下記テストを書きましたか。
- create にアクセスできない場合
- ファイルに書き込みできない場合 ( permission, disk full )
- DB に接続できない場合 ( DB サーバのダウンなど )
GitHub や CPAN の t/ を見て回って、どのようなテストがあるか調べてみましょう。