Seaside は Squeak上で動作する継続ベースの Webアプリケーションフレームワーク です。

WWW はステートレスな世界なので、Webアプリケーションの作成には情報の永続化に関する悩みがつきものです。しかし継続(Continuation)を使うことでプログラマ側にはステートフルな顔を見せる一方、クライアント側には相変わらずステートレスなアプリケーションの構築が可能です。

Seaside はプログラマにとっては HTTPリクエスト/レスポンス をいくら跨ろうと継続された処理を提供するので、Webアプリケーションの作成がコレまでの常識を覆すほどサクサクできます。

このシリーズは、A Seaside tutorialさんを元に進めた、猫自身のチュートリアル・メモになります。

Seasideのインストール Seaside の日本語版を梅沢さんが作ってくれてます。 SeasideJ インストール済みイメージも配布されているのでこれを利用するのがお手軽です。

Hello world と表示してみる。 それでは、まず単純に Hello, world と表示する Webアプリケーションを作ってみましょう。Seaside でWebアプリケーションを作るには、WAComponant のサブクラスを作るところから始めます。 WAComponent subclass: #HelloComponent instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'MySeasideTutorial' こうして作った WAComponent のサブクラスは VisualComponent になります。このコンポーネントは Seaside から #renderContentOn: メッセージが送られたときに引数で渡された WAHtmlRenderer を使って 画面を表示する責務を持ちます。 この renderer を使うと、XHTMLでのレンダリングが可能ですが、今回はシンプルにプレーンテキストで 'Hello, world' と表示するだけにしておきましょう。というわけで実装してみましょう。プレーンテキストのレンダリングには text: メッセージを送ります。 renderContentOn: html html text: 'Hello, world' これでHello, world コンポーネントは完成です。しかしまだ、Seasideにアプリケーションとして登録されていません。登録には #registerAsApplication メッセージを使います。Workspace で HelloComponent registerAsApplication: 'helloweb' を実行しましょう。これで コンフィグページ http://localhost:9090/seaside/config に helloweb というリンクが出来たハズです。ここをクリックすれば晴れてWebApplicationとしてHelloComponentが公開されたというわけです。

少しHTMLらしくする プレーンテキストでは何なので、すこしHTMLらしくしてみます。 HelloComponent >> #renderContentOn: メソッドをちょっと書き換えます。 renderContentOn: html html heading: 'Hello, World' level:1. html paragraph: 'ようこそ！ この Hello, World は Squeak上の継続サーバ Seaside で作られています。' コードから想像されるそのまんまの通り、<h1>要素と <p>要素 がレンダリングされます。HTML要素をネストさせたいときは、ブロックを使います。例えば、 <h1>Hello, World</h1> <p>ようこそ、Seaside の世界へ！ この Hello, World は <em>Squeak</em> 上の継続サーバ <em>Seaside</em>で作られています。</p> と言う HTML が欲しい時はこんな感じにします。 renderContentOn: html html heading: 'Hello, World' level:1. html paragraph:[ html text: 'ようこそ！ この Hello, World は '. html emphasis: 'Squeak'. html text: ' 上の継続サーバ '. html emphasis: 'Seaside'. html text: ' で作られています。']