TDDBC 札幌 2.1 に Squeak Smalltalk & Seaside で参加してきた


前回 に引き続き @tmaeda さんと、CLR/H などでお世話になっている @sandinist さんが Smalltalk を選択してくださり、札幌名物の Smalltalk チームを今回も作ることができました。ありがとうございます。


当日の成果はこちらに置いてあります。

src が file in 用の .cs、.st で、mcz が Monticello パッケージです。txt は Mercurial の diff が改行コード CR に対応していないための苦肉の策で CR を LF に変換したファイル群なので無視して結構です。


今回のお題は Webアプリケーションだったので、当初は Squeak にくらべクオリティも高く、よりビジネス指向の VisualWorks を使うことも考えたのですが、見栄を張らずに使い慣れたものということでやはり Squeak にして、いつもお世話になっている @umejava さんの SeasideJOnePlusDB(2009/4/25)イメージを使わせていただきました。ありがとうございます。

ダウンロードして解凍して起動するだけですぐにサーバーが動き出します。とてもお手軽ですので、わかりやすいチュートリアルSeaside へ GO!! -- 楽々サーバサイド Web プログラミング --」とあわせて、興味があればぜひ実際にお試しください。


ただ TDDBC 向けとしては SeasideJOnePlusDB には Webアプリケーション向けのテストツールが含まれていませんので、Seaside 2.8 で使える SeasideTesting フレームワークをインストールして TDD 演習に用いることにしました。


SeasideJOnePlusDBイメージへの追加は、環境組み込みの楽観的分散バージョン管理ツールである Monticello を使って SqueakSource レポジトリから行なえます。

  • デスクトップクリック → 開く → Monticelloブラウザ
  • 「+リポジトリ」 → HTTP
  • SqueakSource より Registration (MCHttpRepository location: 'http://www.squeaksource.com/SeasideTesting' user: '' password: '')をコピーしてペースト → 了解 → 開く
  • 新しく開いたウインドウから SeasideTesting-R1.5 をクリックして選択
  • 右手の枠から SeasideTesting-R1.5-cds.25.mcz をクリックして選択。反応が返るまですこし間があるのでがまんする。再度クリックしてしまい選択が解除されてしまったら、もう一度クリックして選択。
  • 「ロード」をクリック


これで前述の成果物を読み込めるようになるはずです。成果物の取り込みはやはり Monticello を使うことをお薦めします。

  • src/SeasideOneJPlusDbFixAndMod-sumim.cs をデスクトップにドロップイン→「新しいチェンジ・セットにインストール」する―などして file in 。
  • Monticello ブラウザから +リポジトリ → directory → mcz を pull したディレクトリを指定
  • 開く

TddbcSap2d1-sandinsit.34.mcz が当日の作業の最終コミットで、TddbcSap2d1-sumim.17.mcz がログインやセッションなども含めて事前に作成したサンプル、TddbcSap2d1-sumim.19.mcz は 17 から余計なものを削り、主催者指定のユースケース「会議室情報一覧を表示する」のみに限定したサンプルです。


TDDBC 札幌 2.1 について自身としては、だいぶ TDD がこなれてきたせいか、一般に難しいと言われている UI やデータベースがらみのテストにしょうしょう手こずったことを除けば、それほど困難は感じられませんでした。

ただ TA としては、環境やサンプルの解説に時間をさくつもりでいた演習1の時間が削られるなど想定外の事態が重なったり、なにより私自身の経験不足もあってもろもろの状況にうまく対応できず既定の課題をほとんどこなせなかったのがとても心残りでした。

もっとも、後述のように準備が万端だった Python チームを除いて、どのチームも似たようなところで時間切れになっていたので、Seaside が他の言語の何でも自動生成してしまうモダンなフレームワークに対して勝ることはなくとも極端に劣っていたり「今回の題材には不利」というほどのことはなかったと思います(ただテスティングフレームワークに限れば、SeasideTesting が Ruby の capybara ほどには洗練されていないというのは事実として仕方ががないとは思いますが)。

そんな @giginet 率いる Pythonチームがほぼ同条件で時間内にすべてきちんと実装を済ませていたことを鑑みて、他の TDDBC に比べて環境やフレームワークへ依存度が高い課題が用意される傾向が強いTDDBC札幌においては特に、事前の準備はしっかりしておく必要がありそうです。この教訓は @giginet も Smalltalkチームに参加してくれる予定になっている次回以降にでも活かしていければと思います。


なお、チーム参加者の @tmaeda さんには、前回 に引き続き今回も的確な視点から Squeak Smalltalk や Seaside に考察を加えていただたいております。慣れてしまうと当たり前になってしまうことが多いので、このように別処理系ユーザーからの視点を的確にまとめていただけると Ruby などと比較したり喩えながら Squeak Smalltalk の特徴を紹介するときに、おおいに参考になります。ありがとうございます。


ところで @tmaeda さんは、「Ruby 逆引きレシピ」の執筆陣のおひとりでもあるわけですが、同書のタイトルにからめ、前回から今回の作業中に学んだ Squeak 環境から情報を引き出すためのいろいろな手続きについても前述エントリーとは別にまとめてくださっています。もしかしたら書籍化もあるかも!w