回顧 - エージェント指向
33 engineers' blog 「Factor を試してみた」
当社のエンジニアが綴るブログです。
最近の記事を読んで、自分が昔どんなことに興味を持っていたかなと考えました。今回はその時に思い出した「エージェント指向」についてです。
◆ エージェント指向
皆さんは「エージェント指向」という言葉を聞いたことはありますか?
今から10年以上前の1998年くらいの一時期に少し流行ったキーワードだったと思います。要約すると、オブジェクト指向におけるオブジェクトがすべて受動的に刺激を受けて動作する(メソッドが呼ばれたら処理を開始する)のに対して、能動的に動作を起こすのがエージェントです。エージェント指向とは、そのエージェントを中心にして問題を解決するためのプログラミングパラダイムです。
なぜ1998年頃という具体的な数字を挙げたかというと、私が社会人になる一年前、大学4年生の頃に出会ったということを覚えているからです。当時この考え方に出会った私は「オブジェクト指向の次には必ずエージェント指向が注目されるはずだ」と興奮しました。
◆ エージェント指向言語 バージョン 0.1
おそらく当時には(今でも?)研究機関や大学などから発信されたエージェント指向を実現するための言語系はあったのではないかと思うのですが、よく知りません。そして私は当時少しだけ勉強していた Java でエージェント指向を実現するための言語拡張を考えたのです。
この拡張では、幾つかの考え方を追加するためのキーワードと記法を定義しました。拡張記法で書かれたコードを Java のコードに書き換えるコンパイラ(プリプロセッサ)と、いくつかのライブラリで構成されています。
自宅に過去のコードがあるかを確認しましたが、残念ながら残っていませんでした。当時は CVSDude もなければGitHubもない時代です。ソースコードはローカルでしか管理しておらず、あれから数台のマシンを乗り換えているので、もう跡形もありません。ですからここに書くのはすべて記憶を頼りにしています。
agent キーワードの追加
Javaにおける class キーワードに加えて agent キーワードを追加しました。agent は以下に説明する auto メソッドや auto 属性、特殊なメソッドである die を持つことができます。また、agent は agent を継承することもできます。
agent はプリプロセッサによって runnable インターフェイスを実装したクラスになり、自動生成されたコードの中で Thread に渡されるだけです。
auto メソッド
agent は能動的に動作しなければなりません。その動作を記述するために、メソッドの修飾子として auto というキーワードを追加しました。auto としてマークされたメソッドは他のオブジェクトから呼び出されるのではなく、自分自身で動作を開始します。
auto メソッドは実行時には設定した間隔で繰り返し Thread 内で実行されるだけです。自分自身が動作するべきタイミングかどうかは auto メソッド内で判定しなければならないという、非常に単純なものでした。
auto 属性
agent が単純に Thread によって処理されるだけではつまらないので、属性も能動的に変更されるようにしました。これがないと agent の属性は全て agent 自身が管理しなければならないので。auto 属性は、後続のブラケット内で更新ロジックを記述できます。
die メソッド
要するに agent の finalizer です。agent の生存期間がどのように終了するのかを記述します。
◆ エージェント指向言語 バージョン 0.2
会社に入社した私は、当時商用のCORBA(Common Object Request Broker Architecture)を扱う部署に配属されました。入社前にはまったくCORBAのことを知らなかったのですが、これを知った時の感動は今でも忘れません。
CORBAとは、定義したオブジェクトをローカル呼び出しと同じ記述でリモートでも記述できるといったもので、そのオブジェクトがローカル(同一アドレス空間)にあればローカル呼び出しで、リモート(同一ホストでも別プロセスならリモートホストと同じ)に存在していればミドルウェアが勝手にリモート呼び出しを行なってくれるというものです。OMG (Object Management Group) が標準仕様を策定していて、世の中には商用・オープンソース含めていくつかの実装がありました。
仕事で覚えたCORBAの技術を使ってみたくて、自分のエージェント指向言語拡張に取り入れました。agent は要するにリモート呼び出しも可能になるというものです。
◆ エージェント指向は今
あれから十数年が経ちましたが、私の想像や期待とは異なり、一般の開発においてエージェント指向が新たなパラダイムとして浸透することは今のところないようです。考えるに、エージェント指向がよりうまく解決する問題というものは存在しにくいというのが理由でしょうか。
自律的に強調して問題を解決する。これだけ聞くと非常に面白そうですが、システムはかなり複雑になりますし、不具合でもあろうものなら、タイミングによって発生するような種類のものでは原因の究明は非常に困難です。
やはり技術には、それが解決する問題というのが先になければならないということなのかもしれません。
独自エージェント指向言語は日の目を見ることもなく、成果を残すことなくなくなってしまいましたが、仕様を考えたり実装しているときにはそれなりに勉強にもなりました。こういった行動が今のエンジニアとしての私の礎になっているのかもしれません。
◆ 回顧録ですから
今回のコラムは、どうやって締めてよいのかまったく分かりません。ふと思い出した若かりし頃の興味対象がとても懐かしくなったので、書いてみただけなのです。