2005年03月20日

開発の経緯

 SUZAKUはもともと、「特定分野のホームページの検索を行うプライベート・サーチエンジンを構築し、外部に公開する」目的のために開発しました。
 設計・開発にあたっての要件は、以下のようなものでした。

  1. 500~1000サイト程度のホームページを対象に、実用的な速度で全文検索ができる。
  2. google等のサーチエンジンに類似した、分かりやすいユーザーインタフェース。
  3. 対象となるホームページの情報収集を自動的に行う(ロボット型のサーチエンジン)。
  4. 対象となるホームページの情報収集を、そのサイト内に制限できる。(LINKを探索する際、直接関係ない他のサイトのホームページの情報まで収集しないように制御できる。)
  5. できれば毎日、遅くとも2~3日おきには、登録した全ホームページの更新状況をチェックし、検索用データベースを最新状態に更新できる。
  6. 5.を実現するため、追加・変更・削除されたホームページの情報だけ、検索用のデータベースに対して差分更新する。
  7. 情報収集の処理中(検索用データベースの更新中)でも、検索できる。(ノンストップ運用)
  8. 対象となるホームページの登録・削除が簡単にできる。
  9. 対象となるホームページ側に迷惑をかけない。(集中的なアクセスを避ける、robots.txtによる探索制限に従うなど)
  10. サンデープログラマが個人で、短期間に開発できる。
  11. 少ないリソースで運用できる。
  12. 少ない費用で運用できる。

 もっとも、最初は自前でシステム開発するつもりはなく、既存のフリーの全文検索システムとWebページのダウンロードツールで実現できないかと考えました。具体的にはNamazuとwgetを組み合わせて出来ないかを検討したのですが、Namazuに関しては(6)データの差分更新、(7)情報収集の処理中の検索続行が、wgetに関しては(9)相手側に迷惑をかけないの実現が難しいことが分かり、このアプローチは断念しました。

 どうしたものかと考えていた時、 WEB+DB PRESS Vol.2(2001年5月発売)という雑誌に、「Web検索サイトの開発」という記事が掲載されました。これは、PHP、Perl、MySQLを使って、簡単なロボット型サーチエンジンを作るというものでした。読んでみると、基本的な部分をどう作ればいいか、具体的にイメージすることができました。この記事がきっかけとなって、私は、(無謀にも)自分でサーチエンジンを作るという試みに挑戦することになりました。

 私は、C++を使ったWindows上でのプログラム開発経験はそれなりにあったのですが、ネットワーク系のプログラムや、本格的なCGIプログラムの開発はやったことがありませんでした。そこで、まずはPerlやPHPの勉強を始めたのですが、PerlやPHPの言語仕様はどうにもしっくりきません。オブジェクト指向言語で、ネットワーク系のプログラムやCGIの開発に適していて、テキスト処理の開発生産性が高く、かつ仕様の美しい言語はないか? いろいろと探してみたところ、私はRubyという言語に注目しました。Rubyは、徹底したオブジェクト指向のスクリプト言語で、正規表現をはじめとするテキスト処理に役立つ豊富な機能を持ち、ネットワーク関係のライブラリも充実していました。私は、今回の開発言語としてRubyを採用することにしました。

 ロボット型のサーチエンジンは、ホームページの情報を収集してデータベース化するロボット部分と、指定されたキーワードでデータベースを検索する検索エンジン部分の大きく2つの機能からなります。

  • ロボット部分は、リンクをたどってインターネットを自動的に巡回し、ホームページをダウンロードする部分と、ダウンロードしたホームページの内容を分析してデータベースに格納する部分からなります。後者では、データベースに対して大量のデータ追加が発生します。
  • 検索エンジン部分は、ブラウザからキーワードを指定したり、結果をブラウザに表示したりするCGIの部分と、データベースからキーワードを含むホームページのURLを検索する検索エンジン本体からなります。後者では、大量データの高速な検索処理が必要となります。

 データベースの処理部分を、Rubyのようなスクリプト言語で実装するのは、処理速度の面で非常に不利です。かといって、CやC++のような言語で実装するのは、開発規模が大きくなり、完成までのハードルが非常に高くなります。私は、この部分をフリーのデータベースシステム、具体的にはMySQLに全面的に任せられないかと考えました。

 MySQLは、大量データの高速な検索処理が可能なデータベースと言われていました。とはいっても最初は十分な性能が得られるかどうか不安だったのですが、プロトタイプを作ってテストしたところ、十分に実用的な性能が得られる感触を持ちました。もう一つの代表的なフリーのデータベースシステムであるPostgreSQLとの比較も行ってみましたが、MySQLは今回重要な大量データのSelect(検索)/Insert(追加)処理に関して、PostgreSQLの約5倍高速に処理できることが分かりました。ということで、データベース部分にはMySQLを採用することにしました。データベースシステムの採用により、処理内容やデータ構造の変更にも比較的柔軟に対応することができるようになり、また、開発量が減って非常にコンパクトなシステムを実現することができました。

 約3ヶ月間、週末をプログラム開発にあてて、2001年8月にはベータバージョンが完成し、試験運用に入りました。

 このシステムは、RubyやMySQLといったオープンソースのソフトウェアを活用したシステムですので、それらに感謝の気持ちを込めて、またソフトウェア開発に携わる者としてオープンソースの世界に少しでも貢献したいという気持ちから、SUZAKUもオープンソースのソフトウェアとして公開することにしました。公開に向けて、システムの設定機能やユーザーインタフェース、管理機能の完成度アップのための開発を行い、2002年12月に公開用システムのバージョン1.0が完成しました。公開に際して、システムの名称を、SUZAKU(朱雀)と命名しました。

 2005年3月には、ruby 1.8やMySQL 4.1に対応したバージョン2.0をリリースしました。2007年9月には、従来のLinuxに加えて、Windowsにも対応したバージョン3.0をリリースしました。

投稿者 webmaster : 00:00 | コメント (0) | トラックバック (0)

トラックバック

コメント