出来がよすぎるぞFaceSpan

FaceSpanを電車の中で評価してみた。当初、これはCarbonのアプリケーションではないかと思っていたのだが、使い始めるとどうもそうではないことが分かってきた。CocoaのキレイなUser Interfaceが作れる。

本ソフトの開発者であるLate Night SoftwareのMark Alldritがただものでないことは知っていたが、これを見るかぎりやはり尋常な人間ではないことを再度痛感した。

日本国内のとある会社にも「FaceSpanを買わないか?」という話がDigital Technology Internationalから舞い込んだ(という話を人づてに聞いた)。しかし、そのソースコードを見て日本の会社の担当は絶句したという。

「あまりにもゴチャゴチャしすぎていてわけがわからない。ウチでは扱えない」
そういう結論になったそうだ。結局、それを引き取ったのがMarkである。そして、ここまで(FaceSpan 4.3)の完成度にまで持ってきたということは驚異に値する。
よくよく考えると、これはオリジナルのコードから考えるとほとんど「書き直し」になっているのではないかと思われる。皮肉なことに、Digital Technology Internationalのエンジニアよりも(これは当然か)、US Appleの開発部隊よりも、Mark Alldritたったひとりのほうがはるかにいい仕事をしている。あるいは、この作業にナイショでAppleが関与しているということも考えられる。

そのうちのどちらかが成立しないかぎり、「あり得ない」完成度になっている。本当に驚きだ。

まずひとつ、AppleScript Studioの文法とほとんど変わらずにそのまま書ける点に驚く。

さらにさらに、AppleScript Studioで「面倒だ」と感じられていた部分がことごとく解決されている点に驚く。

たとえば、GUI部品へのドラッグ&ドロップ処理など、AppleScript Studioではどのようなファイルのドロップを受信するか、最初にプログラム中で宣言しておかなくてはならないのだが、これがFaceSpanではGUIから「どのファイルのドロップを受信するか」選択するだけでいいようになっている。拍手喝采である。

ほかにも、AppleScript Studioでは単語レベルでしか記述時のアシストが有効ではなかったものが、FaceSpanではより積極的にアシストするようになっている。コンテクストメニューでさまざまなスクリプト記述を呼び出す、といった(スクリプトエディタで使えるのにXcode上でAppleScriptを記述する時には使えない)スタイルもうれしい。ユーザーが勝手に拡張できるのもたいへんうれしい。

そもそも、AppleScript Studio自体がAppleによるFaceSpanの劣化コピーだったりするので、それほど驚くには値しないのかもしれない。それにしても、あらためてFaceSpanのAppleScript用語辞書をみまわしてみると、細部に至るまで「互換」という言葉よりも「そのもの」という感じがする。劣化コピーよりオリジナルの方が出来がいいというのは「お約束」である。

冒頭にも書いたが、ボタンなどのGUI部品が「Carbonっぽくてダサい」ということはない。きちんとCocoaの部品が使われているし、生成されるアプリケーションもパッケージ形式になっている。Interface Builder上のGUI部品とオブジェクトの様式がイコールではない部分(Drawerの内部にCustom Viewの配置を必要としないなど)もあったりするが、その点だけ理解すればさくっと「きちんと動くアプリケーション」を記述できる。これは驚きに値する(私はClassic Mac OSの時代にFaceSpanをさわったことがないのだ。先日、仕事でちょっとだけ使ったことがあったが、それはありもののプログラムの書き換えだけだった)。

日本語の扱いもぜんぜん心配いらないレベルのようだ。ボタンに日本語のテキストを入れてみたり、Text Fieldに日本語を入力して取得しても(このへん、contentではなくstring valueでアクセスしなくてはならなかったりで焦る)、文字化けすることはない。ただ、ログウィンドウに日本語の文字列を表示させると文字化けするので、その点のみ気になる。

では、そんなに似ているなら既存のAppleScript StudioのプロジェクトをそのままFaceSpan上に移植できるんじゃないかといえば、さすがにそれはちょっと難しい。
それというのも、AppleScript StudioとFace Spanでは、基本構文は激似であるものの、構造が大きく異なるからだ。

AppleScript Studio上では基本的にScriptのファイルは1つで(複数Scriptを持つこともできるが、基本は1つ)、そのScriptに各種GUI部品やらアプリケーションのランタイムから飛んでくるイベントが投げられる。

これに対してFaceSpanでは、各GUI部品ごとに1本のScriptを個別に持つようになっており、デフォルトで初期化用のawake from nibハンドラとAction(ButtonならClick)ハンドラがScript上に展開される。

FaceSpan上では、基本的にバラバラにScriptが存在するので、グローバル変数とかプロパティをどーやって共有するのか、まさかボタン1つに付属しているScriptで、他のすべてのScriptをloadしまくって変数を調べるわけでもないだろう。何かScript間のデータ共有に関して手段が用意されていると思いたいが……(調べたら、各Scriptの冒頭でglobal宣言すれば大丈夫らしい)。

FaceSpan 4.3の完成度は高く、さまざまなアプリケーションをコントロールする種類のツールや、通常のAppleScriptで書かれたプログラムに手っ取り早くGUIをかぶせるのに非常に適している。小物ツールを作るならAppleScript StudioよりもFaceSpanを選択すべきだ。

ただ、完成度が低くて作りがいいかげんなAppleのAppleScript Studioは、バグの所在はともかく、ラフでいいかげんな作りが幸いして「作れるもの」の範囲が異様に広い。Cocoaメインのアプリケーションに対してAppleScript Studioをまぜることもできるし、CoreDataアプリケーションにAppleScript Studioをまぜることも可能だ。

さらに、AppleScript StudioではObjective-Cで記述されたクラスを組み合わせることで、たとえば透明ウィンドウを実現できたりとAppleScript Studioだけではできないことを実現できる。

Info.plistを編集したりもできるので、一般的なMac OS X上のアプリケーション構築技術の多くがそのまま使えるというのもAppleScript Studioならではのメリットだ。

そうはいっても、AppleScript Studioのバグは、何度もUS Appleに文句を言っても直らないし、担当者は横暴でやる気もないし(あんなにMLで嫌われている担当者も珍しい)、Leopardでバグの山が片付かなかったら、本気でAppleScript Studioを見捨ててFaceSpanに移行することを検討すべきだ。

とくにビギナーはAppleScript Studioなんか覚えないでFaceSpanを使うべきだ。OSに無料で添付されてはいるが、無料でついてくるツールの限界というものを感じ取れるようになったら、ぜひ検討すべきである。

デモ版の試用期間の間に、これまでに作った巨大なサイズのAppleScript Studioアプリを移植してみて、FaceSpanのランタイムアプリケーションの出来を調べてみるつもりだ。

Copyright By Piyomaru Software. All Rights Reserved