Tracks

書いてみたい方はココを参照下さい。

はじめの一歩 B!



今回このadvent calendar appを作ろうぜと言い出した張本人のkanです。

言い出しっぺの法則に従って、とりあえずadvent calendarを最低限やれるとこまで自分が作ることになったのですが、さて「最低限」てどんだけだよという問題があります。

そもそも今回は最大25人が1日ずつ機能を追加していくところが面白いので、下手に機能を充実しすぎると、やりたかったことが既に実現できてるという悲しい事態になります。かと言って適当に作りすぎては他の人も何をやったら良いかさっぱりでしょう……。

と、悩んでる間に少しでも作ったほうが良いですね。まずはざっくりと全体像を考えました

Plackベースで

2010年にperlでweb appを作るのに使わない手はないですね。PSGIに対応したWAF(Web Application Framework)を使うことも検討しましたが、後の人のために素でゴリゴリ書いていくことにしました。カレンダーが完成する頃には誰かがAmonとかKamuiベースに作り替えてるかもしれませんがw

データはファイルで持つ

sqliteを使っても良いし、流行りのNoSQLなKVSを使っても良いのですが、これらを使用すると必然的に書き込み画面を作らないといけません。そして、一応企画ものなので簡易的にも認証機構くらいは用意しておかないと面倒なことになるかもしれません。その辺が面倒なので記事データはファイルベースで保持することにしました。まあこれに関しても誰かが(ry

機能自体は極力シンプルに

  • 複数のトラックを持つ
  • トラック毎に12/1から12/25の記事を表示する(該当日以降に)

ざっくばらんに言うとこの機能しか持っていません。そもそも最初は複数トラックも持てなかったのですが、今回のjperl advent calendar(豪華7本立てです)のために対応しました。対応したとはいっても、ディレクトリを掘るとtrackが増えるというシンプルなものです。


方針が決まったので作り始めます。moduleやappの雛形作りの道具は色々ありますが、今回はyappoさんのModule::Setupを使うことにしました。appの名前はベタですがApp::AdventCalendarにしようと思います。

module-setup App::AdventCalendar

これだけで基本的なファイルが作られます。AdventCalendar.pmにhandlerメソッドを追加してみます。

sub handler {
    my $env = shift;

    return [ 200, ['Content-Type' => 'text/html'], [ 'hello' ] ];
}

これを利用した app.psgi ファイルを作ります。

use strict;
use warnings;
use utf8;
use lib 'lib';

use App::AdventCalendar;

my $app = sub { App::AdventCalendar::handler(@_) }

$app;

あとはplackupを実行すれば、http://localhost:5000/ で「hello」と出力されるのを確認できます。

plackup -R . app.psgi
  • Rオプションを使うとファイルを変更した時に自動でrestartがかかって便利ですね。

一日目はここで時間切れだったので、とりあえず github に commitしたのでした。