タイトル【Inside Mac OS X】CocoaでのAppleScriptカテゴリーAppleScript, アップルからの開発資料, Cocoa
作成日2000/8/16 11:15:2作成者新居雅行
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
関連リンク