WebObjects

WebObjects（ウェブオブジェクツ）は、Mac OS Xの開発環境に含まれていた、JavaによるWebアプリケーションサーバである。Appleが開発していた。

Webアプリケーション・Webサービスを開発・運用するための開発ツール・フレームワークを持ち、徹底したオブジェクト指向、強力なデータベース接続機能、ラピッドプロトタイピングが可能なツールが特徴である。WebObjectsでは、ウェブブラウザから使用できるウェブアプリケーション、Webサービスを提供するアプリケーションを開発することができる。

WebObjectsのサポートするプラットフォームは開発・運用環境共にMac OS Xのみだが、運用環境はJavaのみで開発されており、JavaをサポートしているプラットフォームであればWebObjectsアプリケーションを運用できる（バージョンによってはMac OS X Serverを購入して運用ライセンスを得ることが必要）。また、JBoss、Apache Tomcat、BEA WebLogic、IBM WebSphereといったサードパーティーのJava EEアプリケーションサーバでも運用できる。

現在AppleはApple Store オンライン、App Storeをはじめとした自社オンラインサービスをWebObjectsで構築している。中でもiTunes Storeは最も利用者の多いWebObjectsアプリケーションであった。

特徴 
コストが不要
WebObjectsはMac OS Xの開発環境に付属するので、Mac以外のコストはかからない。
強力なフレームワーク
 Webアプリケーションの開発・運用に必要な機能を提供する各種フレームワークを持つ。
Webアプリケーションサーバ
 WebObjectsアプリケーションはJava SEベースのWebアプリケーションサーバとしてスタンドアロンで動作する。アプリケーションの管理にはJavaMonitorというアプリケーションを使い、Webブラウザから操作する。サーブレットとしてJava EEサーバで運用することも可能。
データベースアクセス
 関係データベースのテーブルをクラスにマッピングするデータベースフレームワークにより、SQL文を記述することなくデータベースにアクセスすることができる。（オブジェクト関係マッピング）
プレゼンテーション、ロジック、データの分離
 プレゼンテーション (HTML)、ロジック (Java)、データ (SQL) を明確に分離し、再利用可能なWebページを構成する。
ステート管理
 セッションを用いてあらゆるオブジェクトを長期間保持することができる。
スケーラビリティとパフォーマンス
 複数のアプリケーションインスタンス、複数のアプリケーションサーバを管理できる。負荷分散のアルゴリズムは3種類用意されている。
ルールベースの高速アプリケーション開発
 プロジェクト作成時にデータモデルを与えるだけで、カスタマイズが可能なWebアプリケーションを生成することができる。

歴史 
WebObjectsは1996年3月にNeXT Software Inc.から世界初のWebアプリケーションサーバとしてリリースされた。以降他製品との競争により開発が進み、ウォルト・ディズニー・カンパニー、デルコンピュータ、英国放送協会、日産自動車などの大企業でも使われるようになった。

その後NeXTはApple Computerに買収され、Apple ComputerはWebObjectsを手に入れてからソフトウェアをハードウェアの販売につなげる戦略を展開している。2000年には無制限の運用ライセンスを含めたWebObjectsの価格を、5万ドルから699ドルに大幅に値下げした（当時の日本円で約692万円の値下げ）。2001年5月にはWebObjectsの運用環境を含めたMac OS X Serverの販売を開始した。Mac OS X ServerにはWebObjectsの無制限の運用ライセンスも含まれているので、WebObjectsは実質的に無料である。

なお、現在もAppleはバージョン5.2の販売を継続している。WebObjects 5.2はWindows 2000 ServerとSolaris 8での運用を公式にサポートしており、Windows 2000 Professional用の開発ツールが付属している。

2005年6月にはバージョン5.3がリリースされ、WebObjectsは単体の製品からMac OS Xの一部として移行した。699ドルで販売されていた開発ツールとフレームワークはXcodeに付属するようになり、WindowsやSolarisなど他プラットフォームのサポートを打ち切った。一部の開発ツールのインタフェースが一新されたが、主な機能にほとんど変更はなかった。AppleはこのままWebObjectsをXcodeに統合する方針だったが、この方針はすぐに変更されることとなった。

2006年8月、AppleはWWDCでCocoa-Javaブリッジの廃止を告げた。WebObjectsの開発ツールはすべてCocoa-Javaブリッジを利用して実装されていたが、Appleは再実装を行わないことに決めた。これにより、WebObjectsの開発ツールもすべて廃止されることとなった。

AppleはWebObjectsのランタイムのみ開発を継続することにし、開発ツールの開発をオープンソースコミュニティに任せることにした。オープンソースのツールの中でも代替可能なものは、EclipseのプラグインであるWOLipsである。WOLipsは、すでに何年も重要な更新のないAppleのツールに匹敵する機能を持っていた。ただしEOModelerに相当する機能だけ欠けていたが、Appleの方針が定まったことで、急ピッチで開発が進められた。

2007年10月、Mac OS X Leopardの開発ツールに含まれる形でWebObjects 5.4がリリースされた。ライセンスキーが不要になり、プラットフォームと開発・運用の区分に関係なく使えるようになった。Mac OS X Leopardの開発ツールからWebObjectsの開発ツールが廃止され、XcodeでもWebObjectsプロジェクトを開発できなくなり、事実上WOLipsが唯一の開発ツールとなった。

フレームワーク 
WebObjectsで使われる主なフレームワークは次の3つに分けられる。

WebObjects フレームワーク (WOF) 
WebObjects（ウェブオブジェクツ）フレームワークは、Webインタフェースとステート管理の機能を提供する。Webページを「テンプレート（HTMLファイル）、ロジック（Javaクラス）、両者間の設定ファイル（バインディングと呼ぶ）」の3つの要素で構成し、コンポーネントと呼ばれる単位で管理する。Webページ表示時には、テンプレート内の<WEBOBJECT>タグが設定に応じてHTMLに変換される。

このフレームワークはハイパーリンクやフォームコントロールも管理する。フォームの入力値は適切なオブジェクトに変換され、コンポーネントオブジェクトに代入される。ハイパーリンクや送信ボタンをクリックすると、コンポーネントオブジェクトのメソッドが呼び出されるようになっている。

また、ステート管理によりコンポーネントオブジェクトはHTTPトランザクションを越えて保持される。そのためオブジェクトの状態をHTMLとして表示したものがWebページとなる。WebObjectsアプリケーションでは、ユーザはブラウザを通してオブジェクトを操作していると言える。

Enterprise Objects フレームワーク (EOF) 
Enterprise Objects（エンタープライズオブジェクツ）フレームワークは、関係データベースとオブジェクト（Enterprise Object、エンタープライズオブジェクト、略してEOと呼ばれることが多い）をマッピングする。必要に応じてSQL文を生成するため、データベースの問い合わせから保存までオブジェクトを通して操作することができる。

EOFの大きな特徴はデータ構造としての関係データベースをマッピングするだけでなく、DBMSとしての機能（トランザクション管理、同時実行制御、整合性など）を備えている点にある。特にトランザクション管理を行うオブジェクト (EOEditingContext)が中心となり、多くのデータベース操作はこのオブジェクトを通して行われる。データベース操作後はオブジェクトとデータベースが同期され、SQL文も随時生成されるので、データベースを特別に意識しなくてもプログラミングすることができる。

Foundation フレームワーク 
Foundation（ファウンデーション）フレームワークは、基本的なデータ構造やWebObjectsに必要な機能を提供する。前述したフレームワークはこのフレームワークに依存している。

このフレームワークは配列や辞書などの基本的なコレクションクラスも持ち、一部機能がJava標準ライブラリと重複する。バージョン5以前のWebObjectsはObjective-Cで開発されており、NeXTSTEP / OPENSTEPの同名フレームワークに大きく依存していた。そのためJavaに移行する際に同名フレームワークがほぼそのまま移植された。ただし、多くのクラスでJava標準ライブラリと同じインタフェースが実装されている。

ルールベースのアプリケーション開発 
WebObjectsにはEOFの設定ファイルを与えるだけで各種データベース操作（検索、追加、更新、削除）を行うアプリケーションを作成する機能があり、プロトタイプを素早く作成することができる。このアプリケーションは起動時に設定ファイルからデータベースの情報を取得し、動的にWebインタフェースを生成する。アプリケーションをカスタマイズするには主にルールを用い、ルールの変更は再コンパイルをしなくともアプリケーションに反映される。

ルールベースのアプリケーションは次の3種類。

Direct To Web (D2W)
 HTMLベースのWebアプリケーション。
Direct To Web Services
 Webサービスアプリケーション。

Javaとの互換性 
WebObjectsはJavaで実装されている。

運用
 Java 1.3以降をインストールしたOSで動作する。サポート外ではあるが、Windowsや各Linuxディストリビューションでの動作が確認されている。またJava EEサーバでも運用することができる。
Java EEとの統合
 WebObjectsアプリケーションを.warファイルなどにまとめ、Java EEサーブレットとして運用できる。
JDBC
 WebObjectsはJDBCドライバを使ってデータベースと通信する。

バージョン履歴 
 1.0 — 1996年5月28日
 デビューリリース。
 2.0 — 1996年6月25日
 WebObjects Builderのプレリリース。
 3.0 — 1996年11月
 3.1
 Java APIの一部をサポート。
 3.5 — 1997年12月
 Javaのサポートを強化。すべてのコンポーネントとオブジェクトがJDK 1.1.3で動作するようになった。
 4.0 — 1998年9月
OPENSTEP 4.2 OSのサポートが中止され、YelloBoxと呼ばれるOPENSTEPのライブラリがWindows NTに移植された。
 静的なURLから特定のメソッドを呼び出せる、ダイレクトアクションと呼ばれる機能が追加された。
 Direct to Webアプリケーションが開発できるようになった。
 WebObjectsとEOFがスレッドセーフになり、マルチスレッドで動作するアプリケーションを開発できるようになった。
1999年3月 
 Mac OS X Serverに対応。このMac OS X Serverは「Rhapsody」のコードネームで開発されていたもの。
 4.5 — 2000年5月
 Objective-Cで開発できる最後のバージョン。
 5.0 — 2001年5月
 Objective-CからJavaに全面的に書き直された。
 5.1 — 2002年1月10日
 Enterprise JavaBeansをサポート。
 アプリケーションをサーブレットとして運用できるようになった。
 5.2 — 2002年11月
 Webサービスをサポート。
 5.2.1 — 2002年11月
 5.2.2 — 2003年8月
 5.2.3 — 2004年2月
 5.2.4 — 2005年5月2日
 5.3 — 2005年6月6日
 開発ツールがXcodeに統合された。
 開発・運用環境がMac OS Xのみのサポートになった。
 5.3.1 — 2005年11月10日
 5.3.2 — 2006年8月7日
 5.3.3 — 2007年2月15日
 5.4 — 2007年10月 (Mac OS X 10.5)
 開発ツールの廃止 (EOModeler, WebObjects Builder、Rule Editor)。
 Xcodeから開発環境が外された。以降の開発はWOLipsを使う必要がある。

オープンソースの代替ソフトウェア 
OPENSTEPと同様、WebObjectsが周囲に与えた影響は小さくない。
WebObjectsがObjective-CからJavaに書き直されてから、オープンソースの代替ソフトウェアが数多く作られてきた。
Objective-CやJavaを含め、様々な言語で影響を受けたフレームワークが開発されている。

 Objective-C
 SOPE
 GNUstepWeb
 Java
 Tapestry
 Cayenne
 wotonomy
 Ruby
 IOWA
 Borges
 SWS
 SDS
 CGIKit
 TapKit
 Python
 Modeling Framework
 Smalltalk
 Seaside
 PHP
 PHOCOA

外部リンク

情報及びサンプルコード 
 Apple WebObjects product page（英語版）
 Apple WebObjects developer page（英語版）
 Apple WebObjects Reference Library（英語版）

オープンソースの代替ソフトウェア 
 Objective-C
 SOPE
 GNUstepWeb
 Java
 Tapestry
 Cayenne
 wotonomy
 Ruby
 IOWA
 Borges
 SWS
 SDS
 CGIKit
 TapKit
 Python
 Modeling Framework
 Smalltalk
 Seaside
 PHP
 PHOCOA
 Haskell
 WebFunctions

Webサーバ
Appleのソフトウェア
MacOS
Java
ウェブアプリケーション