XMPP

XMPP(Extensible Messaging and Presence Protocol、旧称: JabberJabber Inc. - About Us)は、オープンソースのインスタントメッセンジャーのプロトコルおよび、クライアント、サーバの総称である。

 特徴 
Jabber は Jabber 社が開発した XML ベースのプロトコルである XMPP を採用している。他のメジャーなインスタントメッセンジャーはその仕様もプロトコルも非公開となっているのが普通だが、Jabber はサーバもクライアントもオープンソースであり、その仕様は全て公開されている（オープン標準）。そのため、たとえばメールサーバと同じように、ドメイン名とサーバさえあれば自分専用の XMPP サーバを立ち上げることができる。この点でほかのインスタントメッセージと異なる。

他のインスタントメッセージングサービスのゲートウェイとなる機能も持つ。この機能を利用し、Jabber クライアントから AOL Instant Messenger、MSN Messenger(.NET Messenger Service)、Yahoo!メッセンジャー、IRC、ICQ などのネットワークにメッセージを送ることができる。ただしサービスを提供しているサーバによっては、日本語が通らないこともある。

Google Talk は、Jabber を核にしたものである。

 歴史 
は1998年に Jabber テクノロジーに取り組み始め、1999年1月4日に  の最初のバージョンをリリースしたOpen Real Time Messaging System。初期の Jabber コミュニティはオープンソースソフトウェアに焦点を当てており、主に jabberd の開発をしていた（2000年5月にバージョン1.0、2000年10月にバージョン1.2、2001年2月にバージョン1.4を発表）が、一番の成果は XMPP プロトコルを作ったことである。

1999年から2000年に開発された初期の Jabber プロトコルは XMPP の基礎となり、XMPP は  と  として公表されている。（IETF の XMPP Working Group による規格化の際に主に変わった部分は、伝送路の暗号化用に TLS の追加と認証用に SASL が追加されたところである。）XMPPはよく  の競合相手とみなされる。SIMPLE は Session Initiation Protocol (SIP) プロトコルを基礎とする、インスタントメッセージングとプレゼンス通知の標準プロトコルである"XMPP rises to face SIMPLE standard", Infoworld magazine, April 17, 2003 XMPP rises to face SIMPLE standard"XMPP vs SIMPLE: The race for messaging standards", Infoworld magazine, May 23, 2003 Infoworld.com。

XMPP をベースにした最初の IM サービスは Jabber.org であり、1999年以降連続稼動していて XMPP のアカウントをフリーで提供しているChatting Up the Chef Linux Journal March 1, 2003 by Marcel Gagné。1999年から2006年2月まではサービスに jabberd を使用していたが、それ以降は  に移行した。（どちらも自由ソフトウェアのサーバアプリケーションである。）2010年1月には Isode Ltd. によるプロプライエタリの M-Link へ移行する予定である。

2005年8月に Google は Google Talk を発表した。これは VoIP と IM システムをあわせ持ち、インスタントメッセージングの機能に XMPP を使用していて、音声とファイル転送のシグナリングプロトコルのベースに XMPP を使用している。（最初のリリースにはサーバ間通信は含まれていなかったが、2006年1月17日にこの機能は有効になった。）

2008年9月にシスコシステムズは Jabber, Inc. と商用プロダクトである Jabber XCP の開発者を買収した。

2010年2月、ソーシャルネットワーキングサイトの Facebook は XMPP を通してチャット機能をサードパーティのアプリに開放した。Facebook の開発者のサイトでは、次のように注意を呼びかけている。Facebook のチャットは内部で実際に XMPP サーバを稼働させているわけではなく、単にクライアントに XMPP のインターフェースを提供しているだけである。したがって、ユーザリストの編集など、サーバサイドの機能は XMPP 経由ではできないことがある。

Google Talk だけでなく、多くの公共 IM サービスが XMPP を採用しており、Live Journal の LJ TalkQuestion FAQ #270 や Nokia の OviOvi Contacts などがそうである。さらに、企業の IM ソフトウェアプロダクトには、ネイティヴでは XMPP を使用できなくても XMPP へのゲートウェイを含むものがある。例えば、IBM Lotus Sametime"Lotus Sametime 7.5 Interoperates with AIM, Google Talk", eWeek, December 6, 2006 Eweek.com"Lotus ships gateway to integrate IM with AOL, Yahoo, Google", Network World, December 6, 2006 Networkworld.comやMicrosoft Office Communications Server (OCS)"Unified Communications: Uniting Communication Across Different Networks", Microsoft Press Release, October 1, 2009 Microsoft.comなどである。

 長所 

 中央サーバを持たない : XMPP ネットワークの構造は電子メールに似ており、誰でも自分の XMPP サーバを立てることができるので、中央サーバが存在しない。
 オープン標準 : XMPP はインスタントメッセージングサービスとプレゼンス技術として XMPP という名前で IETF により承認された。XMPP の仕様は  と  として公表されている。これらを実装するのにロイヤルティーは一切かからず、特定のベンダーに縛られることがない。
 歴史 : XMPP は1998年から利用されている。XMPP 標準のクライアント、サーバ、コンポーネント、ライブラリの実装は数多くあり、サン・マイクロシステムズや Google などの大きな企業に支えられている。
 セキュリティ : XMPP サーバは公共の XMPP ネットワークから切り離してもよく（例えば、会社でのイントラネットなど）、強固なセキュリティ（SASL や TLS を使用）が XMPP のコアに組み込まれている。伝送路の暗号化を促進するために、2009年10月30日まではXMPP Standards Foundationはxmpp.netに中間認証局の設置も行っており、XMPP サーバの管理者にフリーのデジタル証明書を提供していた。また、PGPによるエンドツーエンドの暗号化にも対応している。
 柔軟性 : XMPP に加えてカスタムの機能を実装できる。相互運用性を保つために、一般的な拡張は XMPP Software Foundation により管理されている。IM 以上の機能を持つ XMPP アプリケーションとして、ネットワークマネージメント、コンテンツ配信、グループウェア、ファイル共有、ゲーム、リモートシステムの監視などがある。

 短所 

 プレゼンスデータのオーバーヘッド : 一般にサーバ間通信の70パーセントがプレゼンスデータで[Standards-JIG] Distribution of stanza types、そのうちの60パーセント近くが冗長であるので[Standards-JIG] proto-JEP: Smart Presence Distribution、現在 XMPP はプレゼンスデータを複数のレシピエントへ転送する際に大きなオーバーヘッドがある。この問題を緩和する新しいプロトコルが考えられている。

 インバンドによるバイナリデータの転送は非効率 : XMPP は単一の長い XML ドキュメントとして符号化されるので、バイナリデータはインバンドで転送する前にまず Base64 でエンコードしなければならない。このため巨大なバイナリデータ（例えば、ファイル転送など）はアウトオブバンドで転送するのがもっとも良く、インバンドによる通信は制御用に用いる。最も良い例は XMPP の拡張プロトコルである（XEP-0166）である。

 サーバの分散とアドレッシング 
XMPP ネットワークはクライアントサーバアーキテクチャを採用している（クライアントは直接通信しない）が、中央サーバを持たない。権威ある中央サーバが存在しないように設計されており、これはAOL Instant Messenger や Windows Live メッセンジャーとは対照的である。jabber.org で動作している公共の XMPP サーバが存在しており、ここに多くのユーザが登録されているので、この点などでよく混乱されるが、誰でも自分のドメインで自分の XMPP サーバを立てることができる。XMPP の標準のTCP ポートは5222である。

ネットワーク上のすべてのユーザはユニークな Jabber ID（よく省略され JID と呼ばれる）を持つ。ID のリストを持つ中央サーバを不要にするため、JID はメールアドレスのような構造を持っている。ユーザ名と、ユーザの存在するサーバのあるドメイン名があり、アットマーク（@）で仕切られる。例えば、username@example.com のようになる。

ひとりのユーザは複数の場所からログインするかも知れないので、クライアントでは更に追加でストリングを指定する。例えば、home、work、mobile など。このリソースで、ユーザのどのクライアントなのかを特定する。そしてこのリソースは、JID のあとにスラッシュに続けてリソース名を指定することで JID に含めることができる。リソースには優先度という数値を指定しても良い。例えば、あるユーザのモバイルアカウントの完全な JID は、username@example.com/mobile である。単に username@example.com に対して送られたメッセージはもっとも優先度の高いクライアントへ行くが、username@example.com/mobile に対して送られたものはモバイルクライアントのみへ行く。

 メッセージ転送の仕組み 
juliet@capulet.com が romeo@montague.net へチャットをしたいとする。Juliet と Romeo はそれぞれ capulet.com と montague.net にアカウントを持っている。Juliet がタイプしてメッセージを送ると、一連のイベントが以下のように続く。
 Juliet のクライアントがメッセージを capulet.com のサーバへ送る。
 capulet.com で montague.net がブロックされていると、メッセージは破棄される。
 capulet.comの サーバは montague.net へ向けてコネクションを張る。
 montague.net で capulet.com がブロックされていると、メッセージは破棄される。
 このとき Romeo が接続していなかったら、メッセージは後で送るために保存される。
 montague.net のサーバは Romeo にメッセージを送る。

 Juliet → capulet.com → montague.net → Romeo

 他のプロトコルへの接続 
600px|right|thumb|Alice は XMPP ネットワークを通して ICQ トランスポートにメッセージを送る。次にメッセージは ICQ ネットワークを通じて Bob へ送られる。
XMPP の他の便利な特徴はトランスポートである。ゲートウェイという名前でも知られていて、他のプロトコルを使うネットワークにアクセスすることが可能になる。インスタントメッセージングのプロトコルだけでなく、SMS や電子メールなどのプロトコルでも可能である。マルチプロトコル対応のクライアントと違って、リモートコンピュータで動作する特別なゲートウェイサービスを通して通信することで、サーバレベルでアクセス出来るようにしている。ユーザは、これらのゲートウェイのひとつにネットワークのログインに必要な情報を提供して「登録」する。すると、そのユーザは、XMPP のユーザと同じようにそのネットワークのユーザと通信できる。つまり、XMPP を完全にサポートしたクライアントであれば、ゲートウェイが存在するどんなネットワークのアクセスにも使えるということである。クライアントに一切コードを追加する必要がなく、クライアントが直接インターネットに接続できる必要もない。こういった機能は、使っているプロトコルの利用規約に違反する可能性があるが、国によって何カ国かでは、そのような利用規約は法的拘束力を持たない。

 関連項目 
 Matrix (プロトコル)

 脚注 

 外部リンク 
  - Extensible Messaging and Presence Protocol (XMPP): Core
  - Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence
  - Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging (CPIM)
  - End-to-End Signing and Object Encryption for the Extensible Messaging and Presence Protocol (XMPP)
 XMPP Standards Foundation
 Jabber User Guide - End user introduction to XMPP (archive)
 XMPP Case Studies
 Jabber.org (Free XMPP server of the XSF
 XMPP.JP

Category:アプリケーション層プロトコル
Category:インスタントメッセージング・プロトコル
Category:オープンソースソフトウェア