title1
navigation bar3



[ 1 | 2 | 3-p1 | 3-p2 | 3-p3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 ] [日経マック連載Index ]

《 ショート!ショート!スクリプト全集 》
先生
さて,君のすばらしい上達っていう成果もあったんで、スクリプト作成はここでおしまいにして、後は最初に言ったようなショート・スクリプトを見ながら質疑応答してみよう。
ってことは、僕は免許皆伝ですか?
先生
とりあえず、今日のところはねっ。さぁ、それでは第1番勝負。これはどういう意味かな?

 tell application "Finder" to get name
       of files in folder "漢字Talk 7.5:私のフォルダ"

あぁ、これは任せてください。「私のフォルダ」という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"
  select file "Home" of folder "HyperCard 2.2" of startup disk
  open selection
 end tell

これはもしやFinderから別のアプリケーションのファイルを直接起動しようっていうんじゃないですか?
先生
そう。これは「Home」というHyperCardのスタックをFinder上で選択して、その選ばれたもの、つまり「selection」を開く、ということなんだよ。
なるほど。確かに動きを見ると、最初にHomeというアイコンが白黒反転してから、HyperCardが起動しますね。ダブルクリックでファイルを開くのと同じだ。
TOP


《 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"
     to Move Value of Cell "r2c3" To Value of Cell "R5C3"

と命令すれば、今入った8という値は、R2C3からR5C3のセルに移動する。
あぁそうだ。ついでに言っておくけれど、セルを指定するRとCは大文字でも小文字でも構わないからね。

Excelにはマクロがあるけど、AppleScriptでも自動化できるんだ。
先生
そうだがAppleScriptの場合、ほかのアプリケーションからExcelを自動操縦できる、ってのが特筆物だ。
マクロじゃファイルメーカーProのデータをExcelのセルにsetする、なんてできないからね。

TOP

《 ファイルメーカーProからフィールド・データを得る 》
そのファイルメーカーProの例を見せてください。
先生

よしよし。では大場君と香奈子ちゃんという2人が入っている住所録というファイルがあるんだけれど、

 tell application "ファイルメーカー Pro" to get Cell "ふりがな"
        of every Record of Database "住所録" as string

というスクリプトを実行すると、その答えは?

"おおば かなこ"? ハッハッハ!
あれっ、でも先生。get命令で複数のデータを取り出すと、{}で囲まれるんじゃなかったですか?
先生
おや、よく気がついたね。黙っているとファイルメーカーProはフィールドをリストで返してくる。
だが最後に「as string」ってのがあるでしょ。これで取り出す値を文字列にしているわけなんだ。
う〜ん、奥が深いですね。

TOP

《 QuarkXPressの画像の倍率を変える 》
先生

それでは今度はQuarkXPressでの例を見せよう。

 tell application "QuarkXPress"
  activate
  set scale of image 1 of current box of document 1 to {200, 200}
 end tell

貼り付いている写真がちょっと大きくなりますね。
先生
current boxは選択されているボックス。その中に含まれる写真を縦横それぞれ200%に拡大したんだ。
この例は連載第1回目で出てきましたよね。あの時は何のことやらさっぱりでしたけど、今なら意味がバッチリと理解できます。


《 絶対に実行してはいけない(?)スクリプト 》
先生

よしよし。ではそれでは最後に、絶対やっちゃいけないスクリプトの例を見せてあげよう。

 tell application "Finder" to quit applications

先生、これはもしかして、一発で立ち上がってる全部のアプリケーションを終わらせるんですね。よし、動かしてみよっと。
先生
あっ、ちょっと待って。あぁぁあ、遅かったか。
先生、画面がフリーズしちゃいましたけど。
先生
そりゃそうだろう。Finderが自分も終わらしちゃうんだから。

TOP


《 メーカーの皆さんマニュアルを出してくださ〜い 》
いやぁ、まいったなぁ。
ところで先生、あるアプリケーションでどういうスクリプティングができるか知る方法はないんでしょうか?
先生
うーん、残念ながら今のところなさそうだね。と言うのは、各ソフトハウスがAppleScript対応とは言いながら、それぞれの製品のAppleScriptに関する詳細な情報を公表していないもんだからね。
ということは結局、辞書を見てやってみる以外にないんですね。
先生
そういうことになるね。例えばワープロでもソフトが違うと、同じ命令が動かないこともあるんだから。
EGWORDではWordPerfectで使える「end of ○○」という位置指定ができないし、オブジェクトの指定にかなり厳格さが要求される。また逆にWordPerfectでは、EGWORDで動作するduplicate命令がうまく動いてくれなかったりする。
なんだか多少不安感がありますけど。
先生
メーカーが詳細なマニュアルを出せば、スクリプトの作成は格段に容易になるはずなんだ。逆に、そうならないとせっかくのAppleScriptも砂上の楼閣で終わってしまう危険性がある。こういうことはアップルからサード・パーティーに呼びかけてくれないかなぁ。アップルはソフトハウスに対してはかなり積極的にAppleScript対応を呼びかけているようだけど、実際にAppleScirptを使うユーザーのことまで考えてほしいよね。
「対応ソフトが増えました」ってだけで喜んでるようじゃ、マックの行く末だって怪しいものになりかねない。
メーカーは、早くリファレンスを出してほしいですよね。
先生
ちょっと言いすぎちゃったかな。じゃぁ、また来月!

TOP

AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp

主催 株式会社フォーサイト   後援 アップルコンピュータ株式会社

(c)1996-2010 The ForeSight Inc. All rights reserved.Appleは、米国アップルコンピュータ社の登録商標です。
AppleScriptは、米国アップルコンピュータ社の商標です。
その他記載の会社名・製品名・ソフトウェア名は一般にその会社の登録商標または商標です。