Macintosh Developer Online (MDOnline)


2000年8月16日発行号 - CocoaとAppleScript



今日はまったくニュースがありません。ですが、1本だけ記事を書きます。正直言って私も消化不足なCocoa関連のドキュメントなんですが、どうやら、AppleScript対応のプログラムの書き方が大きく変わりそうな気配です。
この時期は、大阪出身の私としては盆休みという意識が強いのですが、東京や東日本では、お盆は7月だとか。子供の頃は親戚一同が集まって、法事やら宴会をしたことが思い出されます。実家が一応新居の本家だったんですが、うちで法事があって、そして次の日は母方の実家でまた法事があってと、いとことかに遊んでもらえる楽しい思い出が思い出されます。だけど、いつの頃からか、そういう行事もしなくなりましたね。私が高校生くらいの頃には、もう盛大に親戚が集まることもなくなったような記憶があります。今もこうしたお盆の行事をされている家庭もあるかとは思いますが、うちの親戚筋ではすっかりなくなってしまいました。
いずれにしても、すっかり日本は夏休み状態ですが、米国からもニュースらしいニュースが全然ありません。ネットワークが軽いことも、世間が休みに入っていることが実感されます。明日から休み明けという方も多いかもしれませんね。
(新居雅行 msyk@mdonline.jp


【Inside Mac OS X】CocoaでのAppleScript

CocoaにおけるAppleScript対応については期待と興味はつきることはない。Appleのサイトではそれに対するある程度の答えとも言える文書がすでに公開されている。CocaでのAppleScriptについてのコンセプトが解説されている。また、ドキュメントやあるいはUndoについての説明もある。
まず、重要な点は、AppleScriptの外部仕様面には、Mac OS Xでは変化がないことがある。従来のMac OSでやっていたのと同じように、AppleScriptのプログラムを作成することができる。OSAXなどの連続性はあまり期待できないにしても、コアになる部分や、あるいはFinder関連のスクリプトは基本的には高い互換性を持つということが従来から言われている。もちろん、ファイル名の長さの制限がなくなるなど、プログラム自体を改良する余地は出てくるとは思われるが、いずれにしても、AppleScriptのプログラムは同じである。
Mac OSでのAppleScriptを簡単に外観しておくと、コマンドやプロパティなどさまざまな手段があるとは言え、その根本はAppleEventというソフトウエア間通信プロトコルである。そして、そのプロトコルでは、4バイトのタイプという記号をキーに、コマンドの種類やプロパティの種類、あるいはオブジェクトの種類などを記述していた。結果的に、アプリケーション側は、AppleEventを受け取り、タイプ値に応じて処理を分岐し、コマンドやプロパティごとの処理を組み込むという必要があった。コマンド→タイプ値→処理プログラムという対応付けが必要になのである。また、アプリケーションがどんなコマンドなどを認識するのかを、aeteリソースという形式で記録しておかなければならなかった。このaeteリソースは、コマンド→タイプ値の対応付けだけのもので、ある意味ではプログラムとは独立したものである。

Cocoaのフレームワークでは、AppleScriptへの対応が大きく変わる。まず、リソースというものが、従来のリソースではなく、おそらくはテキストファイルで記述した独立したリソースファイルを使うことが一般的になるだろう。そのテキストファイルに、オブジェクトやコマンド、プロパティなどをテキストで記述する。やはり、コマンド名やプロパティ名などをきちんと記述しないといけないのはもちろんで、従来とおりAppleEventで使うタイプ値についても記述しなければならない。しかしながら、従来との違いはその定義を元にしたプログラムを作成できる。たとえば、あるコマンドを定義したとき、そのコマンドが送られて来たときに呼び出されるメソッド名を、リソース定義に含める。そして、そのオブジェクトにメソッドを定義するという具合だ。プロパティについてはもう少し複雑であるが、同じように、リソース定義とプログラム中のインスタンス変数やメソッドに関連性を持たせる。サンプルを見る限りは、プログラム中にはタイプ値は出てこないようで、これはおそらくはAppleEventのプロトコル制御にだけ使われるのであろう。具体例は「Creating Suite Definitions and Suite Terminology」という文書を見ていただきたい。
また、アプリケーションでクラス定義をするときに、スクリプトレベルでの定義においても、既存のフレームワークのクラスの継承ができる模様だ。システムに定義されたクラスの利用については、これまでよりもより確実にできるようになったと言えるだろう。

Cocoaのドキュメントモデルについての解説も文書として公開されている。そこでは、Model-View-Controllerというデザインパターンの基本的な考え方を採用すべきであることが説明されている。あるクラスを定義するとき、そのデータ構造であるモデル、それを表示するビュー、そして制御するコントーラという3つのコンポーネントで構成するというものだ。Cocoaのフレームワーク自体もこうした考え方で構成されている。また、フレームワークにはUndoを実現するクラスが用意されており、ドキュメントと連動する形で使える。

以下のドキュメントにある程度の詳細は書かれているが、コンセプトと簡単な例だけである。また、プログラム例はObjective-Cである。その意味では全貌が書かれた文書ではないものの、Cocoaのプログラミングでの重要なポイントの概略を知るには必読の文書と言えるだろう。

◇Making Your Applications Scriptable
 http://developer.apple.com/techpubs/macosx/System/Documentation/Developer/Cocoa/ProgrammingTopics/Scripting/ScriptableApps/scriptableappstoc.html

◇ Creating Suite Definitions and Suite Terminology
 http://developer.apple.com/techpubs/macosx/System/Documentation/Developer/Cocoa/ProgrammingTopics/Scripting/SuiteDefs/suitedefinitionstoc.html

◇Application Design for Scripting, Documents, and Undo
 http://developer.apple.com/techpubs/macosx/System/Documentation/Developer/Cocoa/ProgrammingTopics/AppDesign/applicationdesigntoc.html

カテゴリ:AppleScript, アップルからの開発資料, Cocoa