/usr/binの下をごそごそと探していたところ、mDNSというツールを見つけた。日頃からほとんどUNIX系のツールは利用しないのだが、転がっているのに利用しないのもどうかと思い、「使う価値のあるもの」についてはたまに調査をする。
http://til.info.apple.co.jp/cgi-bin/WebObjects/TechInfo.woa/wa/showTIL?id=106439
によれば、UDPのポート5353を使うのがmDNSというわけで、Apple的には「Rendezvous」と呼ばれるものだ。
Rendezvousについては、AppleScriptから見てもいろいろと利用価値がある。ネットワーク上のマシンを探索したり、マシン上のサービスを検索したりできると便利だ。さらに、自分でサービスの登録ができれば、シェアウェアで同一レジストコードがネットワーク内で利用されていないか、サービスを指定して相互に監視を行うこともできるだろう。
ただ、Rendezvousの機能はAppleScript側には機能が解放されていなかった。AppleScriptの命令を直接受け付けるツールが添付されていないのだ。
Javaで組まれたRendezvousのサービスブラウザは見たことがあるが、別にGUIを付けてほしいのではなく、単に指定サービスのノードリストが欲しいだけなので、これは使えない。
そこで、UNIXレイヤーをAppleScriptから呼び出すという手段を採ることになる。mDNSがそれに使えるのであれば、願ったりかなったりだ。
mDNSのヘルプ(注:Pantherには入っていなかった)を見てみると、「インタラクティブなツールなので、スクリプティングにはあんまり向いてないぴょ〜ん」(原文は英語。Appleの能天気さを意図的に表現してみた)と書いてある。
試しに、
mDNS -B * * *
などと打って実行してみると……なるほど、発見し次第表示するというタイプのツールらしく、たしかにそのままではScripting向きのものではなさそうだ。専用の常駐ソフトを作って、つねに結果をテキストに落とすといったところか。それともmDNSのソースが公開されているのであれば、ソースを書き換えて標準出力ではなくファイルに出すべきなのか。
UNIXベースのツールで、このように情報を端末に出すタイプのものを、どうやってAppleScriptから結果取得をするかということで議論になったことがある。
オープンソースのものであれば、書き換えて画面ではなくファイルに書き出させてはどうかという案が出た。ただ、エスケープシーケンスを用いて画面出力しているようなものは、そのままではダメだろう。
別途、ターミナルタイプを新設して、そこに画面出力させるという案もあった。新設したターミナルでは画面ではなくファイルにデータを落とすようにする。外部のアプリケーションは、そのデータファイルの内容を参照するのだ。
ただ、ターミナルもどきファイル書き込みプログラムでも作らないといけないはずで、割と大変な気がする。以来、議論は放置状態だが、こういう問題に遭遇したときに頭をかすめる。
Googleで検索してみてもmDNSツールの情報については資料があるんだかないんだか分らない。大量にヒットはするのだが、何かの一部として紹介されていることはあっても、プログラムのソースの一部だったり、コメントの一部だったりで、まとまって説明されている資料に行き当たらない。つまり、情報としては「カス」がヒットするだけで、有用な情報になかなかたどり着かない。
日本語の情報では、
http://pcweb.mycom.co.jp/news/2002/12/16/10.html
http://pcweb.mycom.co.jp/column/osx/034/
といったあたりか。こうした用途では役に立たないが、基礎知識の拡充には役立つだろう。
とりあえず、AppleのRendezvous MLに登録してみた。また、ここの過去ログを検索してみても情報に行き当たるかもしれない。