Windows 2000のIIS 5.0で
Namazu for Win32 Version 2.xを動かすには


 本ドキュメントは、弊サイトの全文検索システムとして使わせていただいている、namazuおよびNamazu for Win32の開発と改良に尽力された方々に、感謝の念を込めて公開するものです。

 さて、本ドキュメントでは、Windows 2000 ProfessionalおよびWindows 2000 Serverファミリに標準搭載されているIIS 5.0で、Namazu for Win32を利用するための設定手順を具体的かつ詳細に解説しています。Windows XP ProfessionalのIIS 5.1でもまったく同じ手順でインストールできますので、Windows XPユーザーの方もご活用ください。

 Windows NT Server/Workstation 4.0+Windows NT 4.0 Option PackでIIS 4.0/PWSを利用する場合につきましては、本ドキュメントの内容に加えて、「NT 4.0 Option PackのIIS 4.0/PWSでNamazu for Win32を動かすには」も併せてご参照ください。
【準備】

 まずは「全文検索システム Namazu for Win32」から、「Namazu for Win32 Version 2.x」、「KAKASI for Win32」を入手します。ActivePerlはActiveState.comから5.6系列の最新版を入手してください。

 IIS 5.0は普通に動くようにしておいてください。Windows 2000 Service Pack 2+Security Rollup Package 1、またはService Pack 3は必須です。これらを適用していないコンピュータはセキュリティ上の脆弱性がありますので、ネットワークに接続しないでください。特にインターネットに公開する場合には、数分と待たずに悲しい結果になってしまいます。

 IISの設定は、コントロールパネルの「管理ツール」の中にある「インターネットサービスマネージャ」を使います。


インターネットサービスマネージャはコントロールパネルの「管理ツール」にある。


インターネットサービスマネージャの内容は、IIS 4.0/PWSからほとんど変わっていない。


 IISはC:\Inetpubにインストールされているものとします。このパス名を、大文字小文字を含めてよく覚えておいてください。パス名の大文字小文字を間違えているために、うまく動かない例が多々あります。
【ActivePerlのインストール】

 Namazu for Win32をインストールする前に、ActivePerlをインストールします。インストーラが勝手に.plと.plxの関連づけ(マッピング)をして、システム環境変数PATHの登録も行ってくれます。

 インストールが完了したら、コマンドプロンプトから

    perl -version

として、正しく実行される(バージョン情報が表示される)ことを確認してください。


まずはActivePerlの動作を確認しよう。
【KAKASI for Win32のインストール】

 Namazu for Win32は、KAKASIが先にインストールされていれば(kakasi.exeにPATHが通っていれば)辞書の設定を自動で行います。そのためNamazu for Win32より先にKAKASIをインストールしておく方が便利です。

 KAKASI for Win32はZIPで圧縮されているので、WinZipなどのツールを使ってC:\に解凍します。このとき必ずディレクトリ付きで解凍してください。WinZipの場合は「Use folder names」をチェックします。


KAKASI for Win32の解凍は、C:\を選択する。
【Namazu for Win32のインストール】

 ActivePerlとKAKASIをインストールしたら、最後にNamazu for Win32をインストールします。

 インストール先は、デフォルトのC:\を選びます。Windows 2000のシステムがあるドライブを選択するのが無難です。なお、インストーラの都合上、C:\以外を選択するとインストールの最終チェックでエラーになります。どうしてもデフォルト以外のインストール先を指定したい場合は、マニュアルを参照して環境変数などを手動で設定できる技量が必要です。

 ちなみにインストーラはデフォルトでC:\を指していますが、実際にはC:\NAMAZUというフォルダが作成され、その下にNamazuのファイルがインストールされます。


インストール先はとりあえずデフォルトのままにしよう。


 Namazu for Win32をインストールすると、システム環境変数が大量に登録されます。環境変数を確認・編集するには、コントロールパネルの「システム」を開き、「詳細」タブから「環境変数」ボタンをクリックしてください。


環境変数の確認と編集は「詳細」タブの「環境変数」ボタンをクリックする。


環境変数を変更することもできるが、エキスパート向けだ。


 デフォルトのインストール先を指定した場合、環境変数を操作する必要はありません。環境変数を編集した場合はコンピュータを再起動して、環境変数の設定を確実に反映させてください。実行中のアプリケーション(例えばコマンドプロンプト)は、環境変数の変更を正しく処理できない場合があります。

 コンピュータを再起動したらコマンドプロンプトを開いて、

    namazu --help

として、Namazuの使い方が表示されることを確認してください。


Namazu for Win32の動作を確認する。オプションについても同時に確認してほしい。
【IIS 5.0の設定 (1)】

 インターネットサービスマネージャを開き、「規定のWebサイト」を右クリックしてプロパティを表示します。


「規定のWebサイト」のホームディレクトリのプロパティを編集する。


 「ホームディレクトリ」タブで「構成」ボタンを押し、「アプリケーションのマッピング」で「.pl」のマッピングを削除しておきます。マッピングを残したままだと、余計なperlスクリプトを勝手に実行されることがあります。不要なら「.plx」のマッピングも削除しておきましょう(ActivePerlのインストール時にマッピングを作成させないようにする方が楽かも)。


セキュリティ向上のため、「.pl」マッピングを削除しておこう。


スクリプトマップの編集結果はScripts仮想フォルダにも適用される。
【IIS 5.0の設定 (2)】

 Scripts仮想ディレクトリのプロパティでは、ローカルパスの設定で「ログアクセス」だけチェックします。間違っても「読み取り」などはチェックしないでください。またこの仮想ディレクトリにアプリケーションの設定がなければ、新規に作成してください。

 アプリケーションの実行アクセス権は「スクリプトおよび実行可能ファイル」を選択します。

 後でNamazu for Win32の実行ファイルを「規定のWebサイト」の下のScripts/searchにおきます。この仮想ディレクトリが検索時のURLとして使用されるため、セキュリティには十分注意してください。


Scriptsのアクセス権については特に注意しよう。
【検索ページへのリンクの作成】

 まず、エクスプローラ(マイコンピュータ)を開き、C:\Inetpub\Scriptsフォルダの下にsearchというフォルダを作ります。

 次に、C:\Inetpub\Scripts\searchフォルダにC:\NAMAZU\libexec\namazu.cgi.exeをコピーします。

 最後にnamazu.cgi.exeをCGIとして実行するように、以下のようなリンクをHTMLで作成してWebページに埋め込みます。

    <A HREF="/Scripts/search/namazu.cgi.exe">全文検索</A>

 たとえば検索ページへのリンクを

    C:\Inetpub\wwwroot\default.htm

に埋め込んだら、検索実行CGIの実際のURLは

    http://コンピュータ名/Scripts/search/namazu.cgi.exe

になります。
【NMZ.head.*, NMZ.body.*, NMZ.foot.*の編集】

 上のURLをから検索ページを開いたときに表示されるWebページのテンプレートは、C:\NAMAZU\share\namazu\templateにあります。お好みに応じてこれらのファイルをテキストエディタで編集してください。

 なお、以前のバージョンとは異なり、文字コードはEUCコードになっていますから、秀丸エディタのようなEUCコードを扱えるテキストエディタを使って編集してください。
【mknmzrcの編集】

 インデックスを作成する前にC:\NAMAZU\etc\namazu\mknmzrcを編集して、いくつかのパラメータを設定します。メモリ関連のパラメータを実メモリ容量に合わせて適切に設定すれば、インデックスの作成時間が大幅に短縮されますmknmzrcファイル内のコメントを参照して編集してください。

●検索実行ページに表示されるWebmasterのメールアドレス

    # $ADDRESS = 'webmaster@foo.bar.jp';

●検索対象に含めるファイル

    # $ALLOW_FILE = ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text
    # "|.*\\.gz|.*\\.Z|.*\\.bz2" . # Compressed files
    # "|.*\\.pdf" . # PDF
    # "|.*\\.tex" . # TeX
    # "|.*\\.doc|.*\\.xls" . # Word, Excel
    # "|.*\\.j[sab]w" . # Ichitaro 4, 5, 6
    # "|\\d+|[-\\w]+\\.[1-9n]"; # Mail/News, man

●検索対象に含めないファイル

    # $DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";

●検索対象から除外するパス(mknmzコマンドの--excludeオプションと同じ)

    # $EXCLUDE_PATH = undef;

●メモリ関連

    # $ON_MEMORY_MAX = 5000000;
    # $FILE_SIZE_MAX = 2000000;
    # $TEXT_SIZE_MAX = 600000;
【インデックスの作成】

 検索を実行する前に、C:\NAMAZU\var\namazu\indexにインデックスを作成します。ここではインデックスの作成範囲としてC:\Inetpub\wwwroot以下の全フォルダ/ファイルを指定しています。

 インデックスはIISの仮想ディレクトリではなく、ファイルシステムの物理パス(絶対パス)で作成されます。

    perl C:\namazu\bin\mknmz -a -U -O C:\namazu\var\namazu\index C:\Inetpub\wwwroot 1>C:\temp\namazu.log 2>C:\temp\namazu_err.log

※上の行は実際には1行で一気に入力してください。

 -aオプションを指定していますので、C:\Inetpub\wwwrootフォルダ以下のすべてのファイルやフォルダがインデックスの対象になります。公開したくないCGIファイルやプログラムファイルまでインデックスに含まれてしまう場合は、IISの仮想ディレクトリ機能を使用して、それらのファイルを物理的に別のパス(例えばC:\cgi-binなど)に置くようにします。これはインデックス作成の都合というよりも、HTMLファイルと同じディレクトリに実行ファイルを置くことは、セキュリティ上お勧めできないためです。

 また、特定のサブフォルダをインデックス作成の対象から除外するには、mknmzrcファイルの$EXCLUDE_PATHを編集するか、コマンドラインに直接--excludeオプションを指定します。例えばC:\Inetpub\wwwroot\testフォルダ以下のファイルやサブフォルダをすべて対象外にするには、次のようにします。

    perl C:\namazu\bin\mknmz -a -U --exclude="C:/Inetpub/wwwroot/test/" -O C:\namazu\var\namazu\index C:\Inetpub\wwwroot 1>C:\temp\namazu.log 2>C:\temp\namazu_err.log

 --excludeオプションには、パスの全部または一部を正規表現で記述します。大文字と小文字を区別するので、キャラクタクラスを使って表記することもできます。

    --exclude="[Cc]:/Inetpub/wwwroot/test/"

 testという名前のフォルダがただ1つしかないなら、次のようにパスを省略して書いても構いません。

    --exclude="/test/"

 さて、上の例では-Uオプションを指定することで、99%の人がハマるであろう「URIのエンコード」を行わないようにしています。エンコードの有無によって検索結果のパスがまったく異なりますので、「日本語のパスやファイル名が化ける」「Replaceが効かない」といったトラブルの時には、-Uオプションを指定してエンコードを無効にしてください。

 なお、mknmzコマンドのオプションの詳細については、

    perl C:\namazu\bin\mknmz --help

で確認してください。

 さて、上の例では、インデックスの作成ログをC:\temp\namazu.log、エラーログをC:\temp\namazu_err.logとして残すようにしています。インデックスが正しく作成されたかどうかはログをチェックすることで分かります。
【namazurcの編集】

 Namazu for Win32の検索結果をWebで表示するには、インデックスに登録されたファイルの物理パス(絶対パス)を、IISの仮想ディレクトリの構成に合わせてURLに変換する必要があります。そのためには、環境変数NAMAZURCに指定された設定ファイルを編集する必要があります。Namazu 2.x以降では従来のnamazu.confに代わってnamazurcを使うようになりました。

 設定ファイルのデフォルトは、C:\NAMAZU\etc\namazu\namazurcです。デフォルトのインストール先を指定した場合はほとんど設定を変更する必要はないでしょう。namazurc-sample.win32はWindows環境用のサンプルファイルです。

 さて、C:\Inetpub\wwwroot以下のファイルを、http://www.hogehoge.dom/で参照できるようにするための変換設定は次のようになります。デフォルトのnamazurcではコメントになっているReplace行を編集します。大文字小文字に注意してください。

    Replace /C\|/Inetpub/wwwroot/ http://www.hogehoge.dom/

 以前のバージョンと異なり、Replace行の左側は正規表現が可能になっています。また大文字と小文字もきっちり区別してくれます。このため以前のnamazu.confと同じように、

    REPLACE /c|/inetpub/wwwroot/ http://www.hogehoge.dom/

と指定すると、正しく変換できません。「c|」の部分を「C\|」のように\でエスケープしてやる必要があります。ここで設定する正規表現の表記方法はRubyのものですので、Perlとは微妙に異なることにご注意ください。

 ほかには、キーワードを強調表示してくれるEmphasisTagsがデフォルトではコメントになっていますので、必要に応じて#を削りましょう。

    EmphasisTags "<strong class=\"keyword\">" "</strong>"
【インデックスの自動更新 (1)】

  一通り動くようになったら、今度は自動でインデックスを更新するようにしてみましょう。

 まず、mknmzを実行するためバッチファイルを作成してください。例えば以下のような内容で、makeindex.batというファイルをC:\WINNT\System32に作成します。

    perl C:\namazu\bin\mknmz -a -U -O C:\namazu\var\namazu\index C:\Inetpub\wwwroot 1>C:\temp\namazu.log 2>C:\temp\namazu_err.log

 バッチファイルを保存するフォルダやインデックス対象のフォルダ、そしてインデックスファイルを保存するフォルダのアクセス権は、Windows NT/2000において非常に重要です。バッチファイルの実行には少なくとも読みとりと実行の権限が必要です。インデックス対象のフォルダには読みとり権限、インデックスファイルの保存フォルダには変更の権限がなければなりません。このことは、次に説明する「タスクスケジューラ」による自動実行時に常に問題になります。必ず適切なアクセス権を設定してください。

 mknmzのオプションについては、付属のマニュアル(デフォルトではC:\NAMAZU\share\namazu\doc\ja\manual.htmlで、Namazuインストール時に表示されるドキュメントとは少し違う)を参照してください。
【インデックスの自動更新 (2)】

 Windows 2000では、「タスクスケジューラ」を使って任意のプログラムを自動的に実行させることができます。ここではmakeindex.batを1日1回、指定した時間に自動的に実行するように設定します。

※NT 4.0では、標準でATコマンド(Scheduleサービス)が利用できます。タスクスケジューラはIE 4.x以降をインストールすることで追加されるオプションモジュールです。

 コントロールパネルの「タスク」から、「予定されているタスク」を開きます。ウィザードの案内にしたがって設定を行えば、簡単に設定が完了します。


プログラムの選択では、「参照」ボタンを押してmakeindex.batを指定する。


実行するアカウント名とインデックス作成先フォルダへのアクセス権に注意しよう。

 アクセス権の問題さえクリアすれば、指定した時刻または間隔でインデックスファイルが更新されるはずです。うまくインデックスが作成されない場合は、namazu_err.logファイルを確認してください。バッチファイル自体が実行されていないようなら、別のユーザーを指定するなどの方法を駆使して問題を切り分けてください。