【レポート】

新しいソフトウェアの創造を - IPA「未踏ソフトウェア創業事業」成果報告会

2 新発想の検索エンジンや、通信プロトコルの仕様記述言語の成果報告

    佐藤晃洋  [2005/09/12]

    新たな発想による2つの検索システム

    次にご紹介するのは、情報の管理を容易にすることを狙いとした2つのプロジェクト。1つは全文検索型のサーチエンジン、1つはWebの閲覧履歴などをキーとした検索システムだ。どちらも今までにない発想の検索システムであり、今後の発展が期待される。

    前者は、平林幹雄氏が開発した「Hyper Estraier」。基本はN-gram法による文章解析を実装した全文検索型サーチエンジンなのだが、Namazuなどの一般的な全文検索エンジンと大きく異なるのは、サーチエンジンのデータベースを管理するノード(1台のサーバ上で複数のノードが動作する)同士がP2Pによる通信を行って検索を行うという点。具体的にはクライアントからとあるノードがクエリーを受け取ると、そのノードから指定されたホップ数内に存在するノードに自動的にクエリーが転送される。この際クライアントは最寄りの単一ノードの存在だけを意識していれば良く、後の作業はノード間で透過的に行われるという。

    平林幹雄氏

    Hyper Estraierの基本的機能

    各ノード単位でのインデックスの作成についても様々な改良が加えられているほか、ノードを複数のPCに分散できるようになったことで検索結果のソートや類似検索などを行うのが容易になったという。ただ、P2Pによる検索については「本当にP2Pが有効かどうかは、多くの人が使ってくれないとわからない」と平林氏は語っている。ただP2Pを使わない範囲でも、全文検索エンジンとしてかなり使い物になるとの評価が担当の鵜飼PMからなされており、出来はかなり優秀なようだ。なお同ソフトは既にオープンソースの形態で配布されている。

    2-gram法を改良した「2.2-gram法」の概要

    このように内部のAPIは階層化されており、どの階層のAPIを呼び出しても良い

    外部プログラムからもこのように簡単に呼び出せるという

    P2Pによるデータ検索の仕組み

    一方後者は、鈴木泰山氏らのグループが開発した「人間の記憶の拡張を目指した知識情報管理基盤の開発」(ソフト名は未定)。こちらは「情報の内容」よりも「情報と人間との関係」に着目し、Webページの閲覧履歴やメールの受信履歴などをキーとして検索を行えるようにしたのが特色。具体的には、ユーザがHTTP/SMTP/POP3/IMAPのProxyとして同システムのサーバを通して通信を行うことで、サーバがその履歴や内容を記録するようになっている。一般的な形態素解析や単なる履歴情報だけでなく、例えばWebページの内容をメールに引用した状況や、メール本文の参照関係を解析したスレッド表示などを行えるようにしている。

    鈴木泰山氏

    システムの概要

    またデータの解析モジュールはプラグイン形式となっており、プラグインの追加で新たなデータ解析手法やプロトコルへの対応も容易に行えるという。現在は「ソフトの配布形態の検討を行っているところ」ということで、近いうちに一般に成果を公開したいとのこと。

    コアエンジンの動作の仕組み

    プロトコルスタックを簡単に構築できるメタ言語

    最後にもう一つ、服部健太氏らのグループによる通信プロトコルの仕様記述言語「Preccs」をご紹介したい。これは各種通信プロトコルのプロトコルスタックを記述することに特化した、一種のメタ言語だ。

    服部健太氏

    Preccsコンパイラの動作の概要

    このようなものが必要となる背景として、服部氏は「プロトコルの複雑化、またそれに伴う実装ミスやセキュリティホールの多発」を挙げた。最近、通信プロトコルは拡張を重ねるなどした結果、かなり複雑な仕様になっているものが増えてきている。例えば、IPsecのIKE(鍵交換プロトコル)の代表的な実装であるRacoonでは、プログラムの行数が約6万行にも膨れ上がるようになっている。また、多くのプロトコルで一般的に見られる「可変長のオプショナルフィールド」「タイムアウト時の処理」などは、実際にこれをC/C++などで記述しようとすると、相応のコストを伴う処理である一方で、処理そのものは比較的抽象化・定型化することが可能だという。

    Preccsによるプログラムの例

    同じものをCで実装するとこうなるという

    そこでPreccsでは、通信プロトコルによく見られるような処理を抽象化して言語化しており、プログラマがPreccsでプロトコルの仕様を記述するとPreccsのコンパイラがそれを解釈してC/C++のソースコードを出力してくれるため、プログラマは出力済みのソースに若干の手直し・追加を行うことで容易にプロトコルスタックを開発することができるようになるという。この種の言語は他にも存在するというが、服部氏は「他の同種の言語はあくまでプロトコル仕様に破綻がないかどうかを確認するためのもので、C/C++のコード出力機能などはないため、Preccsはその点で他の言語より優位にある」と語った。

    ちなみに実際にPreccsを使ってDHCPクライアントを開発したところ、C/C++でスクラッチからコードを書き起こすのに比べて、プログラマが記述したコードの行数は約1/3になったという。一方で処理速度は現在のところC/C++で直接書いたものに比べ2割ほどオーバヘッドがあるとのことだ。この点について服部氏は「現時点ではまだ出力コードの最適化処理等を行っていないため、当面はIKEのように使用頻度の少ない割に複雑なプロトコルから適用を開始する一方で、最適化処理を組み込むことで速度の向上を目指したい」と述べた。

    PreccsとCでのプログラム記述量

    実行時間の比較。ややPreccsの方が実行時間がかかっている

    関連記事

    関連サイト

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン