|
《 ショート!ショート!スクリプト全集
》
|
|
|
先生
|
さて,君のすばらしい上達っていう成果もあったんで、スクリプト作成はここでおしまいにして、後は最初に言ったようなショート・スクリプトを見ながら質疑応答してみよう。 |
|
」
|
ってことは、僕は免許皆伝ですか? |
|
先生
|
とりあえず、今日のところはねっ。さぁ、それでは第1番勝負。これはどういう意味かな?
tell application "Finder" to get name
|
![]() |
|
|
」
|
あぁ、これは任せてください。「私のフォルダ」というfolderオブジェクト中にあるfileオブジェクトのnameという属性を持って来い、ということをFinderに指示しているんですよね。 |
|
先生
|
よし、90点をあげよう。 |
|
」
|
えっ、どこか違います? |
|
先生
|
いや、間違ってはいないんだけれど、「files」という指定を君が正しく理解しているかどうか分からなかったんでね。 |
|
」
|
「files」といえば、当然複数のファイルということでしょう。やっぱりあるだけ全部ということなんでしょうねぇ。 |
|
先生
|
早い話が、1回目に出てきた「every file」と同じことなんだね。「files」の代わりに「every file」を使っても全然問題ない。この複数形は「folders」とか「words」とか、ほかのクラスでも使える。 |
|
」
|
はい。 |
|
先生
|
次は、今開いている「私のフォルダ」という名前のウィンドウの大きさを知るスクリプトだ。
tell application "Finder" to get size of window "私のフォルダ" |
![]() |
|
|
」
|
本当だ。でもだからって何の役に立つんですかね。 |
|
先生
|
まぁこういう属性も取って来れるってことだよ…受けないから次へ行こう。
tell application "Finder"
|
![]() |
|
|
」
|
これはもしやFinderから別のアプリケーションのファイルを直接起動しようっていうんじゃないですか? |
|
先生
|
そう。これは「Home」というHyperCardのスタックをFinder上で選択して、その選ばれたもの、つまり「selection」を開く、ということなんだよ。 |
|
」
|
なるほど。確かに動きを見ると、最初にHomeというアイコンが白黒反転してから、HyperCardが起動しますね。ダブルクリックでファイルを開くのと同じだ。 |
|
《 Excelでワークシートのセルを自動操縦
》
|
|
|
先生
|
次はMicrosoft Excel 5.0だ。
tell application "Microsoft Excel" to set value of Cell "R2C3" to 8 |
![]() |
|
|
」
|
これは簡単なスクリプトですよね。ExcelのR2C3セルに8という値を入れろ、ということです。 おやっ、でも辞書を見るとCellにはvalueなんていう属性がありませんね。これも何かから継承しているのかな。 |
|
先生
|
そう。これはセル範囲を表すRangeクラスから継承しているんだね。もし、ここでvalue
ofを省いても返ってくる値は8になる。もちろん、get命令でセルの値を取り出すことができるし、EGWORDと同じようにmoveやcopyも使えるんだよ。 ただし、getの場合はvalue ofを省略するとそのセルのすべての属性を持ってきてしまうから要注意だ。
tell application "Microsoft Excel" と命令すれば、今入った8という値は、R2C3からR5C3のセルに移動する。
|
|
」
|
Excelにはマクロがあるけど、AppleScriptでも自動化できるんだ。 |
|
先生
|
そうだがAppleScriptの場合、ほかのアプリケーションからExcelを自動操縦できる、ってのが特筆物だ。 マクロじゃファイルメーカーProのデータをExcelのセルにsetする、なんてできないからね。 |
|
《 ファイルメーカーProからフィールド・データを得る
》
|
|
|
」
|
そのファイルメーカーProの例を見せてください。 |
|
先生
|
よしよし。では大場君と香奈子ちゃんという2人が入っている住所録というファイルがあるんだけれど、 tell application "ファイルメーカー Pro" to get Cell "ふりがな" というスクリプトを実行すると、その答えは? |
|
」
|
"おおば かなこ"? ハッハッハ! あれっ、でも先生。get命令で複数のデータを取り出すと、{}で囲まれるんじゃなかったですか? |
|
先生
|
おや、よく気がついたね。黙っているとファイルメーカーProはフィールドをリストで返してくる。 だが最後に「as string」ってのがあるでしょ。これで取り出す値を文字列にしているわけなんだ。 |
|
」
|
う〜ん、奥が深いですね。 |
![]() |
|
|
《 QuarkXPressの画像の倍率を変える
》
|
|
|
先生
|
それでは今度はQuarkXPressでの例を見せよう。 tell application "QuarkXPress"
|
![]() |
|
|
」
|
貼り付いている写真がちょっと大きくなりますね。 |
|
先生
|
current boxは選択されているボックス。その中に含まれる写真を縦横それぞれ200%に拡大したんだ。 |
|
」
|
この例は連載第1回目で出てきましたよね。あの時は何のことやらさっぱりでしたけど、今なら意味がバッチリと理解できます。 |
|
《 絶対に実行してはいけない(?)スクリプト
》
|
|
|
先生
|
よしよし。ではそれでは最後に、絶対やっちゃいけないスクリプトの例を見せてあげよう。 tell application "Finder" to quit applications
|
|
」
|
先生、これはもしかして、一発で立ち上がってる全部のアプリケーションを終わらせるんですね。よし、動かしてみよっと。 |
|
先生
|
あっ、ちょっと待って。あぁぁあ、遅かったか。 |
|
」
|
先生、画面がフリーズしちゃいましたけど。 |
|
先生
|
そりゃそうだろう。Finderが自分も終わらしちゃうんだから。 |
|
《 メーカーの皆さんマニュアルを出してくださ〜い
》
|
|
|
」
|
いやぁ、まいったなぁ。 ところで先生、あるアプリケーションでどういうスクリプティングができるか知る方法はないんでしょうか? |
|
先生
|
うーん、残念ながら今のところなさそうだね。と言うのは、各ソフトハウスがAppleScript対応とは言いながら、それぞれの製品のAppleScriptに関する詳細な情報を公表していないもんだからね。 |
|
」
|
ということは結局、辞書を見てやってみる以外にないんですね。 |
|
先生
|
そういうことになるね。例えばワープロでもソフトが違うと、同じ命令が動かないこともあるんだから。 EGWORDではWordPerfectで使える「end of ○○」という位置指定ができないし、オブジェクトの指定にかなり厳格さが要求される。また逆にWordPerfectでは、EGWORDで動作するduplicate命令がうまく動いてくれなかったりする。 |
|
」
|
なんだか多少不安感がありますけど。 |
|
先生
|
メーカーが詳細なマニュアルを出せば、スクリプトの作成は格段に容易になるはずなんだ。逆に、そうならないとせっかくのAppleScriptも砂上の楼閣で終わってしまう危険性がある。こういうことはアップルからサード・パーティーに呼びかけてくれないかなぁ。アップルはソフトハウスに対してはかなり積極的にAppleScript対応を呼びかけているようだけど、実際にAppleScirptを使うユーザーのことまで考えてほしいよね。 「対応ソフトが増えました」ってだけで喜んでるようじゃ、マックの行く末だって怪しいものになりかねない。 |
|
」
|
メーカーは、早くリファレンスを出してほしいですよね。 |
|
先生
|
ちょっと言いすぎちゃったかな。じゃぁ、また来月! |
AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp