Macintosh Developer Online (MDOnline)


2001年4月18日発行号 - Mac OS XのAppleScript



いくぶん唐突にFlash5のActionScriptの書籍についてを記事にしましたが、事情は以下の通りというか(笑)、つまり、読者プレゼントです。著者の方からいただきましたので、ひさしぶりのプレゼントです。3月は全然プレゼントがなく申し訳ありませんでした。なかなかこういうのってあるときとないときの差は大きいです。来週の記者会見ではいつもなにかあるところなので、またプレゼントがあるかもしれません。今回のプレゼントも、いつもとおり、あみだくじにします。

==================プレゼント
書籍『だれでも書けるFlash5アクションスクリプト』(1冊)
―――――――――――――――――――――
申し込み方法:<msyk@locus.co.jp>宛にメールをする
 メールのタイトル:【Flash5の書籍】を希望
 メールの本文には、名前、住所、郵便番号、当選時の公表名、を記載
 メールは、MDOnlineに登録のメールアドレスから送付してください
 締め切り:2001年4月21日(土曜日)
(新居雅行 msyk@mdonline.jp


Browsing Mac OS X》AppleScriptはどうなんでしょうか?

MacWIRE Onlineを見ていたら、魚井先生に呼び止められたような気がしたので(笑)、AppleScriptについて論じてみたい。AppleScriptは、Mac OSから存在していたシステム機能であるが、もっとも根底にあるのは、AppleEventというアプリケーション間や、あるいはシステムとアプリケーションとの間などのソフトウエア間でのやりとりを行う機能がベースになっている。たとえば、あるアプリケーションから、別のアプリケーションに対して、「データを下さい」というと、背後で通信が行われて、「はいどうぞ」とデータがもらえるというような仕組みがあるのだ。Finderで文書ファイルをナニゲにダブルクリックすると、そのとき、文書に関連づけられているアプリケーションが起動するのだが、システム側からそのアプリケーションに対して「この文書を開きなさい」という指令が投げられる。これも実はAppleEventなのである。このAppleEventのやりとりを、手順書きつまりプログラムとして記述したら、アプリケーションソフトをリモートコントロールのように、自由にプログラムで動かせる。だけど、AppleEventのデータ自体を記述するとなるとプログラム作成が大変になるので、より自然言語に近い形でプログラムを作成できるような枠組みを提供しているのがAppleScriptなのである。その一方で、単にアプリケーションのコントロールという「マクロ」的なことをするだけでは機能的に不足するので、繰り返しや条件判断といった制御構造、変数の扱いなどなど、プログラミング環境として必要な機能も備えている。また、アプリケーションに存在するデータはオブジェクト的に扱えるがオブジェクト指向プログラミングに必要な機能は揃っているわけではないので、いわば緩やかなオブジェクト指向環境でもある。なお、AppleScriptでコントロールするアプリケーションはなんでもOKではなく、AppleScriptに対応していないといけない。Finderは対応しているが、世の中すべてのソフトが対応していないのが頭の痛いところでもある。しかしながら、QuarkXPressはAppleScriptに対応したため、AppleScriptはDTPの世界では必須のソリューション提供手段となっている。また、ファイルメーカーProも対応しており、元原稿のデータベースをもとにQuarkXPressでレイアウトという事例はなかなかの見物である。(もっとも、ファイルメーカーPro5ではなぜがパフォーマンスがぐっと落ちたのが残念なところである。)

Mac OS XになってもAppleScriptは残るのだろうかという心配はずっとあったが、2000年のMacworld Tokyoに合わせてAppleの担当者が来日した時には、なくなるどころか、Mac OS Xでの重要なコンポーネントとなって、パフォーマンスも高くなり、より実用度が高くなるという話があって、大きく期待をさせた。しかしながら、Mac OS X Public Betaでは、FinderではなくDesktopになっているなどちょっと戸惑わされた。もっとも、Mac OS X 10.0になってFinderに戻ったので安心はしたが、実際にプログラミングに取りかかるものの、結論的には「待ち」に入らざるを得ない状態ではないかと思う。実は、昨日、一生懸命あるAppleScriptのプログラムを、Mac OS X環境で動かそうとした。細かい点はいっぱいいろんなことがある。まあ、それは仕方ないとして一生懸命なおしながら、あと1行に漕ぎ着けた時、ある命令にどう見ても動かないバグ(だと思う)があることが判明し、それに代替え手段を使うにはまたおおきくなおさないといけないこともあって、強く挫折感を味わったのだ。そこに来ての魚井先生の記事…これはなんか書かないといけない!
なお、AppleScriptのプログラムは、/Applications/UtilitiesにあるScript Editorで行える。Mac OS 9.1までにあった「スクリプト編集プログラム」のMac OS X版で、ほとんど機能的には同じようなものだ。32KBまでしか入力できなかったスクリプトも、それ以上のものが扱えるようになった点は進歩である。なお、編集用のフォント設定はあまりいい感じではないので、12ポイントにしたり、演算子をOsakaではなくGenevaにするなど微調整しないと見づらいだろう。

実はそれ以前に成功したスクリプトもあった。ほとんどがファイルメーカーProとファイルへの書き込みを行うようなスクリプトはほんのちょっとの修正で動くようになったのである。このスクリプトは請求書の処理とかをさせているので、ファイルメーカーProの扱いが中心であるため、スクリプトはClassicアプリケーションのまま使っている。
それではということで、原稿作成に使っている「ファイルのフルパス名をクリップボードに得る」というAppleScriptプログラムを、Carbonアプリケーションとして使ってみた。このプログラムは、システムに標準のダイアログボックスを出す命令(display dialog)を使っているのだが、日本語がことごとく文字化けするのである。自分で作ったプログラムだから、文字化けしても使えるのではあるが、その他の部分はきちんと動いているようだ。
そしてトライしたプログラムは、Finderの機能をふんだんに使うものである。状況を敢然に把握し切った状態ではないので、整理されていないがその点はお許しいただきたい。そのプログラムはいきなりのっけからエラーの連続だ。どうも、fileクラスの扱いが変なのである。たとえば、exists file "パス名"は存在するファイルのパスなのにfalseを戻す。ところが、exists alias "パス名"にすると存在するファイルならきんとtrueを戻すのである。それから、あまりいいプログラムではないのだが、file "...." as stringのようにしてパス名を文字列で得るようなことを頻繁に使っていたのだが、そこでエラーが出て止まるのである(もっともこの方法は素直な手法ではないので文句も言えないのだが…)。ただ、この点に関しては、ファイルへの参照ではなくパス文字列として扱い、ここ一番でaliasを使って参照することで、おおむね逃れることができた。なお、file "..." of folder "..." という記述が使えないわけではなく、使えば場面もある。なかなかややこしい。
それから、パッケージ化したアプリケーションの扱いはそうではないものと同じようには使えないようなのである。たとえば、TextEditのエイリアスを作るとしよう。そのエイリアスの解決先に対して、クリエイターを取得するということができないのである。また、テキストファイルをTextEditで開くために、open .... using (TextEditへの参照) のようなプログラムを作成したがエラーが出るのである。おそらく、TextEditへの参照はフォルダであると見ているのじゃないかと思われる。Contentsフォルダから入っていくなどのチェックはしていないが、そうするとパッケージかシングルバイナリかで処理をわけないといけない。どうしてもその場で動かさないといけないものでもない限り、やっぱり、システムがきちんと対応するのを待つのが筋だと考えた。
それから、「初期設定」フォルダを参照するのには、Finderの機能で「preferences folder」というプロパティ値を使うのだが、これが使えないようになっている。もちろん、よく御存じの方は「path to preferences」を使えばいいとすぐにおっしゃるだろう。だけど、筆者の作っているプログラムではこのあたりでことごとく記述をかえないといけなかった。一括置換ではだめだったというパターンだ。
いずれにしても、Finder向けのプログラムを、Mac OS Xで動かす場合には、かなり手を入れないといけないことになる。ただ、fileで機能しないでaliasで動くようなのはやはりバグと見るべきだと思われるのだが、そうした点が修正されるのを待つと言う必要も出てくるだろう。
(続く)

カテゴリ:AppleScript, Browsing Mac OS X


Browsing Mac OS X》AppleScriptはどうなんでしょうか?(続き)

それでも悪い話ばかりでもない。Mac OS Xに対応したOSAX(スクリプト機能拡張)を、飯森秀昭さんが精力的にリリースしている。特に注目されるのは、UNIXコマンドを実行できる「system OSAX Ver1.0.2」だろう。これを使えば、文字列として与えたUNIXコマンドを実行し、標準出力で得られた結果をスクリプト側に戻すことができる。つまり、AppleScriptのプログラムの中からUNIXコマンドを自由に発行できてしまうわけで、いきなりMac OS Xの大きなメリットをAppleScriptプログラマは手中にできるのだ。他にも、grepを行う「mgrep OSAX Ver1.7.1」、文字コード変換を行う「TEC OSAX Ver1.3.1」などもMac OS X対応している。

◇Iimori’s Home Page
 http://www.bekkoame.ne.jp/~iimori/index.html

Mac OS XでもAppleScriptは残ったものの、シェルスクリプト、あるいはPerlのように、Mac OSでは使えなかったものや、あるいはアプリケーションとして存在していたものが、今やシステム標準機能となっている。そのため、AppleScriptしかないという状況ではないため、AppleScriptのスタンスいくらか違ってくるだろう。また、CocoaアプリケーションのようにAppleEvent以外でのソフトウエア間のやりとりができるような仕組みもある。それでも、AppleScriptによるアプリケーションのコントロールという機能をベースに、業務処理やルーチンワークを効率化するソリューションにつなげるという手法はMac OS Xの中でも存在し続けると思う。
ただ、Mac OS 10.0.1の段階では問題もあるし、新しいOSでのノウハウも少ない。だけども、「AppleScriptリファレンス」(ソフトバンクパブリッシング)のMac OS X対応版が出るころには、AppleScript実用的に使えるようになっているのじゃないかと思ったりもする。

カテゴリ:


Flash5のActionScriptを初歩からマスターするための書籍

エムディーエヌコーポレーションから、Flash5のActionScriptに関する書籍が発売された。「だれでも書けるFlash5アクションスクリプト」で、Webビジュアルガイドシリーズの1冊だ。著者は伊佐恵子で価格は\2,500である。フルカラーで200ページ程の書籍だ。ActionScriptの初歩から、具体的な実例を見せながら、一歩一歩解説していくという形態になっているので、プログラミングに親しんでいない人でも、書籍の解説に合わせて作業することで一定の成果は得られるような解説になっている。条件によって表示文字を変える方法や、合計などを計算する方法、メソッドを定義するなど、目的ごとに単元が区切られているため、やりたいことをさがすのにも便利だろう。CD-ROMが付属しており、基本でザインがその中にあるので、解説に従ってスクリプトを加えていくことができるようになっている。
Webサイトの構築ではFlashを使ってビジュアルで動きのあるページの作成は必須となっている。そうしたサイトでより完成度を高めるには、ActionScriptでのプログラミングは欠かせないものとなっている。

関連リンク:MdNの新刊書籍
カテゴリ:オーサリング系, 雑誌、書籍


Cocoaで一般的でない形態のウインドウを表示する方法を示すサンプルプログラム

Sample Codeに掲載された「RoundTransparentWindow」は、Cocoaの機能を使って、通常とは違う形式のウインドウを作成する方法だ。円形のウインドウで背景が虹色に変化するようなタイプのウインドウが表示される。スライダーを調整すると透過率を変化することができるが、ある程度以下の透過率だと五角形になるといったウインドウだ。Project BuilderおよびInterface Builderを使ったサンプルプログラムで、記述言語はObjective-Cである。Interface Builderの文書にウインドウが定義されており、そのウインドウは、NSWindowを継承した独自のクラスを使用するように設定されている。その独自のウインドウ用クラスのプログラムを、Project Builder側で定義する。また、ウインドウには、CustomViewコンポーネントが背景に配置されている。このCustomViewも独自に定義したビュー用クラスを使うように設定されていて、そのクラスについてはプログラムを行う。こうして、Cocoaのアプリケーションの中で、特殊な形態のウインドウを実現している。

関連リンク:RoundTransparentWindow 1.0
カテゴリ:Cocoa, ユーザインタフェース


Carbonでのカスタムリストの作成方法を示したサンプル

Sample Codesに掲載されたCarbonCustomListは、Carbonで稼動するリストコンポーネントの使い方を説明するものだ。CreateCustomListを用いて作成されるリストコンポーネントは、表示内容を自由にカスタマイズしてリストを構築できるが、コールバックルーチンを定義するなど、使い方自体は以前の単純なリストにくらべて少しややこしいので、サンプルがあると参考になるだろう。プログラム自体は、升目状にテキストが表示されるだけのシンプルなものである。Project BuilderとCodeWarriorのプロジェクトが作成されている。なお、リストコンポーネントに関するリファレンスは、以下のList Managerのドキュメントで参照できる。

◇CarbonCustomList 1.0
 http://developer.apple.com/samplecode/Sample_Code/Human_Interface_Toolbox/CarbonCustomList.htm

◇List Manager Reference
 http://developer.apple.com/techpubs/macosx/Carbon/HumanInterfaceToolbox/ListManager/List_Manager/index.html

カテゴリ:ユーザインタフェース, Carbon/CF


ATSUIを使ってテキストの描画パフォーマンスを高める方法をサンプル付きで紹介

Technical Q&Aで、ATSUIによるテキスト描画は実際にパフォーマンスがいいのかという問いに関する答えが掲載された。答えはイエスで、ATSUStyleレコードを使って、一度レンダリングをした結果を再利用することにより、パフォーマンスは向上する。同じ内容のテキストの描画では、レンダリングした結果を何度も利用できる。そのためのサンプルプログラムも掲載されている。サンプルプログラムは、アピアランスのテーマに従ってフォントなどを取得し、ATUStyleレコードを作成する。それをもとに、文字列を指定して描画するといったまとまったサブルーチンで紹介されている。

関連リンク:http://devworld.apple.com/qa/qa2001/qa1027.html
カテゴリ:Technical Q&A, グラフィックス