Hatena::Groupsubtech

冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

 | 

Mar 01, 2010 (Mon)

はてなダイアリーライクなブログ CGI プログラム 00:38 はてなブックマーク - はてなダイアリーライクなブログ CGI プログラム - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

Perl のことを CGI って呼ぶような時代がいつ終わったのかは知りませんが、CGI で動き常用できるブログ・ダイアリーシステムが欲しいと思いはじめたのでサクっと Perl で書いてみました。

「常用できるブログシステム」の要件というのは、僕にとっては以下の通りで、必要最低限の実装になっています。

  • その場編集機能が使える
  • はてな記法が使える
    • でも自動リンクは特にいらない
  • タグが使える
    • はてなダイアリのカテゴリは所謂タグです

今まで散々 blosxom のクローンを作ってきましたが、RDB をデータストアに使ったブログシステムは初めてつくる気がしました。blosxom クローンとの違いは編集機能ですね。

git clone して git submodule update --init して対象サーバに rsync すれば動くようになっていると思います (そのように開発をしているので)

その場編集

jQueryJSDeferred つかったらすぐできました

はてな記法

Text-Hatena があるので簡単…… と思いきや、Text-Hatena はちょっと思い通りにフォーマットしてくれないので、はてな記法っぽい別のオレオレ記法をつくることにしました。

別に拡張してるわけじゃないので X は変なんですが、とりあえず CPAN に上げるつもりもないので保留してます。Extensible の略だ、とか言い張ったりできないかな

にした

内容的にはダイアリの記法とほぼ一緒ですが、自動改行のルールが異なるのと、見出し記法を構造化するような感じになっています。(互換モードにできるようにもなってます)。あと自動リンクの記法はモジュール側では最低限に自動リンク、使う側で定義するような設計になっています。

バックエンド実装のメモ

前々からちゃんと使ってみたかった DBIx-Skinny と、フレームワークを毎回書くような人間に死ぬほど便利な Plack を利用しています。

Skinny はとりあえず的なインクリメンタル開発がやりやすいし、基本的に SQL そのまんま書いてどうにかできるのがとても楽で良かったです。データベース接続部分に不明瞭な部分がないので、恐れずにテストも書けるのもよかったです。

僕はちょっとでも複雑なものは search_named しか使わないようにしたので

sub select {
	my ($self, $sql, $hash, $array, $name) = @_;
	unless ($name) {
		($name) = ($sql =~ /FROM ([^\s]+)/i)
	}
	[ $self->search_named($sql, $hash || {}, $array || [], $name) ];
}

というのをモデルクラスに定義してつかってます。風流な table 名抜き出しが入っていますが、結局 SQL 書くのがこの場合僕だけなので理にかなってます。

他にも Pager 実装とかをするにあたり、なかなか風流な SQL の文字列置換を実装しましたが、メタプログラミングだと思えば気持ちわるくありません (という言い訳しないといけない程度に気持ちわるいです)

あとは deploy したかったサーバの Perl のバージョンが 5.6 とか古すぎで動かなかったので新しいサーバを借りなおしたりしました。これが一番大変でした。

 | 

スポンサード リンク

書いてる人

cho45 (佐藤広央) (www.lowreal.net)

Perl, JavaScript, Ruby, HTML, CSS, Web etc


スポンサード リンク