タイトルAppleScript Working》6 _ AppleScript Studioでlogコマンドを使うカテゴリーProjectBuilder/Interface Builder, AppleScript, AppleScript Working
作成日2002/2/15 15:56:19作成者新居雅行
   この記事のPDFファイル(888KB)は以下のアドレスにあります。
   ダウンロードには、MDOnlineのアカウントが必要です。
   pdfs/MDOnline020010.pdf
 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
AppleScript StudioでのCocoaをベースにしたAppleScriptのプログラミング環境は、AppleScriptのイメージを一新するものと言ってもよいだろう。これまで、スクリプト編集プログラムでのプログラミングとは大きく異なり、ユーザインタフェースの構築ができるのである。しかしながら、スクリプト編集プログラムにあった便利な機能の1つである「ログ」の機能はAppleScript Studioでは利用できなくなってしまった。ところが、AppleScript Users Groupのメーリングリストで、H.Abe氏が発表したソースを使えば、AppleScript Studio、つまり、Project Builderの上で、logコマンドを使って標準出力への変数の書き出しやイベントの収集ができるのである。H.Abe氏の一連のソースなどを「HAStudioLogger」と呼ぶことにするが、この利用方法を紹介しよう。

――――AppleScriptでのログ出力
AppleScriptには、logというコマンドがシステムレベルでサポートされている。たとえば処理途中での文字列やリストの値を見たいとしたら、logの後に変数名を指定すると、その変数の中身を「ログウインドウ」に表示する。また、やりとりされるAppleEventの内容についても逐一表示される。従来のAppleScript開発ソフトにはこうしたログ表示のためのウインドウがあった。いわば、AppleScriptプログラミング環境での標準出力のようなものである。デバッガで逐一チェックするのももちろん必要だが、処理を流して結果を見たい場合にはログは非常に便利である。そして、start logとstop logというコマンドも用意されていて、ログの出力の開始や停止もできるようになっている。
ところが、AppleScript Studioの開発環境、つまりProject Builderでは、AppleScriptのログを参照する機能が用意されていない。Mac OS時代ではサードパーティのツールでもログがあったのだから、もしかすると知られていないAPIでログをとれるのかもしれないが、H.Abe氏は独自の方法で、Project BuilderでもAppleScriptのログを利用できるようにしたのである。
おおまかな動作は次の通りだ。ログを表示するObjective-Cのクラスを用意しておくが、Interface Builderでそのクラスのインスタンスを作成するようにしておく。そして、log、start log、stop logのコマンドに対応したAppleEventが発生すると、自分自身でそのイベントを受け取り、そして中で処理をしてしまうのである。ログの処理は、従来はAppleEventでシステム任せにできたのであるが、その手法を逆手に取ってのものである。もともと、システムにあったコマンドなので、Mac OS Xで作るあらゆるAppleScriptのソースにコマンドを書くことができ、規定のイベントが発生する。そこで、作成しているアプリケーションに、そのイベントのハンドラを書いておき、logコマンドを横取りして自分で標準出力に書くとうわけだ。従って、開発している途中でのログの利用はもちろん、生成したアプリケーションでも、Consoleにlogコマンドで出力することができる。
以下のアドレスで、サンプルを含めたProject Builderのプロジェクト一式を入手できる。サンプルのソースで、いきなり試すことができるのであるが、以下、自分で作ったプロジェクトで利用する方法を説明していくことにしよう。

◇HAStudioLogger
 http://www.azug.gr.jp/~h-abe/binary/ask/logger.tar.gz


――――プロジェクトでログ作成をできるようにする
AppleScript Applicationとして作られているプロジェクトがあるとしよう。そのプロジェクトでログを作成できるようにするには以下の3つの手続きが必要になる。これらはこの順序で作業をしなければならないわけではなく、必要に応じてやりやすい順序で作業してかまわない。


  • Carbonフレームワークを組み込む
  • HAStudioLoggerクラスのインスタンスを生成する
  • HAStudioLoggerのソースをプロジェクトに追加する


まず、プロジェクトにCarbonフレームワークを追加する。Project Builderで「プロジェクト」メニューから「フレームワークを追加」(Command+option+F)を選択するが、その前に、Frameworksのグループを、左側の一覧で選択しておくと良いだろう。メニューを選択すると、システムのフレームワークのフォルダをポイントしているはずなので、そこで、Carbon.framewokrkを選択して、「開く」ボタンをクリックする。

◇Carbon.frameworkをプロジェクトに取り込む
 

「開く」ボタンをクリックすると、次のように追加するターゲットを指定するシートが表示される。特にターゲットを増やしていないのならその他の設定項目も含めて、このまま「追加」ボタンをクリックすれば良い。

◇「追加」ボタンをクリックする
 

これで、Carbon.frameworkが、Frameworksグループの中に加わったが、もちろん、左側のチェックボックスがオンになっていることを確認しよう。
続いて、クラスのインスタンスを作成するが、ここでは、AppleScript Studioのデフォルトの状態であるとすると、最初から組み込まれているnibファイルのMainMenu.nibファイルがあるはずだ。これが、起動時にロードされるnibファイルとして最初から設定されているはずなので、そのファイルを編集することにしよう。Project BuilderでMainMenu.nibをダブルクリックして開く。そして、Interface BuilderでMainMenu.nibのウインドウをアクティブにして、Classesのタブをクリックして選択する。この状態で、ClassesメニューからRead Files(Command+option+R)を選択する。

◇クラス定義をファイルから読み込む
 

すると、ファイルを選択するダイアログボックスが出てくるので、HAStudioLogger.hというヘッダファイルを指定する。なお、ここでは、ダウンロードしたプロジェクトのフォルダであるLogTestにあるものを選択したが、後に示すように結果的にこのソースは自分のプロジェクトにコピーした方がいいので、コピーをしてから、ヘッダファイルの読み込みをした方が、手順的にはスマートかもしれない。

◇HAStudioLogger.hを指定する
 

すると、Classesのブラウズリストに、HAStudioLoggerというクラスが追加される。このクラスをインスタンス化するため、そのHAStduioLoggerという名前を、controlキーを押しながらクリックし、表示されるメニューでInstantiate HAStudioLoggerを選択する。

◇定義されたクラスをインスタンス化する
 

ここで、MainMenu.nibファイルのウインドウで、Instancesのタブをクリックすると、青い立方体のボックスのアイコンが見えており、HAStduioLoggerクラスのインスタンスがnibファイル内に定義されたことが示されているはずだ。もちろん、ここでnibファイルは保存しておく。
(この項、続く)
関連リンク