WebObjects雑感

仕事でWebObjectsを使用している。
このソフトウェアは嫌いじゃない。いや、むしろ好きなくらいだ。

今もてはやされているJSFだとか、O/Rマッピングだとか、こういった類いの機能はずっと前から実装されている。しかも、ツールがこなれていて、非常に使いやすい。(OSXに限られるが。)
Webページそのものは、WebObjects Builderというツールで生成する。これは独自のタグを埋め込んだHTMLファイルと、それに対応するJavaソース、その他フォームのバインディング設定ファイル等のセットである。これらのファイルを直に手で書く事は稀で、実際はツールを使ってGUIで作り込む。
Webデザイナーが作ってきたスタティックなHTMLをコピーペーストし、動的な部分はWebObjects Builderで置き換える・・といったような、一連の作業をする。
WebObjects Builderのインターフェース自体が、DreamWeaverGoLiveのようなHTMLエディタ面しているので、分かりやすい事この上無い。
データベース設計に関しても、使いやすいGUIツールで作り込むだけで、自動でスキーマ定義SQLから、Javaオブジェクトまで、簡単に作る事ができる。

こういうのもある。
WebServiceAssistantと言うツール。
WebObjectsApache Axisを内包していて、WebサービスだってGUIで作れちゃう。
でも、このツールの使い方がいまいち分からないのがだめなんだが。
また、J2EEアプリケーションサーバー上で、WebObjectsアプリケーションを動かす事も出来ちゃう。
サーブレットでラッピングしたWebObjectsアプリケーションが出来るのだ。WebObjects自体、全てJavaで書かれているので、原理上、全てのプラットフォームで稼働する事ができる。(実際問題はおいといて)

Direct2Webという機能がある。
データベースのスキーマ定義(WebObjectsではEOModelerというツールを使う。)を読み込んで、ウィザード一発でデータベース閲覧サイトを作る事ができる。
これは本当に便利。開発中になにがしかのデータ登録なんかをやりたくなった時に、Direct2Webでちょいちょいとサイトをつくれば、あっという間にデータベースメンテナンス用のインターフェースができあがる。

WebObjectsにfoundationというパッケージがある。
ここにKeyValueコーディングという独特の機能がある
何をするものかと言うと、オブジェクトのプロパティのセット、ゲットをプロパティ名で行えると言うものだ。

String address1=eo.valueForKey("address1");

このメソッドを呼ぶと、自動的に

getAddress1();

が呼ばれると言う仕組みである。
これはWebObjectsのありとあらゆる所で用いられ、バインディングという画期的(?)な手法に結びついた。

たとえば、WebページでユーザーのIDを表示するならば、WebObjectsBuilderで

session.userInfo.userId

というキーで指定すれば良い。
これは

session().getUserInfo().getUserId();

が呼ばれていることを意味する。

PropertyListというdtdXMLを書いてWebObjectsに読ませると、KeyValueコーディングで値をとってくる仕組みもある。
設定ファイル等に重宝する。PropertyList自体、OSXに標準の仕組みで、これを編集するための使いやすいエディタも存在する。

・・・なんていうツールが、どこぞのメーカーと違い、7万円ちょいで買う事ができる。(昔は700万円だった・・)

もちろん、悪い事もある。
まず、運用ツールがしょぼい。
しかも、かなり痛いバグがある。(最新版では直ったとの噂)
それに情報が少ない。これはAppleはいつもの事だ。
また、一般の認知度がきわめて薄い。しかもMacだから・・という妙な誤解も受けやすい。
APIもとっ散らかり気味・・NSArrayなど、java.util.ArrayListにも似たクラスが存在し、いちいち調べなくてはならない時もある。WebObjectsのみの閉じた世界でやるならば、それほど問題は起きないのだが・・・

でも、そんな事をすっかり忘れてしまうくらい開発効率も上がり、気楽にWebアプリケーションを作る事が可能だ。


しかし、ここ最近ではそういった優位性も、どんどん薄れてきている。

SunがJava Studio Creatorを出した。
Jakarta Tapestryもある。(仕組み的にはかなり類似している)
O/Rマッピングだって、Hibernateをはじめとする、すでに実績のあるツールが世の中にたくさん出てきた。
SQLを書かない事が今時それほど珍しい事ではなくなった。
それに、私のいる印刷業界では、RDBでおさまりきれないデータも多い。
そうなってくると、必然的にXMLという事にもなってくる。
KeyValueコーディングだって、Jakarta CommonsのBeanUtilsを使えば同じような事ができる。

それから、やっぱり独自の仕組みなので、後々のメンテナンスにも不安が残る。(ここが一番大きいか。)
しかも、AppleWebObjectsをこれからどうするのか、いまいち微妙な所もある。(WWDC直後の本国Developerの反応を見ると、あまり芳しい話は無いようだが・・・)