GO BACK
「AppleScript Studioでゼンマイびゅんびゅん!!」追補情報
ここは、拙著のAppleScript Studio本「AppleScriptStudioでゼンマイびゅんびゅん!!」(アスキー、408頁、2800円)に関するコーナーです。現在、初版 の見直し作業をしていますが、校正情報やよくある質問の答えなどをここでまとめて掲載します。また、記述間違い、校正漏れ、「これが全然わかんない!」と いったことがあれば、どうぞ掌田津耶乃(tuyano@mac.com)まで 御連絡ください。ここで補足していきたいと思います。
★サンプルプロジェクトの配布★
※本書では、アスキーのホームページよりサンプルプロジェクトを配布している旨を記述してありますが、どうやらアスキーの体制変更に伴い、配布ページが閉 鎖されたようです。とりあえず、ここで代わりにプロジェクトファイルの配布を行うことにします。以下のリンクをクリックし、zip圧縮されたファイルをダ ウンロードしてください。
サンプルプロジェクトをダウンロード!
ファイル展開のパスワード:本書のリスト2-1、1行目の2番目の単語
★バグ・校正情報★
※ここでは、ソースコードや内容に関する記述間違い、校正ミスなどについて整理しておく予定です。現在、まだチェックの途中ですが、確認したと ころまで掲載しておきます。
※P.69 リスト2-2 以下の文は使っていないので削除してかまいません。
P.69 下から4〜5行目
set xn to 0
set yn to 0
P.70 5〜10行目
set xn to xn + 1
set yn to yn + 1
if xn = x then
set xn to 0
set yn to yn + 1
end if
このプロジェクトだけ、最終版の一つ前のものが混じってしまいました。見ればわかりますが、ここで操作しているxn,ynという変数は、実は何も使われて いません。使用する予定だった機能を削る段階で、これらの部分が残った状態のものを掲載してしまったようです。
単に「使ってないのでいらない」ということなので、あっても別に問題はありません。また、アスキーから配付しているサンプルプロジェクトでは、これらを カットした状態のものになっています。
※P.158 「・デフォルトエントリーの値を変更する」の部分
(誤)make new default entry at end of default entries of user defaults with properties {name: エントリー名 , contents: 値 }
↓
(正)set contents of default entry エントリー名 of user defaults to 値
見ればわかりますが、この部分は、その手前にある「・デフォルトエントリーを作る」の文と同じものになっています。レイアウト作業の際に間違えたようで す。正しくは上記のようになります。
※P.180 手順3〜4
この部分では、「追加」ボタンを押して書類のタイプを追加し、「変更」ボタンで保存するとしてありますが、10.2.8~10.3に付属する Project Builder/Xcodeでは「追加」ボタンは「+」ボタンになっています。また「変更」ボタンはなく、修正すればそのまま保存されます。
※P.201 1行目 ・NSTextField(表示用) → NSTextField(入力用)
このフィールドは、表示用でなくテキストを入力できるタイプのものです。そのまま表示用で作成して「あれ? 文字が書けないぞ?」と思った方もいるかも知 れません。まぁ、EditableがONかOFFかだけの問題なんですが・・・。
※P.319 2行目 「前に○×ゲームを作ったけど・・・」
本書では、○×ゲームは作ってません(前作の「新・AppleScriptでゼンマイびゅんびゅん!!」にはありましたが・・)。実は、当初はあったので すが、ページ数が増え過ぎて予定の価格で出せないことが判明したため、ぎりぎりになってカットしてしまったのでした。
なお、せっかく作ったサンプルなので、アスキーで配付しているサンプルプロジェクトの中に、○×ゲームのプロジェクトも入れてあります。本書には掲載さ れてませんが、本書を買った方への「おまけ」と思って、どうぞご利用下さい。
※P.342 リスト5-15 drawRect_x:y:w:h:width:fill: drawOval_x:y:w:h:width:fill:
リスト5-15の2つのメソッドで、それぞれ6行目を以下のようにして下さい。
lastR = NSMakeRect(x,y,w,h); → NSRect lastR = NSMakeRect(x,y,w,h);
このリスト5-14,15は、機能の拡張例としてあげたものですが、上記のように2か所「NSRect」というのが抜けていました。(アスキーより配付す るサンプルプロジェクトでは問題ありません)
これは、本書で作っているアプリケーションとは直接関係ない部分ですので、ここで作成している黒板アプリは問題なく動きます。
※他、誤植誤字脱字関係
P.53 7行目 え、「何ってるか・・」 → え、「何いってるか・・」
P.255 最下行 「対象的に」→「対称的に」
P.303 (7)の横に「解説」マークが間違ってついています。(本来は不要です)
※もし、何か発見したら御一報くださいませ。ここで補足させていただきます。
★追補情報コーナー★
※ここでは、本書に関する追補情報を公開していきます。本文で足りなかった内容を補ったり、不完全な部分を修正したりできればと思います。
なお、「このアプリでこういう機能を追加したい」といったご要望は、個別には受け付けていませんが、同様のご意見が複数寄せられ、比較的簡単にそれが実 現できそうなとき(かつ、筆者が暇な時)には、ここで追補情報として紹介していこうと思います。
● [重要] Pantherのopenハンドラ問題について
現在リリースされているPanther (ver.10.3.3) のXcodeでAppleScript Studioを利用する場合、Applicationのon openハンドラをONにすると、アプリケーションにファイルをドロップした際にプログラムが強制終了するという現象が確認されました。これはXcode のAppleScript Application全般で再現することを確認しました。
現状としては、対処方法はありません。ドロップレットに関してはScript Editorで作成すると問題なく動きますのでそちらを使って下さい。それ以外のものについては、バグが修正されるのをひたすら待つしかないようです。
●スクリプトを見られたくない!
AppleScript Studioで作成したCocoaアプリは、「パッケージの内容を表示」でアプリケーション内を開くと、 Contents/Resources/Scripts内にスクリプトファイルが置かれた形になっています。デフォルトでは、これをScript Editorで開くとスクリプトが見えてしまいます。
スクリプトの中身を見られたくない!という人は、Project Builderで「ターゲット」タブをクリックし、左側にある「ビルドスタイル」を「Deployment」に変更してから再ビルドして下さい。こうする と、スクリプトファイルは実行専用として保存されるようになり、中身を見ることができなくなります。一般に配付するフリーウェアなどは、これで中身を見ら れなくしておくとよいでしょう。――もちろん、「多くのAppleScript Studio作家のために」わざと見られるような状態で配付する、というのも一つの考えです。
●Info.plistの設定について
本書では、バックグラウンドアプリの作成などにInfo.plistのキーを追加作成したりしています。ここでうまく動かない人がけっこういるようですの で追補説明しておきます。
まず、Info.plistの項目は、大文字と小文字を区別します。ですから「NSBGOnly」を「NSBGONLY」「nsbgonly」 「NSBGonly」「NsbgOnly」・・・というように、同じテキストでも大文字小文字が異なっているとうまく動かないのです。次に、クラスが違っ ていないかもよく確認して下さい。NSBGOnlyやLSUIElementは、値は整数ですがクラスは「文字列」です。「数値」にしてはいけません。
こうした細かいところで引っかかる人は多いと思いますので、特に注意して下さい。
●「リバーシ」の思考ルーチンについて
本書では、単純に1手先(自分が打つところ)までしか計算していませんが、これではあまりに弱っちいので、アスキーより配付しているサンプルプロジェクト では、もう1手先(こちらが打った後に相手が打つところまで)を読むようにした修正アルゴリズムを追加してあります。コンピュータ側の思考ルーチン 「comp()」を呼び出している部分を、すべて「comp2()」とすれば、修正アルゴリズムの方が呼び出されるようになっています。(なお、サンプル ではcompt2()が呼ばれるようにしてあります)
●本書サンプルのアレンジ例について
本書で作成したアプリケーションをちょっと修正するだけで、けっこう違った感じのアプリが作れます。そうやって自分流のカスタムアプリを作ろう、というの が本書の趣旨ともいえます。
が、実際にどんな具合にアレンジできるかイメージが湧かない人もいるでしょうから、簡単な例をあげておきます。本ホームページの「アマクリWeb『津耶 乃の部屋』」内にある「AppleScript Studioのクズ入れ」を御覧下さい。ここに「miniCal」「miniBoard」といったアプリがありますが、いずれも本書の 「miniCalendar」「GreenBoard」をアレンジしたものです。miniCalは、カレンダーのウィンドウを透明にして、背面に表示する よう調整しただけですし、miniBoardは表示の大きさと色を変更し、やはり背面表示するよう調整しただけです。また、ここにも○×ゲームがあります が、これはサンプルプロジェクトのおまけの○×ゲームを修正し、カラーグラフィックのObjective-Cクラスを利用する形に変更しただけです。
サンプルプロジェクトに付属のアプリとこれらを比べてみると、アレンジのアイデアが湧いてくるかもしれません。
●5章「GreenBoard」でメ ニューバーとDockを消す
本書の5章で、画面にマウスで絵を描く「GreenBoard」を作成しましたが、これはDockとメニューバーは表示されたままでした。何名かの方から 「Dockもメニューバーも消して、全画面で描けるようにしたい」という意見をいただきましたので、ここで簡単にその方法を紹介しておきます。
Dockとメニューバーは、NSMenuというクラスにある「setMenuBarVisible:」というメソッドで非表示/非表示を切り替えること ができます。これをcall methodで呼び出せば、非表示にできるのです。スクリプトのwill finish launchingハンドラのどこかに、以下のような一文を追加して下さい。
call method "setMenuBarVisible:" of class "NSMenu" with parameters {false}これで、起動するとメニューバーとDockが非表示となり、全画面で描画ができるようになります。
●5章のメール送信プログラムで、 call methodだけでメール送信する
本書では、実は「AppleScript Studioから自由に使えるObjective-Cクラスを用意してみんなでどんどん使おう」というのが重要なテーマでした。そうすることで、フリーの Objective-Cクラスが出てくるようになってくるのではないか、それによりAppleScript Studioが更に広く使われるようになってくれるんじゃないか――といった遠大かつ近視眼的な野望があったわけです。それでこのメール送信プログラム も、送信部分をクラスとして独立させた形で用意してみたのでした。
が、実はこれは「call methodでは実現できないからクラスとして用意してある」というわけではありません。call methodだけでもメールの送信は行えるのです。
もし、「わざわざクラスをインポートして使うのはうざったい」という人は、以下のような形で実行すれば、Objective-Cクラスを使わずに同様の ことができます。(〜は記述せず、1行にまとめて書くこと)
これでメール送信できます(送信がうまくいったかは返値のfでわかります)。ただし、この場合もMessage.frameworkは必要です。set f to call method "deliverMessage:subject:to:" of class "NSMailDelivery" 〜
〜 with parameters {"送信内容", "タイトル", "送信先アドレス"}
●「System Events」のベータ版について
本書のコラムで新しいSystem Eventsについて触れていますが、ダウンロードして「GUIスクリプティングがうまく動かない」という方がけっこういるようです。このSystem EventsのGUIスクリプティングは、ユニバーサルアクセス機能を利用しています。このため、システム環境設定の「ユニバーサルアクセス」にある「補 助装置にアクセスできるようにする」をONにしないと機能しません。この点を確認して下さい。
★FAQコーナー★
※ここでは、本書の内容についての質問にお答えします。読んでいて不明な点などありましたら、どうぞ掌田津耶乃までお問い合わせください。その場合は、必ずお使いのOSのバージョン など動作環境について明記ください。
●AppleScript Studioは、ほんとにハイパーカードの代りになるんですか?
答え) 本書の中でHyperCardを引き合いに出したりしたので、こう思う人は多いでしょうが、ここではっきりといっておきます。「AppleScript Studioは、HyperCardの代りにはなりません」。ただ、かつてHyperCardが位置していた場所に、 AppleScript Studioが座る可能性は高いのでは?ということです。え、同じだろって?
つまり、「代り」ではない、ということを理解してほしいということなんです。例えば、「HyperCardのスタックを移植できるか」とか、 「HyperCardでやっていたこれこれをAppleScript Studioでやりたいけどできない(あるいはめっちゃ難しい)」ということでAppleScript Studioを「駄目だ、使えない」と評価してほしくない、ということなのです。
HyperCardとAppleScript Studioの共通点、それは本書でも触れたように「誰もが専門的知識なしに自分の欲しいプログラムを簡単に作れる環境」にもっとも近いものだ、というこ とです。もちろん、AppleScript StudioはまだまだHyperCardに比べて難しいという意見は正しいと思いますが、けれどこれは「HyperCardで作ったようなものを作る場 合」を考えているためでしょう。例えば、本書にある「メール送信アプリ」はHyperCardで簡単に作れるでしょうか? あるいは、「ひまわり Viewer」のようなバックグラウンドアプリは? これらはHyperCardを使うより、AppleScript Studioの方が圧倒的に簡単に作れるはずですね。このように、AppleScript Studioらしさを活かしたアプリというのもあるのです。
それに、現時点でMac OS X用HyperCardがなく、AppleScript Studioが全Mac OS Xにバンドルされていることを考えるなら、これを使わない手はない!と断言できます。
●ほんとのところ、 AppleScript Studioだけで本格開発は可能ですか?答え) これは、本書の重要な要素でもある「Objective-Cクラス」をどの程度導入するか、で違ってくるでしょう。例えば、重要な機能をすべて Objective-Cで用意し、AppleScriptでごく些末な部分だけ作る、というように「Objective-Cが9割、 AppleScriptが1割」といった作り方ならなんだってできます。が、これを「AppleScript Studioで開発した」と呼べるかどうかは「???」ですね。
ただ、最初の内はオールAppleScriptで開発し、自分のスキルが上がるに従って少しずつObjective-Cの割合を上げていく、というよう にシームレスにAppleScriptからObjective-Cへ移行できるのがAppleScript Studioのよい点だと思います。そういう意味で、将来高度な開発を目標としている人でも、「まずはAppleScript Studioから始める」というのは正しい選択であると思います。
●この本に載っているアプリケーション は、他の人に配っていいんですか?
答え) 申し訳ありませんが、それはできません。本書6頁の「本書について」で明記してあるように、本書および配布サンプルプロジェクトの内容物は、すべて本書を 購入した人にのみ利用を許可する、という形になっています。ですので、一般のフリーウェアのように自由に配ることはできないのです。
では、友達が「欲しい」といってきたらどうすればいいか。――答えは簡単です。本書のプロジェクトを元に、あなたがもっとすてきなアプリケーションを 作って、フリーウェアとして配ればいいのです。本書を購入した方であれば、本書のプロジェクトやソースコードは、あなたが作るプログラム内で自由にアレン ジしたり転用したりして利用できます。どうぞ、バンバンすてきなアプリを作って下さい。
●「アンドロメダ焼き」って、なんです か?
答え) アンドロメダ焼きは、知る人ぞ知る、知らない人は全く知らない、銀河系で最も有名なお土産です。宇宙へお出かけのときは、ご近所や親類に買って帰ると大変 喜ばれます。
●「ひまわりビューワ」ですが、気象衛星 ひまわりがなくなった後は??
答え) 2003年5月22日より、気象衛星ひまわり5号は役目を終え、米国のGOES-9が引き継ぐことになりました。tenki.jpにて確認したところ、 GOES-9による衛星写真は従来と同じURLに同じ形式のファイル名でアップされているようです。従って、ひまわりビューワも今まで通り利用できます。 (5/22時点での確認)
●4章の「式を直接実行する電卓」です が、これはAppleScriptの「run script」でもできると思います。UNIXコマンドを使う利点は?
答え)おっしゃるように、式のテキストをrun scriptを使って「run script "123 + 456"」というようにすれば、式の結果をAppleScriptだけで得ることができます。では、なぜわざわざUNIXコマンドを使った形で作ったの か。それは「桁数制限がない」ためです。
AppleScriptというのは、意外に使える値の有効範囲が狭いんですね。ですから桁数が少し多くなると「だいたいの結果」しか得られません。例え ば「123456789 * 123456789 * 123456789」というのを計算すると、run scriptでは「1.88167637178915E+24」という結果になります。が、UNIXコマンドを使えば 「1881676371789154860897069」という正確な結果が得られるのです。
●4章の「マルチタスクでスクリプトを動 かす」って、やってることはわかるんですが、具体的にどんな使い方ができるんですか?
答え) 一例ですが、私のホームページにて「更新チェッカー!」というフリーウェアを配付しています。これは登録したURLが更新されているかチェックするツール ですが、このソフトでは指定したURLからファイルをダウンロードし更新されたかチェックする部分を切り離し、NSTaskを使って別タスクで実行させて います。そうすることで、数が多くなれば数分はかかるダウンロード処理をすぐに終わらせ、反応が返ってくるようにしてあるわけですね。
AppleScriptは、スクリプトの実行中は他の操作が一切できないため、長時間かかるスクリプトだと、終わるまでビーチボールカーソルがぐるぐる 回りっぱなしになってしまうことがあります。こういう「時間がかかる処理をメインタスクから切り離す」というのに、マルチタスクのテクは使えるでしょう。
●Interface Builderで保存する時に「Save Documents」ってアラートが現れます。本にはこの説明がないのですが、これは何でしょう?
![]()
答え) これは、Mac OS X 10.2より、Interface Builderが新しいフォーマットになっていることが原因です。例えば新しいフォーマットからサポートされているコントロールを使用しているのに、 Interface Builderでデフォルトの保存フォーマットが古いものになっていたりすると、こうした確認のアラートが現れるわけです。
「Preferences」メニューを選び、現れたウィンドウの「General」にある「Nib File Compatibility」というところをチェックして下さい。これを「Boss Format」にしておけば、両方のフォーマットを利用可能になります。
●Project Builderでスクリプトのフォントを変更したいのですが。
答え) Project Builderでの編集エディタの設定は、Objective-CやJavaの編集用のものです。AppleScriptのスクリプト表示は、実は AppleScript側に設定が記憶されており、それを使って表示されるようになっています。これは、スクリプト編集プログラム(Script Editor)で変更できます。これでAppleScriptフォーマットのメニューを選び、現れたウインドウで、各項目を選択してフォントを変更して下 さい。これでスクリプト編集のフォントが変更されます。設定変更後、Project Builderを起動すれば、その変更したフォントでスクリプトが表示されるはずです。
●10.3にしてもこの本の内容は読み替 えることはできますか。
答え) 10.3ではProject BuilderからXcodeに開発環境が変更になっています。といっても、基本的な扱いはほぼ同じですから、本書のだいたいの部分は読み替えて使えるは ずです。ただし細かいメニューや用語などが変わっているので、まずはAppleScript Studio開発の基本をしっかり頭に入れて、「この機能はXcodeではこう変わったんだな」とわかるぐらいになってから移行した方がいいでしょう。
なお、10.3ではAppleScriptのいくつかの命令などに問題が見つかっています。このために、それ以前のスクリプトが正常に動作しないという ケースがいくつか報告されています。これはXcodeの問題というよりAppleScript本体の問題ですので、「現状では完璧に移行できる保証はな い」という点を知っておいて下さい。(おそらくバージョンアップにより早急に解決されるとは思いますが・・)
GO BACKGO HOME