
Snow Leopardで「消えないサービスメニューの怪」を解決する
Snow Leopardで追加された機能の1つに、自動化ユーティリティ「Automator」のサービス対応が挙げられる。この“サービス”とはdaemonにあらず、NeXTSTEPの時代から引き継がれているアプリケーション間通信機能のことで、Automatorのワークフローをサービスとして実行する機能がSnow Leopardに追加されたのだ。Objective-Cでのコーディングなしにサービス(のプロバイダ)を開発できるというのだから、いい時代になったものだ。
このサービス、ペーストボードサーバ(pbs)を介してデータをやり取りする特徴を持つ。UNIX系OSでは、古くから「パイプ」と称されるデータストリームを利用するが、サービスはこれに依存せず、GUIアプリにおけるコピー&ペーストと同じ機構を利用する。
なぜこのような話をするかというと、先日某編集部の依頼でAutomatorの入門記事を書いたときの作例が、サービスメニューに残ってしまったからだ。所定のフォルダ(~/Library/Services)から削除しても、Finderを再起動(killall Finder)しても、lsregisterコマンドでLaunchServicesデータベースを再構築しても、作例のメニューが消えない。システムを再起動しても表示されたままなため、どうしたものかと悩んでいたところ、前述した歴史的(?)背景を思い出したのだ。
具体的にはどうするかというと……pbsを再起動すればOK。Terminalで実行するコマンドは「/System/Library/CoreServices/pbs」、これだけだ。pbsの再起動に伴い、依存するサービスの内容がスキャンされ、メニューの表示も改められるという単純なカラクリだが、筆者を悩ませた「消えないサービスメニューの怪」はこれにて一件落着した。
ところで、このサービス、Mac OS Xのユーザーインターフェースとの相性がどうにもよろしくない。NeXTSTEPの頃は、メニューバーの構造とその操作体系により、サービスメニューに手を伸ばすことはさほどおっくうに感じなかったが、Macでは実行までに一呼吸も二呼吸も必要となってしまう。なにかと便利になったSnow Leopardの現在、これを使う積極的理由が思いつかないのだ。せめて、コンテキストメニューから選択できるようになればいいのだけれど。
http://developer.apple.com/mac/library/qa/qa2010/qa1605.htmlを参照して以下のように実行したところ、不要な項目が削除され、かつ、メニューが元通り正しく表示されるようになりました。
/System/Library/CoreServices/pbs -existing_languages jp
何かの参考になりましたら幸いです。