Zerobase Dev Blog

コードネームYentry

Smalltalkウェブ・アプリケーション・フレームワークSeasideとZincを比較してZincを採用する方向で

UIコンポーネント単位のエンド・ツー・エンドの開発パイプライン』に書いた通り、 Seaside の「コンポーネント指向」のアーキテクチャは素晴らしいと思う。

しかし、 Seaside にはいくつかの問題がある:

  • もう一つの大きな特徴である「継続」は不要。いまなら Ajax でやる。
  • HTML5 対応が不安。 WAComponent のサブクラスで

      updateRoot: anHtmlRoot
          super updateRoot: anHtmlRoot.
          anHtmlRoot beHtml5.
    

    と書いても、 DTD<!DOCTYPE html> になるだけ。 <html xlsns=~~~ という XHTML の記述が残ってるくらいなので、あまり HTML5 対応は進んでいないと思った。

  • 2002 年に構想されたアーキテクチャは、さすがに HTML5 時代のウェブのエコシステムに適応できてない印象。

  • フレームワークが巨大すぎて、ちょっとしたことをやるときに調べ回らないといけない。 Seaside 自体の把握・改修・拡張が難しい。
  • その他、 Wikipedia にも「継続はメモリを食い過ぎる」「 REST 原則に反している」といった批判がある。

こういう問題があって、ぼくがやりたい「UIコンポーネント単位のエンド・ツー・エンドの開発パイプライン」で使うのには無理がありそうだ。

そこで注目しているのが Zinc という HTTP コンポーネント。第一印象は Ruby で言えば WEBrick のような簡易 HTTP サーバー。しかし、 Ruby でいう Sinatra 的な軽量フレームワークにもなっている。

more on this topic: Zinc HTTP Components (Pharo Conference Paper)

Zinc は HTTP のクライアントにもなる。 Zinc + Soup(HTML パーサー)でHTTP I/F のテストを書きたい。 Selenium WebDriver で網羅的にテストすると、テスト実行のコストが大きい。それは要点だけに止めて、網羅性は Zinc + Soup のテストで担保したい。

more on this topic: Smallthoughts Seaside - Automated testing 2

Seaside は一通り(さわりだけでも)理解したので、その設計思想に学びつつ、軽量なZincの上に色々なものを重ねていきたい。

とはいえ、 Seaside との出会いには感謝。おかげで開眼した。

今度は Zinc + GemStone/S というアーキテクチャを検討していく。 Zinc の上に独自のフレームワーク層をかぶせていく構想で。

P.S. 今日は第3回Smalltalkハッカソンに参加させて頂きました。主催の @umejava さんに感謝。