WebObjects

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

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

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

2025年現在もAppleはApple Store オンライン、App Store、Mac App Store、Apple Musicをはじめとした自社オンラインサービスを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は実質的に無料である。

なお、2007年10月に5.4がリリースされたが、2011年1月まで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が唯一の開発ツールとなった。

2007年10月を最後に長い間放置されてきたが、2016年5月、AppleはWebObjectsが開発終了と正式に認めた。

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

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

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

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

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