ObjectSquare [2000 年 1 月号]
はじめに こんにちは。エージェント技術についての連載第三回(最終回)をお送りします。前回はインターネットで活躍するエージェントについてお話しましたが、どうも皆さんの期待されていた内容とは違っていたかもしれません。反省の意味もこめて、今回は少し技術的なお話をします。しかし、技術的なバックグラウンドがどうであれ、エージェントが活躍する舞台は間違いなくインターネットでしょう。その辺りを、エージェントの可能性と併せてお話したいと思います。
エージェント
指向の歴史
最終回になっていまさら、という感もありますが、ここで少しエージェント指向、特にモバイルエージェント技術の歴史についてごくごく簡単に触れておきましょう。モバイルエージェントとは、エージェント技術の中でも核となるもので、自律的にネットワークを移動できるインスタンス(モノ)を作り出す技術です。モバイルエージェントの歴史は古く、もともとは1970年代の終わり頃に立案されたRP(リモートプログラミング)という概念がその起源だとされています。RPとはその名のとおり、サーバ側でクライアントが持ち込んだプログラムを実行させようという技術で、その目的は次のようなものでした。
  • ネットワークトラヒックの軽減によるパフォーマンスの向上
  • サーバプログラムの柔軟なカスタマイズ
RPの概念では、サーバ側の処理が終了するまでネットワークトラヒックが発生しないため、従来のクライアント・サーバ型(主にRPC:リモートプロシージャコール)に比べ、格段にネットワークのトラヒックを減らすことができるようになりす。また、どのような処理を行うかはクライアントがサーバに持ち込んだプログラムによって決まるため、サーバの機能に制限されない、柔軟なカスタマイズ(機能追加)が可能になります。
たとえば、サーバ側で「指定された名前のファイルを削除する」という機能だけが提供されている場合、従来のRPCコールを使ってすべてのファイルを削除しようとすると、ファイルの数だけサーバ機能の呼び出しを行う必要があり、ネットワークの伝播遅延がボトルネックとなってしまいます。このような場合はRPを用い、「すべてのファイルを削除する」プログラムをサーバに送り込めば、パフォーマンスの向上が期待できるでしょう。
このような背景から、1980年代に入って、RPはモバイルエージェント技術として研究されるようになってきました。
Telescript

Telescript

Telescript(テレスクリプト)とは1990年にジェネラル・マジック社(アップル・コンピュ−タ社が設立)が提唱したプログラミング言語で、商用言語として初めてモバイルエージェント技術を実装たものでした。その基本となる概念要素は今でも十分通用するものです。以下で簡単に説明しておきましょう。
  • Place (場所)
    Placeとはエージェントが存在できる場所を表します。エージェントを受け入れるサーバとも呼べるでしょう。
  • Agent (エージェント)
    Agentとは、さまざまなPlaceで処理を行うことのできるインスタンス(モノ)で、データとプログラムを組にしたもので構成されます。
  • Travel (移動)
    Travelとは、Place間でAgentが移動することを表します。AgentはPlace間を自由にTravelできます。
  • Meeting (出会い)
    Meetingとは、同じPlaceで2つ以上のAgentが会話する(機能を呼びあう)ことを表します。これはたとえば、ボスザルエージェントが子分ザルエージェントに対してMeetingにより「バナナをとってこい」と命令するようなやり取りを表現しています。
  • Connection (呼び出し)
    Connectionとは、異なるPlaceにいるAgent同士が呼び合うことを表します。
  • Authority (権限)
    AuthorityとはAgentやPlaceに与えられるもので、物理的な世界における個人や組織の権限と同様のものを表現します。AgentやPlaceのもつAuthorityは周囲に対して公開されています。
  • Permit (許可)
    Permitとは、Agentに対してどのようなことを許可するかを決めるデータを表します。AgentやPlaceが行うことができる範囲は、AuthorityにPermitを割り当てることで制限されます。
以上がTelescriptの基本的な概念です。発表当時は話題を呼び、その後1996年にWeb対応など改良が進められていますが、Javaの登場によりエージェント技術をとりまく勢力図は大きく変わってしまいました。
Java
エージェント

Java

説明するまでもないかもしれませんが、Java(ジャバ)とは1995年にサン・マイクロシステムズ社によって発表されたインターネット・イントラネットをターゲットとする汎用言語です。発表当時から一躍脚光を浴び、凄まじい勢いで発展していきました。今やJavaを取り巻く技術は多岐に渡り、EJB(Enterprise Java Beans)やJini(ジニーと発音)などはその最たるものと言えるでしょう。
Javaは動作するプラットフォームを選ばないため、マシン間を自由に移動するエージェント技術にとっては実に理想的な動作環境と言えます。ここでは、Javaを用いたエージェント技術を2つ紹介しましょう。

Aglets

AgletsはIBM社によって開発されたインターネットエージェントシステムで、Javaのクラスライブラリ上で実装されたものとしては先駆的なものの一つです。そして、Agletsを用いたシステムの開発はAglets Workbench上で実装することができます。Agletsの特徴として、次のようなものが挙げられます。
  • ATP(Agent Transfer Protocol)を用いたエージェント移動の実現。
  • 複数のエージェントが非同期に情報を交換する為のホワイトボード機能。
  • エージェント間の同期・非同期通信のサポート。
Agletsには他にも多くの特徴的な機能があるのですが、それらは後にORB(Object Request Broker)の標準的な機能として実現されていきます。

Voyager

VoyagerはObjectSpace社によって開発された、Java上でモバイルエージェント機能を実現するORBパッケージです。VoyagerはCORBA(Common Object Request Broker)などにも対応しており、セキュリティ機能やHTTPプロトコルへの対応など、インターネットを非常に意識した製品となっています。後のサンプルでは、このVoyagerをモデルに、説明していきたいと思います。
その他の
エージェント
技術

Agent Tcl

Agent TclはSun Microsystemsによって開発された言語であるTcl(Tool Command Language:ティクルと発音)によって実装されているエージェント技術です。Tclのコマンドを使うことで、エージェントは非常に柔軟な処理を行うことが可能になっています。Telescriptほど多くの機能が用意されているわけではありませんが、簡単なコードでエージェントを作成することができるため、プロトタイプ作成などに向いています。
以上、紹介した以外にもC, Tcl, Javaなどで動作するAra(Agents for Remove Access)など、たくさんのエージェント技術がリリースされていますが、ここでは紹介を割愛させていただきます。
歴史の
まとめ
さて、長々と歴史を紹介してきましたが、現在では、エージェント指向を考える道具としてJavaとインターネットがあれば十分だと考えられます。クロスプラットフォームとインターネットの世界を自由に飛びまわれるエージェントができること・・・そんなエージェントには無限の可能性が秘められていることでしょう(さらに最近ではXMLという共通言語も登場し、エージェント技術の先は明るいとも言えます)。
それでは、エージェント技術について、より具体的に見ていくことにしましょう。
エージェント
技術の実際
Javaで実装されたエージェントミドルウェアは、IBM社のAgletsやObjectSpace社のVoyagerなど、様々なものがリリースされています。ここでは、Voyagerをベースに、エージェントの実装について軽くふれてみましょう。
例として、毎回登場しているサルの世界を取り上げます。サル山(MonkeyPlace)にいるボスザル(Boss)が子分ザル(Follower)に「バナナ畑(BananaMarket)へ行きバナナを取って来い(getBanana)」と命令する(order)モデルについて考えましょう。
名称 クラス インターフェース
子分ザル Follower IFollower
バナナ畑 BananaMarket IBananaMarket
まず、サル山を作りましょう。サル山は単なるサーバですので、次のように作ります。 Voyager.startup();
同様に、離れたマシン(server)上でもバナナ畑をつくるためにVoyagerをスタートさせておきます。 Voyager.startup();
Voyagerはデフォルトでポート8000番でスタートします。次に、バナナ畑を作ります。これはサル山側から IBananaMarket market = (IBananaMarket)Factory.create("monkey.BananaMarket", "//server:8000");
のように記述します。これでserverに指定されたマシンのポート8000番にバナナ畑が作られます。もちろん、バナナ畑は離れたサーバ上で独立して作成しても構いませんが、その場合は何らかの方法(通常はネーミングサービスやIORを用います)によってバナナ畑をサル山に教えてあげる必要が生じます。
では、子分ザルを作りましょう。子分ザルは普通に Follower monkey = new Follower()
とサル山側で実行すると生まれます。ではこの子分ザルに命令しましょう。ボスザルはorder()という関数を呼ぶわけですが、この関数では次のような処理が行なわれます。 public void order(IBananaMarket market){
  try{
    Agent.of(this).moveTo(market, "getBanana");
  }catch(Exception e){
    System.println(e);
  }
}
つまり、marketへ移動して、getBanana()を実行せよ、という処理が指示されます。 marketへ移動した子分ザルは自分でgetBanana()を実行します。この処理は、簡単に書けば次のようなものになるでしょう。 public void getBanana(){
  try{
    Banana = market.getBanana();
    Agent.of(this).moveTo(Agent.of(this).getHome(), "presentBanana")
  }catch(Exception e){
    System.println(e);
  }
}
つまり、market(これは属性などで保持されているものとします)に対してgetBanana()によりバナナを取得し、getHome()により、もとの場所(サル山)に戻ってpresentBanana()を実行しボスザルにバナナを渡す、という流れです。
以上、Voyagerの機能を簡単にまとめると次のようになります。
エージェント受け入れサーバを起動 Voyager.startup(IPアドレス+ポート番号)
エージェントが作業するサーバオブジェクトを起動 IMyServer server = (IMyServer)Factory.create("サーバクラス名", "サーバアドレス")
エージェントを作成し、サーバに移動して処理を実行する (IAgent Agent.of(myAgent).moveTo("サーバアドレス", "作業関数")
オブジェクト
指向と
初期化
さて、当たり前のことですが、Javaはオブジェクト指向言語です。C++のようにメモリ管理を厳密に行う必要がないため、非常にプログラミングしやすいのが特徴です。よく、エージェント指向はオブジェクト指向の発展形だと言われることがありますが、私は連載第一回で「オブジェクトはモノとモノが協調する技術、エージェントとは結果を持ちかえるための技術」と位置付けました。何が違うのでしょう?それはオブジェクト指向の設計と深く関わっています。私はオブジェクト指向でプログラミングを行うとき、設計作業が非常に面倒だと思うことがあります。それはオブジェクト指向において、「必要以上のことを知らない」オブジェクトが「周囲と適切に協調」することが美徳とされているためです。周囲と協調するためには、協調する相手を知っていないといけない、協調する相手を知るためには、また別の周囲と協調しなければならない、、、オブジェクト指向の設計は難しいです。協調するために協調する、それは良い世界なのかもしれませんが、面倒な世界であることも確かです。結果が欲しいのなら、エージェント技術に切り替えても損はありません。
エージェント
の活路
とは言っても、エージェント技術には様々なリスクがあることを前回説明しました。では、どのような分野でエージェントが活躍できるのでしょうか?エージェント指向の特徴は、オブジェクト指向以上に現実の物理的なモデルを実現できることでしょう。そこで、いかに「現実」をモデル化するか、いかに「現実」を便利にするかが焦点となってきます。これからはEC(Electric Commerce)の分野が伸びると言われていますが、エージェント技術もそのような分野で注目されることになるでしょう。なぜなら、エージェント技術を用いることにより、「顧客ニーズを聞いて適切なサービスを提供する」という現実的なモデルが実現できることにつながるからです。
現在でも某保険会社など、対話的なエージェントを用いてサービスを提供してるサイトも見受けられますが、今後はそれらが本格的なエージェント技術によって支えられる日がくるかもしれません。
たとえば、ショッピングサイトで何か買い物をしたいと思ったとき、あらかじめ価格的な目安が決まっているのに、価格による検索機能がサイトに備わっていなければ、いちいち自分で値段を見て判別しないといけないため、とても面倒な思いをします。そんなとき、何か共通の「お探しエージェント」を受け入れる機能が各サイトに備わっていれば、自分の欲しいものをエージェントに教えるだけで、どのサイトでも、その条件に合うものを検索してくることができるようになることでしょう。
パーソナ
ライズ
前回は「ポータル」という言葉について簡単に触れましたが、最近は「パーソナライズ」という言葉も一つのキーワードになっています。つまり、自分の好みに合わせてカスタマイズできるサイトのニーズが高まってきています。My Yahoo!やMy Exciteなども有名で良く利用されている「パーソナライズ」サイトですが、究極のパーソナライズサイトは「My Agent」を利用できるサイトでしょう。現実には、まだそのようなサイトは存在しないようですが、自分のエージェントが、指定のサイトまたは複数のサイトから欲しい情報だけをかき集め、自分の好みのレイアウトで表示してくれる。そんなエージェントがいれば、過剰とも思えるインターネットの情報に呑み込まれることもなく、自分流にインターネットを楽しめることでしょう。
今後はエージェント技術がインターネット上で広く用いられるようになること、それこそがエージェント指向のゴールだと私は考えています。
最後に さて、エージェント技術について短い連載を行ってきましたが、今回で最終回となってしまいました。連載を通してお読みいただいた皆様には感謝いたします。エージェント指向技術が「産業分野」に活用できるのでは、という視点から連載を読まれた皆様には、インターネットに着目した本連載は少々物足りないものになってしまったかもしれませんが、インターネットで根付いた技術は、他の分野においても標準となる可能性が大きいと感じています。
2000年にはどのような技術がでてくるのか、今から非常に楽しみにしています。

あかまつ


© 2000 OGIS-RI Co., Ltd.
Prev. Index
Prev. Index