|
《 出来上がった文字列をファイル名にsetc
》
|
|
|
先生
|
そうか。それが完全であることを望むがね、私は。さて残るはだねぇ、たったの2行しかない。ここまで来れば君にも黙っていたって分かりそうな、 set (name of aFile) to aNewFileName だ。 |
|
」
|
これは「変数aNewFileNameに入っている値をaFileのファイルの名前にしろ」っていうことですよねっ。ファイルの名前を付け替えるわけだ。これでaFileの名前は営業1部のと同じ構成になりますね。なるほど,分かった。aFileはすべてのファイルについて繰り返すから、最終的には全部のファイルの名前が変わるんですね。 |
|
先生
|
その通り。 |
|
《
ちょっとしたメモをコメント文で
》
|
|
|
」
|
でもその後の、 --display dialog
"ファイルの名前は" & aNewFileName & "です" はどうなるんです? |
|
先生
|
あぁ、それはねぇ、ほらHyperTalkにもあったでしょ。いわゆるコメントなんだ。スクリプト自体とは関係がないけど、スクリプトを説明するための解説文ってとこかな。 |
|
」
|
なぁるほど、そういった説明を入れるときにはAppleScriptでも、この「--」を頭に入れるわけですね?それで分かりました。でもこの説明文は、文章っていうよりなんだかスクリプトみたいですね。 |
|
先生
|
ほう、そこまで分かるようになったか。実はこれはもともとスクリプトとして書いたものなんだよ。だから、頭の「--」を消してしまっても、このスクリプトはちゃんと動くようになっている。見ていてごらん。 |
![]() |
|
|
」
|
本当だっ、でも何やらダイアログが出ましたね。 |
|
先生
|
これはね、付け替えたファイル名がそれでいいかどうかを確認するために、念のために書いた1行だったんだ。でも仮に何千個もあるファイルの名前を変える時には煩わしい思ったから、取り合えずコメントに変更しておいたというわけさ。 |
|
」
|
なるほど、分かりました。ありがとうございました、先生。 |
|
先生
|
これでいいだろ、後はこのスクリプトを本部長に見せてしっかり誉めてもらうんだな。 |
|
《
なぜ人間の言葉をソフトが理解できる?
》
|
|
|
」
|
ところで先生、分からない点が1つあるんです。 「name of aFile」とか「every file of aFolder」とか「××の△△」って表現がたくさん出てきましたよね。 まるで人間の言葉みたいなんですが、どうしてFinderにこんな命令を伝えられるんですか? 「変数aFileの名前」なんて、なぜFinderが理解できるんでしょう。いや、そもそもaFileなんて変数には何が入っているんですか? ファイルの名前なんですか? |
|
先生
|
なかなかいいところに気がついた。aFileにはfileというオブジェクトの「参照(reference)」が格納される。 前に説明した「alias pathname」というのも、この「参照」の一種なんだよ。 |
|
」
|
オブジェクト? 参照? うぅっ、めまいが…。 |
|
先生
|
実はAppleScriptは「オブジェクト指向」なんだ。フォルダもファイルも、それにもちろんアプリケーションなんかも、AppleScriptでは「オブジェクト」として扱う。オブジェクトの種類は「クラス(class)」として定義されているんだが、それぞれのクラスは,要素(element)と属性(property)を持っている。例えばFinderでは「folder」というクラスが定義されていて、folderは「file」といった要素と「name」などの属性を持っていて、えー…。 |
|
」
|
??? |
|
先生
|
おっと、深みにはまってしまった。これを理解するにはAppleScriptの仕組みから説明しないとね。 |
|
」
|
けっ結構です。とりあえず今回作っていただいたスクリプトの意味だけ分かれば十分です |
|
《
画像やフィールドも操作できる
》
|
|
|
先生
|
だが1つだけ覚えておいてほしいのは、我々ユーザーが日常的に目にするデータ、例えばファイルやフォルダなどが、AppleScriptではアプリケーションが理解できる用語として厳密に定義されていることだ。しかも「フォルダがファイルを含む」とか「フォルダには名前がある」とかの情報も、きちんとしたルールに則ってしっかり決められている。だから人間の言葉に近いスクリプトをプログラムが理解できるんだね。例えばFinderは「name of every disk(すべてのディスクの名前)」という文は理解できるが「name of every hard disk」とか「price of every disk」ではエラーになってしまう。 |
|
」
|
diskはいいがhard diskはダメ、ディスクの値段(price)は取ってこれないってことですね。でも先生、根本的な疑問なんですが、どんな単語を使ってよくて、何がダメなんですか。 |
|
先生
|
実は用語に関するルールは、アプリケーションによって千差万別なんだ。repeatとかofとか基本的な単語は共通なんだが、fileとかfolderとかはFinder固有の単語になっている。 |
|
」
|
Finder以外のアプリケーションだったら? |
|
先生
|
例えば「ファイルメーカーPro 2.1J」のフィールドなら、 |
![]() |
|
| Cell "電話番号" of record
1 of database "住所録" ってな具合さ。 「QuarkXPress 3.3J」の画像の倍率なら、scale of image 3 of page 2 of document "DTP書類" といった感じになる。 図4その1を見てごらん。こうしたルールさえ覚えてしまえば、意外と簡単にアプリケーションを自動操縦できるんだよ。用語に関するルールは「辞書」としてアプリケーションに内蔵されていて…と、そこまで君には関係ないか。 |
|
|
図4 Finder以外の例 -その1- ![]() |
|
| 「ファイルメーカーPro 2.1J」にtellして、"Schedule"というデータベースの7番目のレコードの"Title"というフィールドの値を、xという変数に格納させた。xはスクリプトの中で自由に使える変数だから、Finderに命令してあるファイルの名前をxにしたり、Microsoft Excelのワークシートのセルにxを入力するなど、この後の使い方は自由自在だ。 | |
![]() |
|
| 「QuarkXPress 3.11J」にtellして、1番目の書類の2ページ目にある1番目の画像の倍率を、縦203.6%、横196.6%にsetした。 「repeat文を使えば複数の画像をまとめて処理できるのでは」と気がついたなら、スクリプティングのセンスはなかなかのもの。 |
|
|
《
ファイル名を変えるなど氷山の一角
》
|
|
|
」
|
いえいえ、ちょっと興味が沸いてきました。もし、もしですよ、データベースとか画像処理ソフトとかを自由に操るスクリプトが作れたらすごいじゃありませんか。例えば図4その2の「set scale of image 1 of page 2 of document 1 to {"203.6%","196.6%"}」っていうスクリプトは、画像の倍率を変えているわけでしょう。この例は単純ですけど、先ほど教えていただいた「repeat」とかの構文を使えば、複数の画像をまとめて処理することもできるんじゃないですか。例えば何百枚もの画像データをまとめて加工するとか、データベースでやっている定型業務を自動化するとか…、何だか期待が膨らんできました。 |
|
先生
|
実はもう、たいていのことは可能になっているんだ。 「QuarkXPress」も今度のバージョンではAppleScript対応になったし「ORACLE」や「Sybase」といったSQLサーバーね、そういったものへAppleScriptを使ってアクセスして、結果をファイルメーカやExcelで自由に加工することなんて朝飯前さ。 |
|
」
|
うわぁー、もうみんなそんなことまでやってるんですか? |
|
先生
|
いやいや、まだみんながそこまでAppleScriptを利用しているわけでもないがね。やろうと思えば大した問題じゃないってことだな。 もっと言えば、例えば「ファイルメーカーPro」の現金出納帳の1行ごとの残高を計算してExcelにグラフを作らせる、なんていう離れ業もできる。 |
|
」
|
すごいですねぇ。 |
|
先生
|
そんなことで驚いてちゃいけない。 これもいずれ見せてあげてもいいが、特殊なユーティリティーを使うことで「Photoshop」だとか「マックライト」とか、AppleScriptに対応していないアプリケーションさえもAppleScriptから制御することだって不可能ではないんだ。 |
|
」
|
先生、そこまで来ると唖然というか茫然自失というか、もう感激のしようもありません。 |
|
先生
|
君もようやくスクリプティングの秘めたる可能性に気づいたようだね。真面目に勉強すれば、君が今までできなかったことや、すごく面倒くさい単純作業の繰り返しをスクリプティングでこなせるかもしれない。今日はAppleScriptのサワリだけ説明したんだが、やる気があるなら毎月私の研究室に来なさい。 |
|
」
|
よろしくお願いします。 |
|
先生
|
よし、では次回は、どうして「name of aFile」でファイルの名前が取ってこれるのか、クラスやほかの用語について説明しよう。 |
AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp