Skip to content

Instantly share code, notes, and snippets.

@oooooooo
Last active December 30, 2015 08:39
Show Gist options
  • Save oooooooo/7803889 to your computer and use it in GitHub Desktop.
Save oooooooo/7803889 to your computer and use it in GitHub Desktop.
Mojolicious::Lite で仕様変更の多い掲示板を作る

目次

アプリケーションを書く

Mojolicious::Lite で掲示板を書きます。

準備

Perl 5.10.1 以降

Mojolicious::Lite は perl 5.10.1 以降で動きます。

Perl を参考に perlbrew を使って、どうせなら 5.18.1 を入れておきましょう。

Mojolicious::Lite

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 は大丈夫か

参考。

Xslate に仕様変更

テンプレートに Xslate を使ってください。

テストがそのまま通ることを確認してください。

Skinny に仕様変更

ファイルではなく MySQL に登録してみる。

SQLi のテストを追加する。

Mojolicious::LiteでDBIx::Skinnyを使ってみた - 日曜プログラマのそゞろ事

余力があるなら Skinny の後継 Teng を試してみる。

Markdown で書けるように仕様変更

書き込みをテキストと Markdown で選べるようにする。

Text::Markdown - search.cpan.org

確認画面追加の仕様変更

日本のアプリらしく、入力→確認→登録を実装してみる。

認証追加の仕様変更

ログインしないと見えないようにしてください。

また、管理者と一般ユーザを作ってください。管理者は記事を削除できるようにしてください。

テスト

ところで、下記テストを書きましたか。

  • create にアクセスできない場合
  • ファイルに書き込みできない場合 ( permission, disk full )
  • DB に接続できない場合 ( DB サーバのダウンなど )

GitHub や CPAN の t/ を見て回って、どのようなテストがあるか調べてみましょう。

次のステップ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment