Ajax

**Ajax**（エイジャックス、アジャックス）は、ウェブブラウザ内で非同期通信を行いながらインターフェイスの構築を行うプログラミング手法である。XMLHttpRequest（HTTP通信を行うためのJavaScript組み込みクラス）による非同期通信を利用し、通信結果に応じてダイナミックHTML (DHTML) で動的にページの一部を書き換えるというアプローチを取る。

Ajax は『』の略で、2005年2月18日に米国のインフォメーションアーキテクトであるジェシー・ギャレットにより名付けられた。

## 概要
1997年頃、第1次ブラウザ戦争が勃発し、その中で動的にWebページを書き換えるDHTMLという概念が登場した。登場したばかりの頃は、クライアントサイドでページを書き換える必要性は薄いとされ、ページの動的な装飾のみに有用であると考えられていた。しかし、Web技術者の実験的なコーディングの結果、JavaScript上で非同期通信を記述することで、業務や実用に耐える優秀なインターフェースを備えたアプリケーションをHTML+CSS+JavaScriptで作成可能であることが徐々に判明していった。

従来のWebアプリケーションでは、サーバにリクエストを送信後、レスポンスを新たにウェブページとして受け取ることで画面遷移が発生していたが、Ajaxにより画面遷移を伴わない動的なWebアプリケーションの製作が実現可能になる。
例えばWeb検索に応用することで、従来は入力確定後に行っていた検索を、ユーザがキー入力をする間にバックグラウンドで行うことによってリアルタイムに検索結果を表示していく（インクリメンタルサーチ）といったことが可能になる。

上記の機能は、Webブラウザ標準搭載の技術のみで実現できる。Ajaxという用語が考案される前から手法自体は存在しており同時多発的に試みられていた。しかし、2005年に行われた、コンサルティング会社を経営するJesse James GarrettによるAjax:A New Approach to Web Applicationsというエントリの投稿と、GoogleがGoogle マップやGoogle サジェストにこの手法を使用したことで有名になり、Webアプリケーションの操作感覚をネイティブアプリケーションの操作感覚に近付ける手法としてAjaxが注目され始めた。さらに、Googleでは、デスクトップアプリケーションと遜色のない電子メールクライアントであるGmailやGoogle Calendarでも積極的にAjaxを使用し、Ajaxの実用性がGoogleのWebアプリケーションを通じて世界中のインターネット技術者に広く認知された。

AjaxによるWebプログラミング（Webアプリケーション製作）が注目された背景には、この従来のページ遷移のみに頼ったWebの使い勝手の悪さに対する不満や、XML、DOMなどのWeb関連技術の標準化（ウェブ標準）、および高い機能を持ったWebブラウザの普及などが挙げられる。

## 問題点
従来の技術の組み合わせであるため、それぞれの持つ問題をそのまま内包する。
例えば、各種Webブラウザ間のDHTMLの実装の違いをコードで吸収する必要がある。

実際、Ajaxを実現する技術はブラウザ間で実装に違いがあり、基幹技術であるXMLHttpRequest実装の元となったInternet Explorerの実装の解説ではXMLHttpRequestという用語は見あたらず、ActiveXでMicrosoft XML (MSXML) 機能を呼び出して実行する。Internet Explorer 6では、Microsoft XML 3.0が付属しているため、ActiveXを無効にしていない限りこの機能が使える。Microsoft XMLの実装ではバイト配列を取り出せるなど機能的な違いもある。言語としてVBScriptが使える点も異なる。

また、Ajaxアプリケーションでは動的にページの一部が書き換えられる為、デザインとコードが以前のように単純に分離できないという開発上の問題点がある（Model View Controllerも参照）。このため、現在では通常のWeb開発に比べ開発により時間がかかると言われている。

Ajax の必要性が叫ばれるにつれこうした問題を解決すべく、アプリケーションフレームワークの開発が進み、これらを利用することで、こうした問題は解決しつつある。

## Ajax用アプリケーションフレームワーク
Ajaxフレームワークとしては以下のようなものがあり、それぞれについて特徴がある。

* Google Web Toolkit
* Prototype JavaScript Framework
* jQuery
* Spry

これらを利用することで、ブラウザの互換性に関する問題を解決することが出来、またデザインとコードの分離といった Web 開発の効率性を高める工夫を取り入れることも可能になるとされている。

Spry は、Adobe CS のような統合開発環境に組み込まれていたり、Prototype は、Ruby on Rails などの Web アプリケーションフレームワークの一部として統合されるなど、さまざまな Web 開発ソフトウェアの一部として組み込む動きも広がっている。

## 補足
非同期メソッドはAjax独自のものなのかと勘違いしやすいが、HTML DOMにはXMLHttpRequest以外に以下のような非同期メソッドが存在する。

* Image#src, HTMLImageElement#src
* Window#location (HTMLIFrameElement, HTMLFrameElement)
* HTMLScriptElement#src
* DHTML Behavior (#default#download)

現在はAjax関連技術としてXMLHttpRequestを全く使わないプログラムまでが取り上げられるようになっており、JavaScriptを効果的に使用して動的なWebサイトを作る手法全般をAjax関連と広く捉える傾向も巷に存在する。

## 脚注

### 注釈

### 出典

## 関連項目

* Web 2.0
* JavaScript
* ECMAScript
* ダイナミックHTML
* Document Object Model
* XML
* XML-RPC
* Model View Controller
* WDDX
* Adobe Integrated Runtime
* Silverlight
* オープン標準
* Comet
* WebSocket
* Prototype JavaScript Framework
* jQuery
* Ext JS
* ZK (フレームワーク)
* MooTools
* AngularJS
* Backbone.js

## 外部リンク

* Ajax掲示板
* Ajaxな日々

### Toolkits
* Ajax.NET Professional, first .NET framework.
* Dojo Toolkit、AJAX/DHTMLツールキット。
* Ext JS
* Prototype, open-source framework. 最終更新は2015年
* ZK, Ajax but no Javascript. Demo
* Google Web Toolkit, Build AJAX apps in the Java language.
* jQuery, jQuery.