# IPCとネットワーク

## クリップボードとドラッグアンドドロップ

ユーザが異なるアプリケーションでさまざまな種類のデータを処理するようになるにつれアプリケーション間でオブジェクトやデータを共有する必要は増加してきまた。GNOMEはアプリケーション間でのデータ転送に関連する２つの方法をサポートします:ドラッグアンドドロップ操作の使用と、システム規模のクリップボードを介したコピーおよびペーストです。クリップボードとドラッグアンドドロップは複数のアプリケーション間で機能し、GNOMEで開発されていないアプリケーションもそれに含まれます

クリップボードはアプリケーションのデータに対してユーザが明示的にコピーの操作を行ったときに使用されます。それによりアプリケーションはクリップボードの所有権を主張したことになります。ユーザが他のアプリケーションでペーストの操作を行ったときは、そのアプリケーションから最初のアプリケーションに対してクリップボードのデータが要求されます。クリップボードの操作はGTK+でフルにサポートされています。

ドラッグアンドドロップも同様の操作ですが、ポインタを追跡してドロップするターゲットとなる可能性がある対象の上を通過する場合は、カーソルを更新することが要求されます。アプリケーションはドラッグ中にポインタが上を通過すると通知を受けます。そのときアプリケーションはカーソルを更新すしてドロップを受け入れられるかどうかを示さなければなりません。GTK+はドロップされるターゲットをアプリケーションで管理するのを容易にする、洗練されたAPIによってドラッグアンドドロップをサポートします。

クリップボードとドラッグアンドドロップ操作はどちらもコンテンツのネゴシエーションをサポートします。アプリケーションが提供すべきデータを持っているときは、そのデータに関してどのようなフォーマットが有効なのかを提示します。データを受け取るアプリケーションは最も適切なフォーマットを要求します。たとえばユーザがウェブブラウザからテキストをコピーした場合、ワードプロセッサは受け取るデータがHTMLフォーマットでも管理できるためHTMLフォーマットを要求し、通常のテキストエディタはフォーマットなしのテキストを要求します。

あなたはあなたのアプリケーションで操作するデータにたいして、クリップボードとドラッグアンドドロップの機能を提供するべきです。クリップボードとドラッグアンドドロップはテキストにたいしてだけではなく、他のデータにたいしても便利な機能です: ファイル、グラフィック、そしてサウンド・クリップなどはどれもアプリケーション間で転送が可能なデータの例です。GTK+を使用すれば、テキストアリア、カラーボタン、ファイル選択、その他の組み込み済みのユーザインタフェース・コントロールで自動的にクリップボードとドラッグアンドドロップのサポートを享受することができます。アプリケーションで使用するその他のデータにたいするサポートを提供するためにもGTK+のAPIを使用するべきです。

詳細については Drag-and-Drop Protocol for the X Window System、X Clipboard Explanation、そして The Clipboard Manager Specification を参照してください。

## D-BUSメッセージ

D-Busはさまざまなアプリケーション、デスクトップ、システムの低レベルのコンポーネント間でイベントを送信するための、クロス・デスクトップのメッセージバスです。D-Busは特定のサービスのためにメッセージを転送したり、関心を持つサービスにたいしてメッセージをブロードキャストするためのシンプルなAPIを提供します。D-Busは異なる種類のアプリケーションとデスクトップが互いに通信、統合されることにより、よりよい相互作用とより豊かなユーザ経験を提供します。

D-Busはセッションとシステムバスを提供します。セッションバスは単一のユーザセッションでアプリケーションによって使用され、アプリケーションのデータ共有やイベントの通知、そしてユーザのデスクトップへの統合を可能にします。たとえば、ムービープレーヤーはD-BUSにメッセージを送ることによりユーザがムービーを見ているときはスクリーンセーバーの起動を抑止することができます。

システムバスはユーザセッションとは独立して実行される単一のメッセージバスです。システムバスはアプリケーションと通信することにより、それらのアプリケーションがシステムの低レベルな詳細を知ることなくシステムコンポーネントと相互作用することを可能にします。システムバスはユーザが彼らのシステムで動作することを期待するであろう重要な機能を提供します。たとえば、システムバスはネットワークインタフェースのUP/DOWNや外部デバイスがプラグインされたり、ラップトップのバッテリが低下するのをモニタするのに使用されます。

D-Busは freedesktop.org と共同で開発されたため、異なるデスクトップ環境やアプリケーションで使用することができます。D-Busはクロス・デスクトップのプロジェクトです。そのためユーザのデスクトップにシームレスに統合でき、多目的で可搬性のあるソフトウェアの作成に使用できます。

D-Busについての詳細は The D-BUS Tutorial と The D-BUS Specification を参照してください。

## Bonobo および CORBA

Bonobo、libIDL、および ORBitは、D-Busやその他の技術に置き換えられたため使用は推奨されていないことに注意してください(前記参照)。

Bonoboはアプリケーションで再使用可能なコンポーネントを作成するためのフレームワークです。業界標準であるCORBA(Common Object Request Broker Architecture)を基に構築され、GNOMEアプリケーションで安心して使用できるコンポーネントを作成、使用するために必要となるすべての共通インタフェースを提供します。

Bonoboのコンポーネントはさまざまな場面で使用でき、柔軟で拡張性のあるソフトウェアを作成する助けとなります。たとえば、マルチメディアのコンテンツを表示するコンポーネントをワードプロセッサに埋め込むことにより、ワードプロセッサが直接マルチメディアを処理することなく、ワードプロセッサにマルチメディアのサポートを追加することができます。BonoboコンポーネントはGNOMEパネルにアプレットを埋め込むのにも使用されています。Bonoboを使用することによりアプレットが効果的にパネルと通信することが可能になり、ユーザに統一されたインタフェースを提供することができます。

Bonoboのコンポーネントはグラフィカルなコントロールとは限りません。BonoboはGNOMEの電子メールクライアントでありグループウェア・スィートでもあるEvolutionで、アドレス帳やカレンダーへのアクセスに使用されていました。これによりユーザは自分の情報を１ヶ所に保存して、すべてのアプリケーションがアクセスできるようにしたのです。

BonoboはCORBA上に構築されているため、コンポーネントを独立したプロセスで実行することができます。コンポーネントは異なる言語で記述でき、異なるランタイム上で実行することができます。; 唯一必要なのはインタフェースがIDL(Interface Definition Language)で記述されていなければならないということだけです。CORBAの柔軟なデザインによりネットワーク上の異なるマシンのコントロールを実行することさえ可能です。

GNOMEは、高速で軽量なCORBA実装であるORBitを提供します。GNOMEにより供給されるツールとライブラリは、C言語や他のCORBA実装では使用できない言語でも効果的にコンポーネントを記述することが可能です。

BonoboはCORBAに欠けている、一貫したコンポーネントサポートするために必要な追加のインタフェースと仕様を提供することによって、そのギャップを埋める手助けをします。Bonoboを使わずにCORBAを使用することはほとんどないでしょうが、直接CORBAを使用することも可能です。たとえば、GNOMEアクセシビリティの基盤はCORBAにより、実行中のアプリケーションを調査・対話する援助ツールを実現しています。

あなたはグラフィカルで複雑な埋め込み可能コンポーネントを提供するためにBonoboを使用したいと思うかもしれません。しかし大部分のGNOMEにおけるIPCの必要性はD-Busへと移行しつつあります。アプリケーションをD-Busに統合することでそれらは大幅に簡単になります。

Bonoboについての詳細は Libbonobo Reference Manual および LibbonoboUI Reference Manual を参照してください。GNOMEのCORBA実装であるORBitについての詳細は ORBit2 Reference Manual を参照してください。

## サービス・ディスカバリ

DNSサービス・ディスカバリやZeroconfは、ネットワーク上で使用可能なサービスを自動的に探し出すための技術です。Zeroconfはアドレスを明示的に提供したりアプリケーションの手動で設定することなしに、ユーザがネットワークのリソースにアクセスすることを可能にします。

DNSサービス・ディスカバリはGNOMEでもいくつかの場所で既に使用されており、今後もさらなるサポートが追加される予定です。たとえばGNOMEのファイルマネージャである Nautilus はローカルネットワーク上のさまざまな種類のファイルサーバを発見するのにDNSサービス・ディスカバリを使用しています。GNOMEのビデオ会議・テレフォン用のアプリケーションである Ekiga はローカルネットワークでDNSサービス・ディスカバリを使用して、他のユーザを発見したりユーザの位置を公表したりすることができます。

完全なDNSサービス・ディスカバリはAvahiライブラリによりサポートされています。Avahiについての詳細は Avahiのウェブサイト を参照してください。

## XMLとWebサービス

相互接続が進む私たちの世界においては、さらにより多くのアプリケーションが色々なWebサービスを提供していく必要があります。Webサービスが単に機能の追加を提供する場合もあるし、Webサービスがアプリケーションの主要な目的である場合もあります。スタンドアローンでユーザを何年も満足させていたアプリケーションをWebサービス化することにより、革新的なユーザを新たに獲得した例もあります。

GNOMEプラットフォームはアプリケーションでWebサービスを使用するためのサポートと、ウェブ上の言語であるXMLの使用、管理、変換のための理解しやすいライブラリを提供します。

### SOAP

GNOMEはlibsoupライブラリによってHTTP上でXMLメッセージをやりとりするために広く用いられているSOAPにたいするサポートを提供します。SOAPは開発者がウェブ上で、アプリケーションが情報を取得するのに使用されたり、データ送信、トランザクションの生成、その他いくつものサービスを提供するためのインタフェースを公開することを可能にします。

SOAPは検索や情報の取得のために使用でき、オンラインストアでのやりとりや他のシステムでのユーザ管理、その他さまざまな目的のために使用されます。Webサービスはユーザのために重要な機能を提供するために今後ますます使用が期待できます。また、SOAPを使用するアプリケーションは、より統一され進化したユーザ経験を提供することができます。

ライブラリにはHTTP実装とSOAPメッセージを構築・使用するためのAPIが含まれています。これにより安全な認証も可能になるため、Webサービスを使用して安全な接続を使用してプライベートなアカウントにアクセスすることができます。

libsoupについての詳細は libsoup Reference Manual を参照してください。

### XML処理

1998年に正式に紹介されて以来、XML(eXtensible Markup Langauge) を使用するアプリケーションは増加しつづけています。それはXHTMLやDocBookのようなドキュメントの書式から、SOAPやJabberのようなインターネット・プロトコルまで、さまざまな目的で広く使用されてきました。XMLは読みやすくてシンプルな基本文法を提供し、アプリケーションがアプリケーション固有の問題に専念することを可能にします。

GNOMEには libxml2ライブラリが付属しており、デスクトップを通じて広い範囲で使用できます。libxml2ライブラリは高速で、XML処理の標準に完全準拠したライブラリであり、アプリケーションでXMLを使用するときに必要となるすべてを提供します。

libxml2ライブラリはXMLを処理するための、いくつかの異なるAPIを提供するので、あなたはアプリケーション開発の要件に最適なAPIを使用することができます。ネイティブのツリーAPIに加えて、libxml2はコールバック・ベースのSAX2 API、ストリームからのXMLの読み込み・書き込みのためのインタフェース、そしてXPathの完全なサポートを提供します。

libxml2はDTDサポートに加えて、より柔軟な妥当性評価モデルを持ち、簡単に使用することができるRELAX NGを使用したドキュメントにたいするサポートを提供します。またW3Cが策定した新しいスキーマ言語であるXML Schemaも部分的にサポートします。

アプリケーションで直接XMLを処理する場合はlibxml2を使用するべきです。libxml2を使用することにより、XMLの構文解析・処理・出力で完全な標準準拠を保証することができます。これは開発者がアプリケーション間での非互換を心配する必要がないことを意味します。

libxml2についての詳細は The Libxml Tutorial と The Reference Manual for libxml2 を参照してください。

### XSLTによるXMLの変換

XSLTはXMLを他の書式に変換するXMLベースの言語です。XSLTはテンプレートベースの言語であり、特定のタイプに一致するXML要素を見つけて適切な出力を生成することができます。XMLとXPathを基本として、XSLTは開発者がアプリケーションにより適した他の書式にXMLを変換するための読みやすくてモジュール化されたテンプレートを作成することを可能にします。

GNOMEにはXSLTの完全な実装であるlibxsltライブラリが含まれています。libxsltライブラリはlibxml2のXML、およびXPathのサポートを基に構築されていることから、高速で、標準に準拠しています。

XMLドキュメントを変換する場合はlibxsltを使用するべきです。XMLの処理において常にXSLTが正しい解決とは言えないものの、開発が簡単になる場合もあります。libxsltで拡張要素や拡張機能を追加できるようになってからは、アプリケーションに適するようにカスタマイズすることが可能になりました。

libxsltについての詳細は The XSLT C library for Gnome を参照してください。