はてなダイアリー で Amazon.co.jp の商品をかんたんに紹介するためのツール、「はまぞう」をリリースしました。(naoya の日記)
このはまぞう、僕の blog を普段から見ていただいている方にはお分かりの通り、はてな版 amazlet ツールです。はてなダイアリーの更新画面から起動して、商品名で検索してささっと紹介記事がかけてしまうという便利ツール。
amazlet ツールは Bookmarklet から起動しますが、はまぞう君はダイアリーにもっと深く絡んでインテグレーションしており、管理ツールから起動、コードを挿入できるという仕様になってます。amazlet.com の場合はコードを最後にコピペする必要がありますが、はまぞうの場合は JavaScript の opener メソッドを用いて更新フォームに直接コードを書き込むようになっています。ツールに依存しない分スケーラブルな設計の amazlet ツールに対して、はまぞう君はツールに直接統合する形でよりシームレスなインタフェースが可能になっているといったところでしょうか。
ツールの動きは amazlet ツールと似ていますが、実際にははてなのウェブアプリケーションフレームワークを用いてスクラッチから書き直しています。将来のことも考えて、運用保守性の面や機能拡張の面、それから既存のコードとの整合性を保つために、というのが書き直した動機。Amazon Web サービス部分も、Net::Amazon は使わずに、はてなで独自に開発した、MySQL を使ったスケーラブルなキャッシングシステムを備え且つ速度を出すためXML パーサーに依存しない形で AWS を抽象化したクラスを使っています。
はてなフレームワークは Perl OOP によるフレームワークで、MVC モデルで設計されていて、通常のアプリケーション開発効率を格段に上げられるつくりになっています。MVC モデルの中でも特に Controller の部分が特徴的で、ウェブアプリケーションの処理手順に合わせてクラスが階層化されています。 Factory パターン、Template Method パターンを多用した設計になっていて、mod_perl の Apache API とのインタフェースを担うクラス、HTTP リクエスト、レスポンスといったプロトコルをハンドリングするためのクラス、セッション管理などの前処理をハンドリングするためのクラス、ビジネスロジックを起動するクラス、View に渡すデータ構造構築するクラス...といった具合に細分化されています。また、データベースアクセスに関する部分は Bridge パターンにより RDBMS 実装に依存する部分を切り離し、Iterator でオブジェクトアクセスできるようになっています。この辺の話に関しては以前に近藤が Shibuya Perl Mongers で講演した資料がありますので、興味のある方は是非どうぞ。
フレームワークを使って、もう一人のエンジニアとのペアプログラミング。毎朝にスタンディング・ミーティング(立って会議)をして仕様を策定し、二日ちょっとで作り上げました。やろう、と決めてから三日以内にリリースというスピードは、Perl フレームワークと、XP のいいとこ取りをした開発スタイルに依るところが非常に大きいです。
この調子でいろいろ開発していきたいと思います。