Windows NT 4.0 Option PackのIIS 4.0/PWSで
Namazu for Win32を動かすには


このドキュメントは、弊サイトの全文検索システムとして使わせていただいている、namazuおよびNamazu for Win32の開発と改良に尽力された方々に、お礼の意味を込めて寄稿したものをリフレッシュしたものです。

※2001年3月現在、Namazu for Win32 Ver.1.x系列の開発は凍結し、Ver.2.x系列に移行しています。本解説はNamazu for Win32 Ver.1.xを元に書かれていますが、Ver.2.xに対応するようにリファインしました。
【準備】

 まずは「全文検索システム Namazu for Win32」のWebサイトから以下のファイルを入手します。

  • 「Namazu for Win32」(nmz????.exe)
  • 「KAKASI for Win32」
  • 「nkf32」(Namazu for Win32 Ver.1.xのみ。RingServer Projectなどで手に入ります)

 ActivePerlは「全文検索システム Namazu for Win32」のWebサイトからも入手できますが、最新版を利用する場合はActiveState.comから入手しましょう。

 IIS 4.0/PWSは普通に動くようにしておいてください。 IIS 4.0/PWSは、デフォルトのC:\Inetpubにインストールされているものとします。C:ドライブ以外にインストールした場合は、その都度読み替えてください。

 また、あとの操作で「インターネットサービスマネージャ(MMC)」が必要になります。PWSのインストール時にMMC版のインターネットサービスマネージャをインストールしなかった場合は、ここで追加しておいてください。追加インストールした場合はService PackやHotFixなどの再適用を忘れずに。


画面1 インターネットサービスマネージャ(MMC)
【ActivePerlのインストール】

 まずはActivePerlをインストールします。インストーラが勝手に拡張子.pl.plxの関連づけ(マッピング)をして、システム環境変数PATHの登録も行ってくれます。これらのマッピングはNamazu for Win32での検索には必要ありません。セキュリティホールになる場合もありますので、環境に合わせてマッピングをする/しないを選択してください。

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

    perl -version

として、正しく実行される(バージョン情報が表示される)ことを確認します。インストール自体は正しく完了したのにコマンドをうまく実行できない場合は、いったんログオフしてログオンし直すか、コンピュータを再起動してみてください。


画面2 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はとりあえずデフォルトのパスでインストールします。もちろん自力で環境設定を変更できる方は変更しても構いませんが、まずはデフォルトでインストールして動作することを確認してからでも遅くないでしょう。

※KAKASI for Win32の古いバージョンでは、デフォルトのインストール先は「C:\usr\local\kakasi」でした。
【Namazu for Win32のインストール】

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

 インストール先は、デフォルトのC:\を選びます。実行ファイルだけならディスク容量はほとんど必要ありません。あまりにも空きディスク容量が少ない場合は、インデックスの作成ドライブをC:ドライブ以外に変更することで対応できます。デフォルト以外のインストール先を指定したい場合は、マニュアルを参照して環境変数などを手動で設定できる技量が必要です。

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

※Namazu for Win32 Ver.1.xでは、デフォルトのインストール先は「C:\usr\local\namazu」でした。

 Namazu for Win32をインストールするとシステム環境変数のPATHも自動的に設定されます。コマンドプロンプトを開いて、

    namazu.exe

とすると、usage(使い方)が表示されることを確認します。

 正しく実行されない場合は、perlが正しくインストールされていることと、NamazuやKAKASIが必要とする環境変数が正しく設定されていることを、それぞれのマニュアルと見比べて確認してください。


画面3 Namazu for Win32の実行確認


 環境変数の設定を変更するには、「コントロールパネル」の「システム」を開き、「環境」タブから手動で編集して下さい。


画面4 環境変数の確認と変更
【nkf32のインストール】

※nkf32のインストールは、Namazu for Win32 Ver.1.xを使用する場合にのみ必要です。Ver.2.xでは不要ですので読み飛ばしてください。

 nkf32.exeはC:\usr\local\namazu\binに置きます。システム環境変数の方のPATHが通っているところならどこでも構いませんが、namazuと同じ所におけば凡ミスがありません。ユーザ環境変数のPATHはあなた専用ですから、IIS/PWSはそのPATHを認識しないでしょう。
【IIS 4.0/PWSの設定 (1)】

 「インターネットサービスマネージャ」(WWWではなくMMCのスナップインの方)を開き、「規定のWebサイト」を右クリックしてプロパティを表示します。


画面5 ホームディレクトリのプロパティ


 「ホームディレクトリ」タブで「構成」ボタンを押し、「アプリケーションのマッピング」で「.pl」のマッピングを削除しておきます。マッピングを残したままだと、余計なperlスクリプトを勝手に実行されることがあります


画面6 「.pl」マッピングの削除


 ここで必要に応じて「.cgi」のマッピングを追加します。ActivePerlはインストール時に「.pl」と「.plx」のマッピングを登録してくれますが、デフォルトでは「.cgi」は登録されません。「スクリプト エンジン」や「ファイルの存在を確認する」の意味についてはヘルプを参照して下さい(このヘルプが分かりにくいのですけど)。


画面7 「.cgi」のマッピング追加
【IIS 4.0/PWSの設定 (2)】

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

 アプリケーションのアクセス権は「実行(スクリプトを含む)」を選択します。


画面8 SCRIPTS仮想ディレクトリの設定
【検索ページへのリンクの作成】

 C:\Inetpub\scriptsの下にsearchというフォルダを作り、ここにC:\NAMAZU\libexec\namazu.cgi.exeをコピーします。Namazu for Win32 Ver.1.xの場合はC:\usr\local\namazu\bin\namazu.exeをコピーします。

 次にこのプログラムをCGIとして実行するように以下のようなリンクをHTMLで作成します。Namazu for Win32 Ver.1.xの場合は「namazu.cgi.exe」ではなく「namazu.exe」に置き換えてください。

    <A HREF="/scripts/search/namazu.cgi.exe">全文検索</A>
【NMZ.head.*, NMZ.body.*, NMZ.foot.*の編集】

 インデックスを作成する前に、好みに応じてこれらのファイルをテキストエディタで編集します。文字コードはEUC (Namazu for Win32 Ver.1.xではJISコード)になっていますから、例えば秀丸エディタのようなEUCやJISコードを扱えるエディタを使いましょう。
【mknmzrcの編集】

※この作業はNamazu for Win32 Ver.2.xでのみ実行します。

 インデックスを作成する前に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;
【namazu.confの編集】

※この作業はNamazu for Win32 Ver.1.xでのみ実行します。

 Namazu for Win32の検索結果をWebで表示するには、インデックスに登録されたファイルのフルパスをWebの仮想ディレクトリ構成に合わせて変換する必要があります。そのためには、C:\usr\local\namazu\libにあるnamazu.conf-distをコピーして、同じフォルダにnamazu.confを作成し、内容を編集します。

 以下はC:\Inetpub\wwwroot以下のファイルを、http://www.hogehoge.dom/で参照できるようにするための変換設定例です。namazu.conf-distではコメントになっているREPLACEBASEの行を編集しています。

    INDEX c:\usr\local\namazu\index
    REPLACE /c|/inetpub/wwwroot/ http://www.hogehoge.dom/
    BASE http://hogehoge.dom/
【namazurcの編集】

※この作業はNamazu for Win32 Ver.2.xでのみ実行します。

 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>"
【インデックスの作成】

 検索を実行する前に、C:\NAMAZU\var\namazu\index (Namazu for Win32 Ver.1.xではC:\usr\local\namazu\index)にインデックスを作成します。ここではインデックスの作成範囲としてC:\Inetpub\wwwroot以下の全フォルダ/ファイルを指定しています。インデックスはIISの仮想ディレクトリではなく、ファイルシステムの物理パス(絶対パス)で作成されることに注意してください。

    Namazu for Win32 Ver.2.xの場合
    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

    Namazu for Win32 Ver.1.xの場合
    perl C:\usr\local\namazu\bin\mknmz -D -O C:\usr\local\namazu\index C:\Inetpub\wwwroot 1>C:\temp\namazu.log 2>C:\temp\namazu_err.log

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

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

 このときC:\Inetpub\wwwroot以下のすべてのファイルがインデックスの対象になりますので、公開したくないCGIファイルやプログラムファイルがインデックスに含まれてしまうことがあります。これを避ける最も簡単で確実な方法は、IIS/PWSの仮想ディレクトリ機能を使用して、インデックスの対象外にしたいファイルを別のパス(例えばC:\cgi-binなど)に置くことです。

 正攻法で特定のサブフォルダをインデックス作成の対象から除外するには、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

で確認してください。
【インデックスの自動更新 (1)】
※以下は広瀬さんの文章を改変して使わせて頂いています。

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

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

    Namazu for Win32 Ver.2.xの場合
    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

    Namazu for Win32 Ver.1.xの場合
    perl C:\usr\local\namazu\bin\mknmz -O C:\usr\local\namazu\index\ C:\inetpub\wwwroot 1>C:\temp\namazu.log 2>C:\temp\namazu_err.log
【インデックスの自動更新 (2)】

 次に上記バッチファイルを1日1回自動で実行するように設定します。ここでは「スケジュールサービス(ATコマンド)」を使って設定してみましょう。

 スケジュールサービスは、SchedulerというWindows NT 4.0標準搭載の自動実行サービスです。コマンドプロンプトからATコマンドを使用して、指定した日時に指定したコマンドを実行させることができます。

  ただしATコマンドはScheduleサービスが起動されていないと機能しませんので、「コントロールパネル」の「サービス」で「Scheduler」サービスの「スタートアップの種類」を「自動」に変更してください。

 またこのサービスを実行するユーザは、デフォルトでは「システムアカウント」になっています。これはWindows NTの特別なユーザ「SYSTEM」のことです。このユーザがインデックス作成対象のフォルダと、インデックスファイルを作成するフォルダに正しくアクセスできるように、NTFSのアクセス権を設定してください

 上記の設定が完了したら、コマンドプロンプトを開いてインデックス作成バッチファイルの実行を登録します。

    at 00:30 /every:M,T,W,Th,F,S,Su cmd /c "C:\WINNT\System32\makeindex.bat"

上のように登録すると、毎日00時30分に自動的にインデックスを更新します。「毎日」を「月曜から日曜まで」と置き換えて登録することと、" "の範囲がATコマンドのポイントです。
【インデックスの自動更新 (3)】

 今度は「タスクスケジューラ」を使って、makeindex.batを1日1回自動で実行するように設定してみます。

 タスクスケジューラは、IE 4.x以降をインストールすることで追加されるオプションモジュールです。Schedulerサービス(ATコマンド)とは以下の点が異なります。

・GUIで操作できるので、設定が簡単です。
・実行するコマンド(タスク)ごとに、どのユーザで実行させるかを指定できます。

 タスクスケジューラでは、複数のスケジュールを同時に登録したときに、どのユーザでサービスを実行するかで困ることがないので、かなり実戦的といえます。

 エクスプローラか「マイコンピュータ」から、「予定されているタスク」を開きます。ここでウィザードにしたがって設定を行えば、簡単に設定が完了します。


画面9 タスクの登録


画面10 タスクのスケジュール設定