使ってみよう Namazu 2.0

最終更新日: 2000-11-15 (公開日: 2000-11-15)


Software Design誌 2000年11月号に掲載された記事の元の原稿です。

筆者が本紙に Namazu 1.3 の記事を執筆してから約 2年が経ちまし た。その間に Namazu は 2.0 へと成長しています。本稿では、ま ず Namazu 2.0 とは何かを説明し、次に開発の経緯と失敗談を紹介 します。最後に今後の予定を述べます。

はじめに

UNIX を利用しながら生活を送っていると、メーリングリストの記 事や WWWから拾ってきた文書、フリーソフトウェアのマニュアルな ど、知らず知らずのうちにたくさんの文書が溜まっていきます。

ほとんどの文書は後から参照することはありませんが、「この問題 の解決策は以前に何かの文書で読んだはずだ」と思い出したときに、 突然、参照したくなります。

そんなとき、UNIXを使っているなら find や grep コマンドを駆使 して目的の文書を探し出すのが一般的な手法です。しかし、ファイ ルの数が 1,000、 10,000 と増えていくと、この方法では時間がか かりすぎてしまいます。一方、高速な全文検索システムを使えば、 文書の数が増えても一瞬で検索できます。

全文検索というと、AltaVista や gooのような WWWの検索エンジン が有名ですが、ここで必要とされるのはそのような巨大なシステム ではなく、個人で使うためのごく小規模なものです。Namazu はま さにそのような用途のための全文検索システムです。 [図1]

図1 Namazu の Webサイト
[Naamzu の Webサイト]

Namazu 2.0 の特長

Namazu は手軽に使える日本語全文検索システムです。次のような 特徴があります。

1998年12月号で紹介したバージョン 1.3 と比べると、主に次の機 能強化が図られています。

改良が進んだ一方で、インデックスの互換性がなくなっているので 注意が必要です。Namazu 2.0 ではバージョン 1.3 で作成したイン デックスを検索することはできません。

インストール

Namazu をインストールするには、あらかじめ次のソフトウェアを インストールしておく必要があります。

  1. Perl バージョン5.004以降
    <http://www.perl.com/>
  2. nkf バージョン1.71以降
    <ftp://ftp.ie.u-ryukyu.ac.jp/pub/software/kono/nkf171.shar>
    nkf 1.71 には Perlモジュール NKF が付属しています。
  3. 茶筌<http://cl.aist-nara.ac.jp/lab/nlt/chasen.html>
    または KAKASI <http://kakasi.namazu.org/>
    茶筌、KAKASI には、それぞれ Perl モジュール Text::ChaSen, Text::KAKASI が用意されています。

NKF, Text::ChaSen, Text::KAKASI の各 Perl モジュールをインス トールしておくと、Namazu の動作が高速になります。

Namazu のインストール方法は一般的なUNIXのフリーソフトウェア と同様です。<http://www.namazu.org/> からソースコードを入手して、次のように実行します。現行執筆時 点での最新版は 2.0.4 です。本紙が書店に並ぶ頃には 2.0.5が公 開されている予定です。

      % gzip -dc namazu-2.0.4.tar.gz | tar xvf -
      % cd namazu-2.0.4
      % ./configure
      % make
      % su
      Password:  (root のパスワードを入力)
      # make install

なお、 <http://www.namazu.org/> には Debian GNU/Linux用と Red Hat Linux 用のバイナリパッケージが用意されています。

Namazuに付属するチュートリアル (tutorial.html) にはインストー ル方法の詳細と基本的な使い方が丁寧に解説されています。この文 書は藤原誠氏が用意してくれました。初めて Namazu を使う方は、 まずチュートリアルにあたるといいでしょう。

使い方

Namazu の使い方は簡単です。基本的な使い方は次の通りです。

  1. インデックスを作成
    % mknmz "対象文書のあるディレクトリ"
  2. 検索
    % namazu "検索質問" "インデックス"

インデックスは、高速な全文検索を実現するためのデータ構造です。 ちょうど本の索引と似ています。本の索引ではどの単語がどのペー ジに載っているかを記録しますが、 Namazu のインデックスでは、 どの単語がどの文書に載っているかを記録しています。

インデックスの作成

それでは実際にインデックスを作ってみましょう。ここでは実験と して /usr/local/share/namazu/doc の文書を対象とします。mknmz はインデックスを構成するファイルを実行時のディレクトリに書き 出すので、ひとまず /tmp で行います。[図2]

図2 インデックスの作成

      % cd /tmp
      % mknmz /usr/local/share/namazu/doc 
      7個のファイルがインデックス作成の対象として見つかりました
      1/7 - /usr/local/share/namazu/doc/en/manual.html [text/html]
      2/7 - /usr/local/share/namazu/doc/en/nmz.html [text/html]
      3/7 - /usr/local/share/namazu/doc/en/tutorial.html [text/html]
      4/7 - /usr/local/share/namazu/doc/ja/manual.html [text/html]
      5/7 - /usr/local/share/namazu/doc/ja/nmz.html [text/html]
      6/7 - /usr/local/share/namazu/doc/ja/tips.html [text/html]
      7/7 - /usr/local/share/namazu/doc/ja/tutorial.html [text/html]
      インデックスを書き出しています...
      [基本]
      日付:                Mon Sep 18 18:08:52 2000
      追加された文書の数:  7
      サイズ (bytes):      119,874
      合計の文書数:        7
      追加キーワード数:    3,778
      合計キーワード数:    3,778
      わかち書き:          module_kakasi -ieuc -oeuc -w
      経過時間 (秒):       33
      ファイル/秒:         0.21
      システム:            linux
      Perl:                5.006
      Namazu:              2.0.4

これでインデックス作成は完了しました。インデックスは NMZ.i, NMZ.ii, NMZ.w, NMZ.wi のように NMZ から始まる複数のファイル で構成されています。

検索

検索は namazu コマンドで行います。さきほど作成したインデック スに対し、キーワード「カズタマイズ」で検索するにはコマンドライ ンから次のように実行します。

       % namazu 'カズタマイズ' /tmp

検索結果は[図3]のように表示されます。Webサー バと連携すれば[図4] のようにブラウザから検 索することもできます。

図3 コマンドライン上での検索結果

      % namazu 'カスタマイズ' /tmp
      検索結果

      参考ヒット数:  [ カスタマイズ: 1 ] 

      検索式にマッチする 1 個の文書が見つかりました。

      1. Manual of Namazu (スコア: 1)
      著者: developers@namazu.org
      日付: Fri, 31 Mar 2000 16:35:57
      全文検索システム Namazu 説明書 目次 Namazuの基本構成 mknmzコ
      マンド namazuコマンド namazu.cgi 付属ツール 検索式 mknmzコマ
      ンド行引数 mknmzrcの設定 文書フィルタ namazuコマンド行引数 
      namazurcの設定 基本
      /usr/local/share/namazu/doc/ja/manual.html (25,337 bytes)

      現在のリスト: 1 - 1

図4 Webブラウザ上での検索結果
[Webブラウザ]

以上が Namazu の基本的な使い方です。詳しい使い方については Namazu に付属するマニュアル (manual.html) を参照してください。

Namazu 2.0 の開発

ここでは、Namazu 2.0 の開発の経緯を紹介します。

Namazu 1.3 が完成すると、筆者は次のバージョンとして 1.4 の開 発に着手しました。この版では、インデックスを小さくすることと、 インデックス作成の高速化を目標としていました。

ちょうどその頃、筆者は名古屋Linuxユーザグループを通じて野首 貴嗣氏と知り合い、氏が Namazu の改良を手伝ってくれることにな りました。野首氏の担当はより多くの文書の形式に対応することと、 Namazu のライブラリ化です。

同じ頃、馬場肇氏が Namazu を autoconf + automake 化しようと 提案し、たたき台を用意してくれました。 autoconf + automake 化すると、./configure && make && make install で簡単にインス トールできるようになります。実はこのとき、筆者はいまいち乗り 気ではなかったのですが、せっかく作ってくれたのだから、という ことで馬場氏の提案を採用することにしました。

また、馬場氏からはソースコードを CVSで管理しようとの提案も受 けました。こちらも同じく乗り気ではなかったのですが、氏の勧め る通りに CVS 管理を始めました。そして、autoconf + automake 化およびソースコードの CVS管理は、開発の効率化の面で絶大な効 果があることが後からすぐに判明しました。*7

1.4 の開発が始まってしばらくすると、安部竜治氏という強力な助っ 人が現れました。安部氏は autoconf + automake 化の徹底、 gettext化、libtool化と次から次へと Namazu の改良を行ってくれ ました。これらの作業と並行して、高久雅生氏による地道なバグ修 正も行われました。

このように、バージョン 2.0 の開発には多くの人間が携わってい ます。そこで、 2.0 からは筆者の名義ではなく Namazu Project *8 による著作物とすることに しました。1998年10月31日の 1.3.0.0 の公開から約1年と4か月を 経て、2000 年2月20日にようやく Namazu 2.0 が完成しました。

Namazu から学んだ教訓

以上のような過程を経て Namazu 2.0 は完成したのですが、すべて が順調に運んだわけではありません。ここでは、Namazuの開発を通 じて学んだ教訓を、著名人による警句を交えて紹介します。これか らフリーソフトウェアを開発しようとしている人の参考になれば幸 いです。

Namazu の将来

前述の通り、現在の Namazu は保守および拡張が不可能になりつつ あります。また、2.0 の目標であった、ライブラリの提供も中途半 端な形で終わっています。

そこで、筆者は現在 Namazu の再設計に取り組んでいます。新しい 設計では、

なソフトウェアを目指しています。全文検索の機能をいろいろなア プリケーションに組み込めるように、使いやすいライブラリを提供 することも目標です。

また、春先から筆者が Lisp の大ファンになったということもあり、 次世代の Namazu では拡張言語として Lisp の 1つの方言である Scheme を採用する予定です。 Guile <http://www.gnu.org/software/guile/> をライブラリとし て組み込むことにより、 C と Scheme を柔軟に組み合わせたプロ グラミングを実現できます。

これまでの Namazu は手軽に使える反面、作りが甘いソフトウェア でしたが、今後は、手軽に使えて、しかも、作りのしっかりした、高 品質なソフトウェアを目指していくつもりです。

注釈

  1. GNU GENERAL PUBLIC LICENSE Version 2 <http://www.gnu.org/copyleft/gpl.html>
  2. groff <http://www.gnu.org/software/groff/groff.html> が必要。
  3. detex <http://www.cs.purdue.edu/homes/trinkle/detex/> が必要。
  4. xpdf <http://www.foolabs.com/xpdf/> に付属の pdftotextコマンドが必要。
  5. wvWare <http://www.wvWare.com/> が必要。
  6. xlHtml <http://www.xlhtml.org/> が必要。
  7. このことから、新しいものを積極的に取り入れていくことは大 切だ、という教訓を筆者は得ることができました。ありがたいこと です。
  8. <http://www.namazu.org/project.html>

参考文献

  1. Namazu のWebサイト <http://www.namazu.org/>
  2. Software Design 1998年12月号 pp. 43-50
    「はじめての Plamo Linux - 全文検索システム Namazu の活 用」 - 高林哲

Satoru Takabayashi