Dojo Toolkit

**Dojo Toolkit**はオープンソースのJavaScriptライブラリの1つで、クロスブラウザに対応したJavaScript/Ajaxアプリケーションを迅速に開発するために設計されている。2004年にAlex Russell, Dylan Schiemann, David Schontzlerらによって作成されたものが元となっており、現在はBSDライセンスとAcademic Free Licenseのデュアルライセンスで配布されている。
Dojo Toolkitを提供している**Dojo Foundation**は、Dojo Toolkitの企業採用を促進するために設立された非営利組織である。

## 機能
### 豊富な標準機能とUIパーツ（Dojoウィジェット）
Dojoを利用することで、ブラウザのJavaScript実装の違いを吸収する他、Ajaxアプリケーションの作成やJavaScriptのコーディングを手助けする様々な標準APIが利用可能となる。例えば、Ajaxアプリケーションではページ遷移による画面状態を失わなせないため、ブラウザの履歴に状態を保持する必要があるが、この機能はDojoではdojo.backという名称で提供されている。

また、Dojoは標準で様々なUIパーツを提供しており、ほとんどのUIパーツはプラグインなどを導入せずとも利用可能である。これらは**Dojoウィジェット**、もしくは単に**ウィジェット**と呼ばれる。Dojoウィジェットは、JavaScript、HTMLマークアップ、およびCSSを包括したコンポーネントであり、例えば以下のようなものがある。

* メニュー、タブ、ツールチップ、ダイアログ
* 並べ替え可能なテーブル
* 動的なグラフ
* アニメーション効果（フェードイン、フェードアウト、ワイプ、スライド）
* ドラッグアンドドロップ可能なツリー
* 多彩なフォーム部品と、フォームへの入力の妥当性検査
* カレンダーによる日付入力、時刻入力

提供されるAPI、ウィジェットの詳細については、Dojo API Referenceを参照のこと。また、DojoのデモがDojo公式サイトで公開されているので、合わせて参照されたい。

### テーマ
Dojoウィジェットの見た目は、テーマによって規定されており、デフォルトでは、以下の4種類のテーマを利用することが可能である。
* tundra
* soria
* nihilo
* claro (1.5から)
これらテーマは自作することも可能である。

### アクセシビリティへの配慮
Dojoが提供するデフォルトのウィジェットはアクセシビリティに配慮されており、ほとんど全てのウィジェットがキーボードのみでも操作可能になっている。また、デフォルトのテーマは色覚異常の人にも見やすいカラーリングとなるように配慮されている。

### 国際化対応
Dojoでは、国際化対応を行うための機能、および機構が提供されている (dojo.i18n)。また、Dojoが提供するデフォルトのウィジェットは最初から国際化対応されているものがほとんどで、ブラウザーの言語設定によって、UIパーツが自動的にローカライズされた見た目に変化する。

### 非同期通信
Dojoは、様々なブラウザでのXMLHttpRequestの実装の差異を吸収した、ラッパークラスを提供する（dojo.xhr）。また、様々な他のトランスポート（iframeなど）やデータフォーマット（ファイルのアップロードなど）もサポートしている (dojo.io)。これらを利用することによって、ページリロードなしでの情報のやり取り、およびページの見た目を変更することが可能である。

### パッケージシステム
Dojoは、モジュールの開発、利用を容易にするためのパッケージシステムを提供している。Dojoにおいて最も基本となるスクリプトであるdojo.jsを読み込むと、ルートとなる名前空間である"dojo"以下に、階層構造を持ったパッケージの名前空間がセットアップされる（io, eventなど）。この初期セットアップが完了すると、dojo.jsによって提供される関数（dojo.require）によってXMLHttpRequestが送信され、個々のDojoパッケージが読み込まれる。Dojoのパッケージからは、他のパッケージへの依存性を指定することも可能である。つまり、そのパッケージが読み込まれると、依存性が指定された他のパッケージも読み込まれる。

このパッケージの依存性解決には順序性を保障する必要があるため、同期的なHTTP通信が行われる。このため、パッケージを多く読み込むページでは、初期ロードに非常に時間がかかってしまい、またキャッシュが有効に機能しなくなってしまう（ほとんどのWebブラウザは、XMLHttpRequestを介して読み込まれたファイルをキャッシュしない）ため、Dojoでは以下で説明するカスタムビルドの機能を提供している。

### カスタムビルド
Dojoでは、最小限のパッケージを含むカスタマイズされたビルドを生成する、**カスタムビルド**の機能を提供している。この仕組みは、Dojoが標準で豊富な機能を提供するため、ファイルサイズやファイル数が肥大化してしまっていることを解決するだけでなく、パッケージシステムによるdojo.requireの同期通信をなくし、さらにクロスドメインでのスクリプト読み込みへの解決策を提供する。

カスタムビルドでは、**プロファイル**と呼ばれるパッケージのリストをインプットとして受け取る。ビルドを行うと、依存性を持ったパッケージが全て含まれ、更にRhinoを利用して圧縮された、1つのJavaScriptファイルを生成する。一般的な利用向けに事前構築されたプロファイルは、Dojo Toolkit（完全版）と同じ場所からダウンロードすることができる。

Dojoのカスタムビルドについては、Dojo Campusの該当ページを参照のこと。

### データストア
Dojoには、データストアと呼ばれる、データの読み書きを抽象化したオブジェクトを提供しており、その拡張として、サーバーサイドとのやり取りを容易にする、様々なクラスを提供している (dojo.data.*, dojox.data.*)。

* **ItemFileReadStore**: 検索機能を提供する、最も基本となる読み取り専用のデータストア。
* **ItemFileWriteStore**: データの追加や削除機能を持つ、読み書き可能なデータストア。
* **CsvStore**: カンマ区切りの表形式のデータを読み取る、読み取り専用のデータストア。
* **OpmlStore**: OPMLフォーマットの階層構造のデータを読み取る、読み取り専用のデータストア。
* **YahooStore**: Yahoo! Searchの検索結果を取得する、読み取り専用のデータストア。
* **DeliciousStore**: del.icio.usのブックマークを取得する、読み取り専用のデータストア。
* **RdfStore**: SPARQLを利用し、RDFデータサーバ(例: Rhizome RDF application server)とやり取りを行う、読み書き可能なデータストア。

この他、S3Store, RailsStore, WikipediaStore, Google*Store, CouchDBRestStoreなど、様々なWeb上のサービスと連携するためのデータストアが提供されている。詳細はDojo API Referenceを参照のこと。

### Adobe AIRのサポート
JavaScriptベースのAdobe AIRアプリケーションにおいて、Dojoを利用することが可能である。DojoはAIRのセキュリティ要件を満たすように変更されている。

Dojoのコンサルティング会社であるSitepenは、Dojoを利用した"Dojo Toolbox"と呼ばれるAdobe AIRアプリケーションを作成している。これは、APIビューワやDojoのビルドシステムのGUIが含まれている。通常、ビルドシステムはRhinoを通して実行されるが、このAIRアプリケーションではJavaを利用することなく、AIRからビルドシステムを実行している。

## Dojoでの開発
Dojoでの開発は、任意の適切なエディタを使用して行うことができる。NetBeans, Eclipse, Aptana, ActiveState Comodo等の例がある。NetBeansとEclipseは、自由ソフトウェアであり、AptanaとComodoはコミュニティバージョンが存在する。Dojoのプラグインは様々なIDEで利用可能である。 Dojoを使用したWYSIWYGの開発では、オープンソースのWaveMakerを使用することができる。

## Dojo Foundationとスポンサー
IBMとサン・マイクロシステムズは、Dojoのコードへの寄与を含めた、公式サポートをアナウンスしている。

Zend社はDojoとのパートナーシップと、Zend Frameworkへ組み込むことをアナウンスしている。

Dojo Foundationは501(c)(6)に属する非営利団体で、オープンソースプロジェクトを支援するために設立された。その主な目標は、企業による採用の支援と、コラボレーションのための、その他のプロジェクトの奨励である。

スポンサーとメンバーは以下の通り。

* IBM
* サン・マイクロシステムズ
* JotSpot
* SitePen
* Renkoo
* TurboAjax
* OpenLaszlo
* Nexaweb
* Bea Systems

Dojo Foundationは以下のプロジェクトを支援しており、これらはDojo Toolkitに組み込まれている。
* Persevere
* OpenRecord
* Cometd (for the Comet content-streaming paradigm)
* DWR
* Lucid Desktop 

## 脚注


## 参考文献

* 
* 
* 
* 
* 
* 
* 
* 
* 

## 関連項目

* JavaScriptフレームワークの比較(Comparison of JavaScript frameworks)
* Druid OSE

## 外部リンク

* dojotoolkit.org, Dojo公式サイト、デモなど
* Dojo Foundation
* Infoworld review of Ajax toolkits, 31 July 2006
* Dojo Overview