はてなグループのキーワード機能の劣化版を実装してみた

この前書いてみたのは、Template Toolkitの練習ということでDBを見ることしかできないやつでした。というわけでinsert、update、deleteとかもできるような機能があるものを作ろうと思った。

世の中にははてなダイアリーをローカルのテキストファイルからアップロードするはてダラというものがあります*1。僕はTsukuba.Rのプレゼンで、はてなグループのキーワードのプレゼンモードをよく使います。だから、はてなグループのキーワードもローカルで編集してアップロードまで自動でやって欲しい!!ということでRubyでアップロードするスクリプトを書いたり、Emacsのメジャーモードを書いてみたりしています。前置きここまで。

なので、はてなグループのキーワードが書いてあるテキストが手元にあります。こんな感じ。

/Users/syou6162/hatena_keyword/syou6162% ls | tail
ニューラルネットワーク.txt
ブルーオーシャン戦略.txt
ブーツストラップ法.txt
フュ−チャーリスト宣言.txt
ステルスマーケティング.txt
意味が分かる位相空間論.txt
バイラルマーケティング.txt
頭がいい人、悪い人の仕事術.txt
我らクレイジー☆エンジニア主義.txt
さおだけ屋はなぜつぶれないのか?.txt

ということでこれをつっこんでオフラインでもはてなグループっぽく見れるようにすればいいじゃない、ということでやってみた。githubに上げておいた。

こんな感じですでにあるキーワードの内容を見れるようにしてみたり、新規キーワードを作成できるようにしたり、キーワードを削除することができるようにしたり、編集できるようにしたり。
Tsukuba.R.5
Text::Hatenaを使ってはてな記法からhtmlに加工してます。

細かいところ

DBIx::MoCo

id:onishiからはてなの内製ORマッパーであるDBIx::MoCoについて解説。MoCoはid:jkondo開発とのこと。

http://eighteentillidie.com/2008/08/entry-948.html

ということでDBIx::MoCoというORマッパを使うらしいので、今回作ったものでも使うことにしてみました。ORマッパとか初めてなのでなんのことやらよく分からないんですが

  • SQLを直接書かなくてよい
  • DB側とPerl側のオブジェクトを関連付ける→mapping

ということなのかな。

DBIx::MoCo - search.cpan.orgを参考に関連付けのようなところを書いていきました。本当にSQLが出てこない!!insertするところのプログラムが

    Keyword->create(
        keyword   => $name,
        content   => $content,
        last_edit => $last_edit
    );

という感じで書ける。あとCache::Memcachedも使ってみたんだけど、あんまり早くならないorz。どっか間違ったんだろうなー。

html、css

デザイン的な能力が本当になくて泣ける。インターンではjsもあるとかまじですか、、、という感じだけどjsを今からやってもあまり意味がない気がするのでperlやりますが。2ペインにするところとかこの辺参考にした。

MVCのMとC

MCVでいうところのModelとControllerのところがよく分かっていないらしく、ごちゃごちゃになっている。。。説明を読むとなんとなく分かったような気分になるんだけど、実際のコードでどう設計すればいいのかが分かってない。Catalystでも使ってみると分かる…ものなんだろうか。

テスト

週末にPerlのオブジェクト指向をもう一回抑えないと、、、ということでデザパタのVisitorパターンを実装してそのテストまで書きました。なので、普通(?)のコードのテストはどういう風にすればいいかが分かった。だけど、WebとかDB周りのテストってどういう風にやればいいのかが分かってない。来週までにこの辺を抑えておきたいなーと思います。

*1:で、今それを使って書いているわけだが