Dojo ToolkitはオープンソースのJavaScriptライブラリの1つで、クロスブラウザに対応したJavaScript/Ajaxアプリケーションを迅速に開発するために設計されている。2004年にAlex Russell, Dylan Schiemann, David Schontzlerらによって作成されたものが元となっており、現在はBSDライセンスとAcademic Free Licenseのデュアルライセンスで配布されている。 Dojo Toolkitを提供しているDojo Foundationは、Dojo Toolkitの企業採用を促進するために設立された非営利組織である。
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種類のテーマを利用することが可能である。
これらテーマは自作することも可能である。
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.*)。
この他、S3Store, RailsStore, WikipediaStore, Google*Store, CouchDBRestStoreなど、様々なWeb上のサービスと連携するためのデータストアが提供されている。詳細はDojo API Referenceを参照のこと。
JavaScriptベースのAdobe AIRアプリケーションにおいて、Dojoを利用することが可能である。DojoはAIRのセキュリティ要件を満たすように変更されている。
Dojoのコンサルティング会社であるSitepenは、Dojoを利用した"Dojo Toolbox"と呼ばれるAdobe AIRアプリケーションを作成している。これは、APIビューワやDojoのビルドシステムのGUIが含まれている。通常、ビルドシステムはRhinoを通して実行されるが、このAIRアプリケーションではJavaを利用することなく、AIRからビルドシステムを実行している。
Dojoでの開発は、任意の適切なエディタを使用して行うことができる。NetBeans, Eclipse, Aptana, ActiveState Comodo等の例がある。NetBeansとEclipseは、フリーソフトウェアであり、AptanaとComodoはコミュニティバージョンが存在する。Dojoのプラグインは様々なIDEで利用可能である。 Dojoを使用したWYSIWYGの開発では、オープンソースのWaveMakerを使用することができる。
IBMとサン・マイクロシステムズは、Dojoのコードへの寄与を含めた、公式サポートをアナウンスしている。
Zend社はDojoとのパートナーシップと、Zend Frameworkへ組み込むことをアナウンスしている。
Dojo Foundationは501(c)(6)に属する非営利団体で、オープンソースプロジェクトを支援するために設立された。その主な目標は、企業による採用の支援と、コラボレーションのための、その他のプロジェクトの奨励である。
スポンサーとメンバーは以下の通り。
Dojo Foundationは以下のプロジェクトを支援しており、これらはDojo Toolkitに組み込まれている。
Owlapps.net - since 2012 - Les chouettes applications du hibou