一覧 
 
 
福井県立大学・経済学部 田中求之 (Motoyuki Tanaka)
最終更新日: 07年02月09日 16時05分

Matt Neuburg 氏の書いた AppleScript The Definitive Guide という優れた入門書がある。この本の第3章 The AppleScript Experience で、実際に AppleScript のスクリプトを書いて仕事をする過程を見せながら AppleScript ってこんなもんだよというのを紹介しているのだが、その章の最後に、これから AppleScript を学ぶ人へのアドバイスが書いてある。これが結構適確なアドバイスになっていると自分も思うので、超訳しておくことにする:

辞書を使おう(Use the dictionary)

スクリプトで制御可能なアプリケーション(a scriptable application)を動かそうとしたときにぶつかる最大の問題は、そのアプリケーションの「オブジェクト・モデル」を知らないということである。つまり、そのアプリケーションがどんなモノから成り立ってると自分を考えているか、そのアプリケーションは自分を構成しているモノをなんと呼ぶのか、それぞれのモノはどういう関係にあるのか、といったことを知らないということである。この意味で、名詞=モノの名(クラス)の方が、動詞=動作(イベント)よりも重要なのだ。大半のスクリプトで制御できるアプリケーションは、特にかなり突っ込んで強力に制御できるものは、数多くのモノの名前がって、それに比べると動作は少ない。この章で私が書いたスクリプトでは、ほとんどのことを、AppleScript に最初から組み込まれている動詞である get, set そして count で処理するスクリプトでやった(select も使ったけど、これはほとんど標準といってもいい)ということに注意してほしい。私が使わざるを得なかった普通ではない動詞は find だけだ。私は、スクリプトを書いている時の大半の時間を、名詞(アプリケーションを構成しているモノたち)について気を取られていた。AppleScript の最大の問題は、自分がスクリプトで話しかけたい(命令したい)モノに、アプリケーションが予想しており受け入れてくれるような方法で、どうやって指示を書くかということにあるのだ。

(*田中補足:アプリケーションをスクリプトで制御するということは、通常は、アプリケーションに命令(コマンド)を送ることだと考えがちだけど、AppleScriptの場合、どういう動作をさせるかということよりも、何を処理させるのか、つまり自分がやりたいことはアプリケーションにとっては「何」を処理することになるのか、を見抜くことがキモだということである。そのためには、辞書(Dictionary)に記載されているアプリケーションのオブジェクトモデル、つまりそのアプリケーションには、自己を含めた世界が、どのようなモノたち(と属性)がどのように構成されたものとして見えているのか、を理解することが重要ってことをいいたいようです。)

辞書に過大な期待は禁物(Don't expect too much from the dictionary)

どうやって自分が望む指示を組み立てればよいかを学ぶ他の方法を考えてみること。(この章で私が使った)Framemaker の辞書だけにたよってると、うまくいかないで行き詰まってしまう場合が幾度もあった。私は、Framemaker に自分が操作したいものの selection を実行させて、その結果として Frmemaker がそのモノをどのように述べるのか(記述するか)を調べる方が、辞書の情報を元に指示を書き上げるよりも、ずっとうまくいった。実際、技術的なことなので説明しているときには何も言わなかったけど、FrameMaker の辞書は、かなりの間違いがある。たとえば、私は、試行錯誤することで、アンカーフレームがパラグラフやドキュメントのエレメントになりうることを学んだけど、辞書にはこのことは全く載ってない。もし辞書に載ってたら、もっと簡単にスクリプトが書けたはずだ。

(*田中補足:Dictinary にすべてが正しく記載されているとは思うなということ。場合によっては、実際に小さなスクリプトを動かしてみてどうなるかを調べた方が、正しい方法を見つけられることがある。本当は、Scriptable application が Recordble だったら、Recording して、オブジェクトへの指示のし方なんかを学べるわけだけど(Finderはこの方法が有効)、そうでないものは、試行錯誤するしかない場合も少なからずある。)

枠にとらわれずに考えよう(Think outside the box)

FrameMaker は、ドキュメント内で作られた順にすべてのアンカーフレームを指示するための参照方法を私には簡単には私に明かそうとはしなかった。それでずいぶんとフラストレーションがたまったが、でも私は諦めなかった。別の方法について考えてみることにしたのだ。find コマンドは壊れているように思えたが、そのことは気にしなかった。そして、ついに、自分がひっかかっている問題に対処するために、選択するポイントを順に前へと動かしていく方法を見つけ出したわけだ。やっかいなことだなぁと感じる問題が、(必要なコマンドなどが)壊れてるとか、AppleScript あるいは自分がコントロールしようとしているアプリケーションでやるには突飛すぎるとか、そもそも不適切なことだったら、そういう問題に時間とエネルギーを無駄に吸い取られている限り、どんな結果も出せっこない。現実を認めて、別の穴でベルトを締め直すべきだ。

(*田中補足:うまくいく「はず」、できる「べき」ことが、実際にはうまく行かないということが時としてあったりする。そういうときには、正攻法にこだわらずに自分が望む結果をだせる他の方法、抜け道を考えた方がいいよ、ということだと思う。最後の tighten your bely another notch ってどういうことかよくわかんないけど。)