7月上旬、早くもSnow Leopardの一般公開が始まるようですね。ご存知ない? いえ、札幌市円山動物園の話、5月に生まれたユキヒョウの双子の赤ちゃんです。まぎらわしくてすいませんが、TVで見た姿があまりに可愛らしかったもので。

祝! Snow Leopard(の双子の赤ちゃん)一般公開

さて、今回は「OS Xの独自コマンド」について。その多くは、GUIでの利用が前提のOS X独自機能をCUIでも利用可能にする「スペアキー」的存在と考えられるが、一方ではGUIとは直接関係ない方向での機能強化も行われている。ここでは、NeXTSTEP時代から引き継がれているコマンド「open」を例に、独自コマンドのあり方を考えてみよう。

あまり話題にはならないけれど

OS XのOS Xたる機能は、基本的にAppKitやCocoaなどのフレームワークを利用したGUIアプリケーションにより提供される。「Mac」という金看板を掲げる以上、洗練されたGUIの装備はむしろ必然で、無骨なCUIが異端視されるのもやむを得ないところだ。

しかし、AppleはCUIを見捨てていない。傾注しているとは言い難いが、PantherにTiger、そしてLeopardと、バージョンアップに応じて整備が進められていることは確かだ。実際、Pantherの頃には、ひとまず納得できるレベルまでTerminal.appのマルチバイト文字対応が完了し、Tigerのときにはcpやmvなどのコマンドがリソースフォークに対応、Leopardではファイル拡張属性のサポートに伴うコマンドの追加 / 機能向上(ls、xattrなど) が行われている。

CUIを見捨てないというよりは、GUIを備えたアプリケーション (以下、GUIアプリ) を追加するときには、あわせて同等の機能を持つコマンドを提供する傾向も見受けられる。たとえば、LeopardではQuick Lookとともにqlmanageコマンドが追加されたし、TigerでSpotlightが登場したときには「md」から始まるコマンド群が追加されている。システム環境設定のCUI版的機能を備える「systemsetup」や、名前そのままの「softwareupdate」というコマンドもある。GUIアプリと同等とまではいかないものの、ある程度の処理はコマンドラインでも可能なように配慮されている、と考えて差し支えないだろう。

独自コマンドは「オマケ」にあらず

既存のコマンドも放置されてはいない。NeXTSTEP時代から存在する独自コマンド「open」を例にすると、TigerとLeopardでは利用できるオプションが違う。もちろん機能が向上しており、Appleによりメンテナンスが続けられていることは確かだ。

ちなみに、このopenコマンドは、コマンドラインにおけるLaunchServices (アプリケーションを特定し起動するための機能を提供するAPIおよびサービス) のインタフェースとしての役割を果たす。簡単にいえば、Finder上でファイルをダブルクリックしたときと同等の効果をコマンドラインで実現するコマンドだが、シェルを使い慣れたユーザにとってはありがたい存在だ。基本的な使い方については、「第9回 openコマンドはこんなに便利!」を参照してほしい。

これまで、独自コマンドの追加 / 改良はGUIアプリの動きにあわせたもの -- Quick Lookとともにqlmanageコマンドが追加されるなど -- と考えていたが、openコマンドの機能アップについては、LaunchServicesが大きく変わらないだけに、その考え方では説明できないはず。Appleの基本姿勢まではわからないが、(独自)コマンドはGUIアプリの従属物ではない、ということは確かだろう。

ここが変わった「open」コマンド

では、そのopenコマンドの変更点について説明しておこう。新しく追加されたオプションは「-h」と「-n」、「-W」と「-g」の4つだが、「-g」は開いたウインドウを前面に表示しないというシンプルなものなので省略、残り3つを取りあげることにする。

ヘッダファイルをすばやく開く

新しい「-h」オプションは、システム上のヘッダファイルを検索、Xcodeで表示するためのオプションだ。拡張子 (.h) の入力は不要、NSString.hであれば「open -h NSString」とだけ入力すればOK。ファイル名の一部が重複するもの (この場合「NSStringDrawing.h」など) が検出された場合は、どのヘッダファイルを表示するかを選択することも可能だ。なお、検索の対象はLaunchServicesが管理する範囲 (システムプロファイラの「フレームワーク」に表示されるもの) に限られるため、通常の作業領域 (~/Library/Frameworksを除く) や/Developer以下にあるものは除外される。


$ open -h LaunchServices

システム上のヘッダファイルをすばやく検索、Xcodeで表示できる

新しいインスタンスでファイルを開く

追加された「-n」は、新しいインスタンスでファイルを開くためのオプションだ。OS Xでは、同じLaunchServicesが起動すべきと判定したアプリケーションがすでに起動されている場合、そのアプリケーションを使おうとするが、この「-n」を指定すると、別のインスタンスとしてアプリケーションを起動する。また、新しいオプション「-W」と組み合わせることにより、すでに起動されているアプリケーションが終了されるのを待って起動させることもできるので、工夫次第では便利に使えるかもしれない。


$ open -n mycar.jpg

このように、同じアプリケーションを同時に複数起動することができる