iPhone 6やiPhone 6が値上がりしましたね! オンラインのApple Storeでの価格(SIMフリー版)ですが、通信キャリアに卸す仕切り価格の見直しも避けられないのではないでしょうか。それはともかく、為替レートの変動による価格の見直しだとすると、近いうちにアプリ価格も見直されるのでは……買うか買わぬか迷っているアプリは、早々に購入しておいたほうがよさそうです。

さて、今回は「lsappinfo」について。Mavericksのときに登場した一種のアプリケーション管理ツールだが、「CoreApplicationServices」のフロントエンドとでも表現したほうが正確かもしれない。このコマンドを使えば、漫然と起動していたアプリケーションが変わって見えるかもしれない。

「lsappinfo」でできること

Xcode付属の開発ツールを使わずに起動中のアプリケーションに関する情報を手に入れよ、と言われたらどのような方法を思いつくだろうか。ユーティリティフォルダにある「アクティビティモニタ」を使うというのは、おそらくオーソドックスな方法だ。プロセスID(PID)はもちろん、メモリ情報や開いているファイルまで確認できる。UNIX流のアプローチとしては「ps」コマンドがあるが、情報量としてはアクティビティモニタのほうが断然多い。

しかし、アクティビティモニタには「Aquaデスクトップにおいてどのような状態か」という視点がない。実行ファイルの在りかも「開いているファイルとポート」画面から推定するしかないし、起動からの経過時間もわからない。

lsappinfoコマンドは、Aquaデスクトップを統括管理する「CoreApplicationServices」のフロントエンドとしての役割を果たす。問い合わせて起動中のアプリケーションに関する情報を引き出すことにくわえ、アプリケーションの起動そのものも指示できる。用意されているオプションを使えば、起動直後にウインドウを隠すなど、通常の手順(Finderでダブルクリック)では対応しない形式でアプリケーションを起動することも可能だ。

アクティビティモニタを利用しても実行中のアプリケーションの詳細情報を確認できるが、「Aquaデスクトップにおいてどのような状態か」という視点がない

「lsappinfo」の使いかた

lsappinfoコマンドの基本形は、コマンド名に続けて必要であればオプション、そのあとに内部コマンドそして引数、というスタイルだ。オプション/内部コマンドの数はそれほど多くはないが、機能のスイッチなど認識可能な情報が膨大なうえアプリケーションごとの個別性が高く、一般化して説明することが難しい。ここでは、起動中のアプリケーションの状態を調べることを主な目的として、いくつか実行例を紹介してみよう。

1. アプリケーションの実行状況を俯瞰する

内部コマンド「metainfo」を付けてlsappinfoコマンドを実行すると、現在のセッションでCoreApplicationServicesが統括するアプリケーションのメタ情報を一覧できる。実行中のアプリケーション数(applicationCount)などアクティビティモニタでも確認可能な項目もあるが、そのうちタスクスイッチャーで切り替えできる可視型アプリケーションの数(visibleApplicationCount)、アプリケーションの順序(bringForwardOrder)といった情報を確認できることがポイントだ。

Aqua環境で実行中のアプリケーションや、タスクスイッチャーで切り替えできる可視型アプリケーションの数がわかる

2. 実行中のアプリケーションを調べる

内部コマンド「list」を利用すると、現在実行されているアプリケーションの個別情報を確認できる。DockやSystemUISrerverなどのシステムプロセスもカウントされるため、最低でも30~40以上の項目は表示されるはずで、「lsappinfo list | less」などとページャにパイプして実行したほうがいいだろう。

この「list」により出力された情報からは、アプリケーションの保存場所(bundle path)、UIの種類(type)、起動された日時(checkin time)などを読み取ることができる。サンドボックス化されているかどうかも、Arch項目に「sandboxed」と表示されるかどうかでチェックできる。

アプリケーションの保存場所のほか、起動された日時などの情報を調べることができる

3. こんな起動方法アリ? という起動もできる

内部コマンド「launch」を利用すれば、起動完了とともにアプリケーションを"隠す"、起動するが前面に表示しない、といった使い方も可能だ。書式は以下に示すとおり、起動完了とともにアプリケーションを隠す場合は「launchandhide=true」、起動するが前面に表示しない場合は「nofront=true」とし、最後に起動するアプリケーションのフルパスを指定する。一般的な使い方をするかぎりニーズはなさそうだが、システム環境設定の「ユーザとグループ」パネルにある「ログイン項目」(ログインとともに自動起動させ"隠す"オプションがある)のような処理が必要なとき、役に立つはず。シェルスクリプトやAutomatorと組み合わせれば、用途も広がることだろう。

  • 起動と同時に隠す
$ lsappinfo launch launchandhide=true /Applications/Calculator.app
  • 起動するが前面に表示しない
$ lsappinfo launch nofront=true /Applications/Calculator.app