Snow Leopardで「消えないサービスメニューの怪」を解決する

海上忍
2010-06-17 16:53:01
  • このエントリーをはてなブックマークに追加
最新特集【一覧】

 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の現在、これを使う積極的理由が思いつかないのだ。せめて、コンテキストメニューから選択できるようになればいいのだけれど。

Automatorで作成したサービスが、本体のワークフローを削除したにもかかわらず表示されたままに。このあとpbsの再起動で無事消すことに成功した
Automatorで作成したサービスが、本体のワークフローを削除したにもかかわらず表示されたままに。このあとpbsの再起動で無事消すことに成功した ※クリックすると拡大します
  • コメント(1件)
#1 anonymous   2010-09-04 17:55:53
Mac OS X 10.6.4でのpbsの再起動時において、-existing_languagesオプションを利用して言語を指定しないと、英語(en)が自動的に選択され、コンテクストメニューの一部が日本語から英語に変更されてしまいました。
http://developer.apple.com/mac/library/qa/qa2010/qa1605.htmlを参照して以下のように実行したところ、不要な項目が削除され、かつ、メニューが元通り正しく表示されるようになりました。
/System/Library/CoreServices/pbs -existing_languages jp
何かの参考になりましたら幸いです。
  • 新着記事
  • 特集
  • ブログ