Mac OS Xは様々なオープンソースコンポーネントによって組み立てられ、Apple独自の技術と融合した上でパッケージングされた製品なのは皆さんご存知のことだと思います。Mac OS X ServerのApacheには、Mac OSの検索ツールSherlockのエンジンをWebから利用するmod_sherlock_appleモジュールが組み込まれています。ただClient版Mac OS XにはApacheはあれどもこのモジュールは含まれていません。というわけで、Mac OS X 10.3クライアント版で全文検索機能を利用するための手順です。
モジュールのビルド
まず、AppleのWebサイトDeveloper Connection::Darwin Serverからmod_sherlock_appleのソースコードをダウンロードします。ダウンロードに際してApple IDが必要になります。ダウンロードしたファイルmod_sherlock_apple-XS-10-2.2.tarを展開して、内容を確認してください。SafariなどのWebブラウザが自動的に展開しているものと思いますが、アーカイブが展開されていない場合は
$ tar zxvf mod_sherlock_apple-XS-10.2.2.tar.gzもしくは
$ tar xvf mod_sherlock_apple-XS-10.2.2.tarで展開してください。アーカイブを展開するとmod_sherlock_appleディレクトリが作成されます。
$ ls Makefile README mod_sherlock_apple.cさて、Mac OS X 10.2.xの場合はどうなのかよくわかりませんが、とりあえずMac OS X10.3.1にDeveloper Toolをインストールしたままの状態ではビルドできません。ビルドルールは別に複雑なものではないので、Apacheのapxsコマンドで下記の通り入力してビルドします。
$ apxs -c -Wc,"-Wno-four-char-constants" \ -Wl,"-framework CoreServices -framework Carbon" mod_sherlock_apple.cビルドが成功すると、モジュールのDSOであるmod_sherlock_apple.soが生成されます。次にapxsコマンドでインストールします。
$ sudo apxs -a -i mod_sherlock_apple.soこれにより、/usr/libexec/httpd/ディレクトリにモジュールがコピーされ、Apacheのhttpd.confにこのモジュールをロードする記述が追加されます。
mod_sherlock_appleの設定
mod_sherlock_appleモジュールの設定は、httpd.confに対してSherlockによる検索を有効にする指定と、検索結果のページで使用するHTMLのテンプレートを設置することでおこないます。まずhttpd.confに下記の通り設定を追加します。Sherlock On AddHandler sherlock-search sherlockこの記述により、モジュールの機能が有効になります。
次にテンプレートを設置します。例としてドキュメントルート配下にファイル名template.sherlock で、次のような内容のテンプレートを設置します。
<html> <head> <title>mod_sherlock_apple: result</title> </head> <body> <h1>Result</h1> <SHERLOCKOUT> <hr /> </body> </html>キモになるのは<SHERLOCKOUT>タグで、この部分に検索結果が表示されます。注意しなければいけない点として、このタグの前後には空白を記述しないようします。つまりこのタグは行頭から記述して、タグの後ろは改行のみします。これは単にパーサが手抜きな故の制約ですので、文句がある人はガリッと書き直してAppleにpatchを送りましょう(何故他人事)
あっとタグのパースにはstrcasecmp(3)を使っているので、タグの大文字小文字は関係ありません。
以上で設定は完了です。
インデックスの作成
全文検索をおこなう為に予めディレクトリ内のコンテンツのインデックス(索引)を作成します。Mac OS X Serverにはコンソールからインデックスを作成するツールが含まれていますが、Clientには無いようです。(探してませんが) そのためMac OS X clientでインデックスを作成する場合は、インデックスを作成したいフォルダをFinderで選択し、メニューから 「ファイル > 情報を見る」を選択します。フォルダの情報とともに「内容索引:」を開き、「今すぐ索引作成」ボタンを押すと、インデックスが作成されます。検索する
準備が整ったので、実際にWebから検索してみます。Apacheを再起動し、http://localhost/.sherlockにアクセスします。表示された検索フォームで全文検索をおこなうことができます。適当な語句を入力してPOSTすれば検索結果が表示されます。日本語を扱う場合は注意が必要で、フォームの内容をUTF-8で送信する必要があります。.sherlockのURIにGETメソッドでアクセスするとこのフォームが表示されますが、必要なパラメータを付与したうえでPOSTすれば検索できるので、別途UTF-8で記述した検索フォームを用意するとよいでしょう。
制約
残念ながらFinderでインデックスを作成する場合どんなファイルでも検索できるわけではなく、ファイルがShift_JIS(日本語Mac OS)でエンコードされている必要があります。それ以外のEUC-JPやUTF-8などでエンコードしたファイルは、正常にインデックス化されないようです。そのため実際の運用では、全コンテンツをShift_JISで運用するか、フォルダごとコピーしコンテンツをShift_JISに変換した上でインデックスを作成し、その後.FBCIndexファイルをドキュメントルートに移動して運用することになると思います。また今回説明したコードはMac OS X 10.2.x用と思われるので、最新の10.3.x Serverでは事情が違うかもしれません。またインデックスを作成する他の方法については今のところ調べていないので、もっとスマートな運用ができるのかもしれません。