Macintosh Developer Online (MDOnline)


2001年12月20日発行号 - AppleScript Studioつかってみました



一昨日は自宅にYahoo!BBのADSLモデムが到着し、昨日は会社に行ったら「新居さ〜ん、So-netのモデムきてるよ〜」ってことで、連日ADSLモデムをインストールしました。ADSLの部分はまあマニュアルとおりなんですが、会社の回線は実はこれで2本になります。夏にえらいことになった(苦笑)東京めたりっくとSo-netの8Mbps回線です。ただ、めたりっく側にはサーバがあるので、まじめにルーティングをしないといけないというわけで、ネットワークアダプタを3枚差したLinuxマシンでルーティングというかIPマスカレードをしています。とは言っても、スタティックルーティングの追加だけで振り分けていますが。めたりっくのは固定IPが使えるとは言え月あたり32,000円で640Mbps、一方のSo-netは月に3,500円ほどで8Mbpsです。まあ、前者が決して高いとは言いませんけど、なんか値段のバランス感覚がおかしくなりそうです。しかも、めたりっくを通したのがちょうど昨年の12月だから、1年前までは128Kbpsだったわけだしね〜。1年で、額面上は、64倍も高速になりました(おぉ、8×8だ!)。ちなみに、So-netではcurlのダウンロードをすると5Mbpsくらいの実行レートは出ています。まあ、だけど、なんだかんだでいろいろやることが出てきて、昨日の段階ではサーバが一部完全でないところもあるため、ちょっとまだいじらないといけません…実は一部の方々には謎のメールが返送されているみたいなんです。しかし、謎は使わなくなったサーバが頻繁に落ちはじめたというのがあって、超謎です。それに、Linuxって頻繁に機能が変わったため、結果的にノウハウってあまりたまっていないような気もしてきましたけど、どうなんでしょう? だからあいかわらず出版社がもうかるというフレームワークですが、そういえばうちの会社も…。もちろん、サーバ運用は慎重にするとか迷惑をかけないとかは必要でしょう。だけど、それが転じて素人はインターネットにつなぐサーバを立てるなという話にもなっていますが、私も含めて限られた時間内でしかも予算はほとんどなく、サーバの管理をしないといけない人だって数多くいらっしゃるかと思います。もちろん、多大な迷惑をかけるのがいいとはいいませんが、ちょっと多めにみていただいて、ご指摘をもらえば目くじらを立てるほどのことでもないような場合も多いとは思います。なんてグチっても、結局のところまだまだ牧歌的な時代に専用線接続で遊んでいた頃がある意味では懐かしいなんてことなんでしょうか。MDOnlineを始めた頃、たった2,3年前のことなんですけどね。
(新居雅行 msyk@mdonline.jp


AppleScript Working》AppleScript Studioで作るMac OS X“ネイティブ”アプリケーション(1)

Developer ToolsのDecember 2001版は、単なる利ビジョンアップではなく、AppleScript Studioが初登場となり話題を集めている。すでにいろいろとアプリケーションを作っている人もいるかと思われるが、まずはAppleScript Studioを使ったアプリケーション作成のポイントとなる部分を紹介したい。AppleScriptでのプログラム作成経験や、Project Builder/Interface Builderについてのある程度の知識があると理解しやすいと思われるので、まったくの初歩からの解説はやや省略気味にさせていただく点は最初にお許しをいただきたい。
AppleScriptは開発言語であるが、ある意味では「緩い」オブジェクト指向言語である点が、独特の分かりやすさを出していると言っていいだろう。また、大きな特徴は別のアプリケーションのコントロールができるという点だ。その意味では、コントロールするアプリケーションの中のデータを処理できるということも言える。もちろん、Finderのコントロールもできるので、Mac OSそしてアプリケーションの自動化ということが可能となる。Mac OSの世界では、QuarkXPressがAppleScript対応していることもあって、DTP関連ではビジネスとなるソリューションがAppleScriptでそこそこ作られており、実績もたくさんある。もっとも、Mac OSではその実行速度が問題になっていたが、Mac OS 9ではかなり改善がされた。Mac OS Xでは処理速度という点では飛躍的に早くなったと言えるだろう。
Mac OS時代から「スクリプト編集プログラム」はあったものの、プログラム入力などはできるがデバッガやGUI開発ツールを持たない基本的なツールであった。もちろん、これだけでも複雑なプログラムを作る人もいたのであるが、GUIについてはAppleScript自体のサポートが弱いだけにFaceSpanなどのサードパーティが開発したツールを使うことになっていた。だが、Mac OS X時代、強力なツール「AppleScript Studio」をApple自身がリリースすることになる。大きな特徴は、Cocoaをベースに動くということだ。CocoaにはGUIを構築するさまざまなコントロールがある。これらを利用してGUIを設計し、その背後の動作をAppleScriptで作成できるというようになったことだ。しかも、Project Builderを利用でき、デバッグ環境もある。ユーザインタフェースはCocoaだからもちろん、Interface Builderで作成できる。Appleの統合開発環境で、AppleScriptのアプリケーションができてしまうのである。
見方を変えれば、Cocoaの開発言語としてAppleScriptがサポートされたとも言える。Cocoaフレームワークのネイティブ言語はObjective-Cであるが、Cocoaにちょっと衣を着せればJavaでも開発ができるようになる。それと同じ感覚だ。ちょっと衣を着せる程度ではなく新たなフレームワークも必要になるが、いずれにしても、CocoaのコンポーネントをAppleScriptでプログラミングできるというのが重要なポイントである。ただ、Cocoaについて知っていればそれはもちろん役に立つが、Cocoa-Javaに比べてCocoaのことはあまり知らなくてもAppleScript Studioではプログラム作成ができる。言い換えれば、AppleScriptのこれまでの雰囲気に近いので、そういう意味ではCocoaであることはあまり意識はしなくてもいいだろう。

そういうことで、いろいろ説明すべきことはあるのだが、実際にどうなるかを見て見よう。サンプルとして、さりげなくInDesign 2.0Jを使うが、未発売ソフトである点は申し訳ない。ただ、今後はInDesign向けユーティリティのようなものがAppleScript Studioで作られることになると思われるので、ちょっと先取りさせていただいた。以下、ダイアログボックスで行列数やサイズを指定すると、それに対応した表を、挿入ポイントの位置に作成するというアプリケーションを作成してみたい。
Project Builderで、「ファイル」メニューから「新規プロジェクト」(Command+shift+N)を選択すると、次のようなプロジェクトのテンプレートを選択するダイアログボックスが表示される。AppleScriptものが3つあるが、ドキュメントベースのものまである。

◇テンプレート「AppleScript Application」を選択する
 

続いて、作成するプロジェクト名と、フォルダを保存する場所を指定する。これは今まで通りである。

◇保存するフォルダとプロジェクト名を指定する
 

作成されたプロジェクトをまずは中身をチェックしよう。Application.applescriptというファイルがある。.applescriptという拡張子が、AppleScriptプログラムファイルの拡張子ということであるようだ。そして、MainManu.nibファイルがある点も大きな特徴だろう。つまり、Interface Builderで編集するnibファイルで、ユーザーインタフェースを定義できるのである。

◇作成されたプロジェクト
 

プロジェクトの中には、AppleScriptKit.asdictionaryというファイルもある。これは、AppleScript Studioで使う用語辞書である。いわばヘルプ機能ではあるのだが、ここでは.asdictionaryのファイルとして、辞書を追加できるということのようである(実際に作って試してはいないので勘違いかもしれないが…)。作ったアプリケーションのAppleScript対応というのはまた問題が別になるので、とりあえずこういうファイルもアリという点がチェックポイントだ。

◇AppleScriptの用語辞典ファイルもある
 

他には、main.mというファイルがあるが、これはObjective-Cでのソースであり、アプリケーションのインスタンス生成に必要なものである。これは別に修正する必要などはないので、気にすることはない。またフレームワークも組み込まれているが、ここでは2つのフレームワーク岳を使うという設定になっている。
さて、MainMenu.nibファイルは、アプリケーション設定によって指定されているため、このアプリケーションを起動すると自動的にロードされる。そこでインスタンス化が設定されているクラスは自動的にインスタンス化されるのである。さっそく、MainMenu.nibファイルを開いてみてみるが、今までに見てきたCocoaアプリケーションと大きな違いはない。ここでは一般のアプリケーションなので、メニューとウインドウがそれぞれ定義されている。ウインドウは自動的に開かれるようになっている。

◇MainMenu.nibを開いたところ
 

さっそくユーザインタフェースを作って行くことにしよう。行列数やサイズは、NSTextFieldを使うことにする。ガイドラインを見ながら4つのNSTextFieldと、1つのNSButtonを配置した。ここまでは単に配置しただけだ。もちろん、Attributesの類いは自由に設定をしていい。

◇テキストフィールドとボタンを並べた
 
(この項続く)

カテゴリ:ProjectBuilder/Interface Builder, AppleScript, AppleScript Working


AppleScript Working》AppleScript Studioで作るMac OS X“ネイティブ”アプリケーション(2)

ここからAppleScript特有の設定を行う必要がある。まずは、ToolsメニューのShow Info(Command+shift+I)を選択して、情報のパレットを開く。そして、ウインドウ上にあるNSTextFieldの一つを選択した。情報パレットの上部にあるポップアップメニューからAppleScriptを選択する。すると、Nameというボックスがあるので、そこに名前を入れる。AppleScriptの側ではこの名前を手がかりに、このNSTextFieldを参照することができるのである。

◇AppleScriptで使うコントロールにはNameで名前を設定
 

なお、4つあるNSTextFieldには上から順番に、rowNum、colNum、height、widthとNameを設定した。
ボタンについても同様に情報パレットで設定を変えよう。ボタン名をAttributesのTitleで設定する。そして、AppleScriptの設定では、Event HandlersにあるActionのclickedにチェックを入れる。さらに、ScriptではApplication.applescriptにチェックを入れる。これにより、ボタンをクリックしたときにイベントを拾うようになるが、そのイベントに対応するハンドラを、Application.applescriptというソースに記載するということを指定したのである。情報パレットの下にあるボタンを使えば、ソースを新たに作ることもできるし、ソースをProject Builderで編集にかかることもできる。

◇ボタンの名称を変更した
 
◇ボタンのAppleScript属性はイベントを指定する
 

以上が、Interface Builderでの操作のポイントである。情報パレットのAppleScriptのところで、Nameの設定を行い、応答するイベントを指定し、さらにイベントハンドラの書く場所を指定するというわけだ。もちろん、使わないイベントは特に指定はしなくてもいい。また、プログラムで参照しないコントロールは特にNameを使わなくてもいい。
ここではボタンをクリックしたときのイベントに対応するハンドラを作成したが、Project Builderでそのハンドラを見てみると次のようになっている。on clickedで始まっているが、引数theObjectというものがある。このtheObjectには、クリックされたボタンへの参照がセットされている。たとえば「view 5 of window 1」といったような参照となっているようだが、いずれにいても、メッセージの送り主が引数にあるということだ。

◇作成されたハンドラ
 

こうしてハンドラにプログラムを書いて行く。プログラムの内容については後でまとめて説明をしよう。ここではプログラミング作業だけをまずは見て行く。すでにどぎつくカラーリーングされているのであるが、これはAppleScript Studioをインストールすると、Script Editorも含めてこの色使いになる。なお、色使いについては、Script Editorの「AppleScriptフォーマット」で変更できるが、反映させるにはProject Builderを再起動しないといけない。

◇プログラムを打ち込んだ(プログラムにはまだ間違いがある)
 

ここで構文チェックをしたいのだが、ソースのウインドウの上部右端に4つ並んでいるボタンのうち、いちばん左のものが構文チェックである。エラーがあるとシートで表示する。

◇ソースの構文チェックを行う
 

構文に間違いがないと、きれいに(ちょっとどぎつく)カラーリングされる。ソースウインドウでは行は折り返されるのがちょっと見づらくなるが、ここではご容赦いただきたい。とにかく、NSTextFieldで入力したパラメータを使って、InDesignで表を作成させてるプログラムが出来上がった。

 

あとは通常とおり実行すればいい。ツールバーにあるボタンないしはCommand+Rが一般的だろう。そうすると、まずは設計した通りにウインドウが表示される。そして、テキストフィールドに数値を入れて、「表を作成」ボタンをクリックすると、InDesignで表が作成される。InDesign側では、たとえばテキストフレームを作っておいて、その中に挿入ポイントがある状態ということをとりあえず仮定している。

◇プログラムが実行され、メニューやウインドウが定義通りにできている
 
◇数値を指定した
 
◇InDesignでは表が埋め込まれた(あれ?変だぞ〜)
 

なんとなく動いているが、サイズはOKだとしても、行数や列数が指定通りになっていない。というわけで、デバッガで動作を見てみよう(ちょっとわざとらしいが)。起動したアプリケーションをまず終了させ、適当にブレークポイントを設定する。ソースウインドウの左側の部分をクリックすると、楔型のブレークポイントマークが入る。そしてデバッグ実行のボタンをクリックするか、Command+Yでデバッグ実行を行う。

◇ブレークポイントをAppleScriptのプログラム中に設定した
 

プログラムが実行され、テキストフィールドに適当に値を入れて、ボタンをクリックすると、しばらくするとブレークポイントでプログラムが停止する。そして、そのときのグローバル変数やローカル変数がProject Builderですぐに参照できるようになっている。(ここでは行数や列数として文字列を与えているので、表を作成するプロパティとして不適切であると言うことが分かる。つまり、数値にしてやればいいのである。)

◇ブレークポイントで停止するとその段階での変数値がすぐに参照できる
 
(この項続く)

カテゴリ:ProjectBuilder/Interface Builder, AppleScript, AppleScript Working


AppleScript Working》AppleScript Studioで作るMac OS X“ネイティブ”アプリケーション(3)

ちなみに、作成されたアプリケーションはもちろん、プロジェクトのフォルダのbuildフォルダにある。そのままダブルクリックしても同様に使える状態になっている。中身はMac OS Xのパッケージ形式だが、Contents/Resources/Scriptsというフォルダに、コンパイル済みのスクリプトが入れられているようである。今回はアイコンなどの設定は行わなかったが、CocoaやJavaのプログラム作成のときと同様、アイコンなどを設定すれば、きちんと表示されるはずだ。また、nibファイルのローカライズなどの方法も、他のフレームワークでのときと同じようにすればいい。

◇すでにパッケージされたアプリケーションとして出来上がっている
 

作成したプログラムについて説明しよう。リストは次のようなものであるが、↓以降は前の行とつながるものとして解釈してもらいたい。


on clicked theObject
set thisWindow to window of theObject
set tableColNum to string value of text field "colNum" of thisWindow
set tableRowNum to string value of text field "rowNum" of thisWindow
set tableWidth to string value of text field "width" of thisWindow
set tableHeight to string value of text field "height" of thisWindow
tell application "InDesign 2.0J"
tell active document
make new table at selection with properties { ↓
row count:tableRowNum as number, ↓
column count:tableColNum as number, ↓
height:tableHeight, width:tableWidth}
end tell
end tell
end clicked

まず、ボタンをクリックするとこのハンドラが呼び出されるが、theObjectはボタンを参照している。ボタンが所属するウインドウを取得するにはwindowプロパティを利用すればよいので、まずウインドウへの参照をthisWindow変数に入れている。ところで、AppleScript.asdictionaryを参照してもらいたいが、Control View Suiteのクラスにbuttonがあり、それがボタンである。しかし、このクラスは、controlクラスを継承しており、そのcontrolはさらにContainer Suiteにあるviewを継承したものである。このviewクラスのプロパティにwindowがあるというわけだ。
そして、ウインドウへの参照が分かれば、そこに配置されているコントロール類への参照はプログラムのように求めることができる。たとえば、AppleScript属性のNameがcolNumのテキストフィールドは、「text field "colNum" of thisWindow」として参照できるのである。このあたりは、Application suiteのwindowクラスを参照すると良いだろう。
text fieldクラスのプロパティにstring valueというものがあって、それを使えば、テキストフィールドの中身を文字として得られるというわけである。text fieldクラスはControl View Suiteにあるが、controlクラスを継承している。controlクラスにstring valueプロパティが定義されているのである。
以上は1つの手法である。アクティブなウインドウは「window 1」などとして参照することもできるだろうし、他にもやり方があるかもしれない。だが、ウインドウを参照し、そこに配置されているコントロールへの参照方法が分かれば、あとはコントロールごとのプロパティなどが分かればユーザインタフェースとのやり取り部分は概ね制圧できたと思っていいだろう。

InDesign側のスクリプトであるが、make new tableとすることで、とりあえずは表は作成できる。ただ、表は任意の場所ではなく、テキストフレーム内となる。だから、表を作るメニューはテキストフレームに挿入ポインタがある場合に選択できるようになる。挿入ポインタがテキストフレームにあると、selectionは「insertion point 1 of text frame 1」のような感じになるのだが、これをmakeコマンドのatパラメータに指定すればいい。つまり「make new table at selection」で挿入ポイント位置に新たに表を作るというわけだ。表のプロパティをwith propertiesで後は指定すればいい。プロパティは大量にあるのだが、その中で行列数とサイズだけを指定して新たに表を作ったという次第だ。
ところで、tell applicationの後の文字列はアプリケーションファイルのファイル名でないといけないようだ。DockにはInDesignとしか出てこないが、ファイル名を指定する必要があるようだ。

AppleScriptのプログラムが長くなってしまうと、option+returnで続き行を指定した改行を入力できた。例の鍵マークはどうもキー操作はoption+Lになっているようであるが、Project Builderではどちらもうまくは機能しない。option+returnは普通に改行するし、鍵マークはエラーとなる。それで、1行を分割する方法であるが、結果的には半角の「ツ」を入力することで対処できるようだ(「ツ」って出るのはカッコ悪いけど)。半角カナの「ツ」を入力する方法としては、とりあえずことえりでは環境設定で半角カナ入力を可能にして、仮名漢字変換で全角をトランスリタレートするという方法しか思い付かなかった。

AppleScript Studioはいずれにしても本格的なアプリケーションを比較的容易に作成できるという印象が持たれる。Mac OS時代でもソリューションにつながっていたAppleScriptであるが、OSAXを使ったりすると環境を選んだり、原因不明のトラブルに見舞われたこともよくある。Mac OS XになってAppleScriptはもちろん、OS自体の土台が強固になったので、より安定した実行環境であることは十分に期待できるのである。その上で、本格的なGUIが構築できるというフレームワークが提供された。AppleScriptはもはや「マクロ言語」ではないのである。

最後にさっそく公開されているAppleScript Studio関連サイトを紹介しておこう。もちろん、サイトはスタートしたばかりだが、がんばってもらいたいと願っている。ちなみに、以下のサイトの制作者はAppleScriptの世界では名前が知られた人たちである。

◇oomori.com
 http://www.oomori.com/

◇AppleScript Studio研究所
 http://web1.aaacafe.ne.jp/~tetsuyak/ASS/
(この項、以上)

カテゴリ:ProjectBuilder/Interface Builder, AppleScript, AppleScript Working


TIL》日本語環境でWebObjectsを使う場合の特有の問題について

Tech Info Libraryに、Project Builder 1.1(September 2001版のDeveloper Tools)でのWebObjects開発での問題点について記載されている。1つは保存したEOModelerのファイルが開けなくなることで、「defaults write com.apple.EOModeler _CFForceASCIICompatibility YES」とコマンド入力することで回避できる。また、ビルド表示の文字化けやフリーズの問題についても記載されており、ビルド設定のコンパイラフラグの設定が解説されている。

関連リンク:100482JO:WebObjects 5: Mac OS X 10.1 の日本語環境で WebObjects 5 を使用する際の注意事項
カテゴリ:Tech Info Library-J, WebObjects


KBase》システム環境設定の「共有」の不具合を解消するファイルの英語版が公開

Mac OS Xで、/etc/inetd.confファイルがなかったりあるいは削除されている場合、Sharingのシステム環境設定パネルを呼び出すと、システム環境設定アプリケーションが終了してしまう問題がある。それを解消するシステム環境設定パネルが公開されているが、英語版だけであり、日本語版については公開されていない。

関連リンク:Mac OS X: Selecting Sharing Pane Causes System Preferences to Quit Unexpectedly
カテゴリ:ネットワーク, Mac OS X


KBase》QuickTime Streaming Server 4 Public Preview 2が公開

QuickTime Streaming Server 4 Public Preview 2が公開された。Mac OS X/Server 10.1以降で利用できる。2002年3月15日までの期間制限付きとなっている。Ver.4では管理ツール、QoS、プレイリスト利用について改良され、Native Hinted MPEG-4 StreamingやNative MP3/Icecast Streamingがサポートされる。Darwin Streaming Server 4 Public Preview 2についてもリリースされている。

関連リンク:QuickTime Streaming Server 4 Public Preview 2: Information and Download
カテゴリ:QuickTime, サーバー製品


TIL》Mac OS XのAcrobatReaderで日本語が読めない場合もある

Mac OS X 10.1から付属しているPDFリーダのAcrobatReader 5.0で、日本語の文書を開いたとき、“「Ryumin-Light-Identity-H」フォントが見つからないか作成できません。…”といったエラーメッセージが出て日本語が表示されない場合がある点について、Tech Info Libraryに情報が掲載された。Mac OS 9で稼働するAcrobat Readerでなら読めるので、とりあえずはその方法を使うことになる。将来的にはこの問題を解消させる予定である。

関連リンク:100483JO:Mac OS X 10.1: Acrobat Reader 5.0 で PDF ファイルが正しく表示されない
カテゴリ:テキスト/フォント, Mac OS X


TIL》iPodに日本語で名前を付けるときの文字数制限について

Tech Info Libraryに、iPodの名前付けを日本語で行う場合の注意点について掲載された。アシスタントでは、全角では7文字、半角だと19文字以内となる。直接設定する場合は、全角なら11文字、半角なら27文字となる。なお、半濁音や濁音のある仮名文字は2文字とカウントする。

関連リンク:100484JO:iPod: 名前の付け方について
カテゴリ:Tech Info Library-J, メディアプレイヤ