title1
navigation bar3



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

  いくら実践主義とは言え、本連載はあまりに基本をやらなさ過ぎた…というわけではないが、ちょっと視点を変えて基礎を知っておくことは必要だ。

  さりげなく使っているコマンドだが大きく4種類に分類される。
repeatやifは処理の流れを制御するステートメントでいろいろなバリエーションがある。実はAppleScriptは日本語でも書けた、なんて衝撃的な事実も。



連載[6-1] 今日はちょっと教科書的にお勉強


AppleScriptのコマンドを整理してみる
AppleScriptコマンド
Applicationコマンド
Scripting Additionコマンド
ユーザ定義コマンド
tellやrepeatはステートメント
変数名は複合語にするのが無難
実は日本語でスクリプトが書ける
途中結果を確認するには
ファイルの名前を表示しようとするとエラーに
実行中に文字を入力したい
応用編

《 AppleScriptのコマンドを整理してみる 》
先生
今日は、君も特別なタスクフォースがないようだから、これまで使ったものを含めて、AppleScriptの機能やコマンドを整理してみようかな
あっ、それって助かります。僕も実務的にはAppleScriptをかなり理解したつもりですが、いざとなるとどうも知識が体系的にまとまってなくて困っていたんです。
先生
では何から行こうか。
よく分らないのがコマンドです。choose folderとかCreate New Recordとか今までたくさんのコマンドが出て来ましたが、これらがうまく整理できないんです。一体全体、AppleScriptにはどんなコマンドがあるんですか。
先生
いや、これが一杯あるんだね。だから良くも悪くも大変なんだ。まぁ、どうせ一度には覚え切れないから、覚えなくてもいいよ。でも、コマンドには次の4種類があることだけは覚えておいてほしいね。  AppleScriptコマンド
 Applicationコマンド
 Scripting Additionコマンド
 ユーザ定義コマンド じゃ、それぞれについてもう少し詳しく説明しよう。ちょっと教科書的になるけれども、今回は途中で寝ないでくれよ。
はいっ。


《 AppleScriptコマンド 》
先生
AppleScriptコマンドは、AppleScriptのシステム自身によって取り扱われるコマンドで、次の6つがある。
アプリケーションの「用語説明」には出てこないから、まあ、この6つはいちおう覚えておかないとね。
 copy 値のコピー
 get 式の評価
 count 要素の数え上げ
 run スクリプトの実行
 error エラーの対処
 set 変数への値の設定
「AppleScriptのシステム自身が取り扱う」というのは、どういうことですか。
先生
これらのコマンドは、「tell ××」などとアプリケーションを指定しなくても使うことができるんだよ。最も基本的なコマンドだね。
TOP


《 Applicationコマンド 》
Applicationコマンドって言うのは、例えばファイルメーカーProで新規レコードを作成するようなコマンドですね。確かこんな感じだったかなぁ。

 Create New Record With Data
      {"日経 太郎", "(03)0210-8531"}

先生
そう、Create NewはファイルメーカーProのApplicationコマンドだ。
こうしたApplicationコマンドはそれぞれのアプリケーションに伝えられ、アプリケーションがそれを取り扱うので、使う時は明示的にどのアプリケーションかを指定する必要がある。

例の

 tell application アプリケーション名
  (そのアプリケーションのコマンド)
 end tell


ってやつですね。

先生
そう、tellステートメントだ。tell 〜 end tellの中にコマンドは複数だろうが何行にわたろうが、いくつでも書けるんだが、Applicationコマンドは、tellステートメントの中でだけでしか使えないから注意する必要がある。例えば

 tell application "Finder"
  :
 end tell

でサンドイッチにするのを忘れて、単に

 delete file 1 of disk "HardDisk500"
 ("HardDisk500"の1番目のファイルを削除する)

なんて書いてもエラーになってしまうからね。

あっ、たまにこのエラーに遭遇します。
先生
どんなアプリケーションを対象とするかによって、実行できるApplicationコマンドが決まる。他人の書いたスクリプトを見ると、tellの中に見慣れないコマンドがたくさんあってビックリするだろう。
はいっ。
先生
でも何とかなるもんだ。何しろApplicationコマンドについては、そのアプリケーションの辞書(用語説明)に書いてあるから、一見難しそうでも丹念に辞書を見ていけば理解できるんだよ。
スクリプト編集プログラムで「用語説明を開く」メニューで目的のアプリケーションを選ぶんでしたね。
複数のアプリケーションで共通なコマンドもありますよねぇ。
先生
標準的なコマンドとしては,

 make 対象の新規作成
 move 対象の位置変更
 open ファイルのオープン

 print 対象のプリンター出力
 delete 対象の削除

なーんてほとんど英語の一般動詞のようなものがたくさんある。ただしアプリケーションによって実行できるコマンドは違うし、使い方も若干違ったりする。同じコマンドでも実行する内容が異なることもあるから注意しよう。

TOP

《 Scripting Additionコマンド 》
ところで先生、今まで使ってきたコマンドで

 choose file
 choose folder

なんてのがありましたけど、これはAppleScriptコマンドじゃないんですか。 FinderやファイルメーカーProの辞書を見ても、こんなの見つかりませんから、Applicationコマンドでもないんでしょう。

先生
これらはScripting Additionコマンドという種類のものだ。
機能拡張フォルダの中にある「スクリプティング機能追加 」(Scripting Additions) フォルダの中に、ファイルとして格納されているんだ。
「スクリプティング機能追加」と言うからには、機能やコマンドを追加拡張するんですか。
先生
そう、こうしたファイルによって、AppleScriptコマンドに新しいものが追加されるんだ。ただし、ファイルではなくてAppleScript機能拡張モジュール内に納められているコマンドもある。activateなどがそうだがね。
どんなコマンドが追加されているのか知る手立てはないんでしょうか。
先生
辞書で確認できるよ。アプリケーションと同様に、スクリプティング機能追加のファイルもその用語説明を開くことができる。1つのファイルの中に1つか複数のコマンドが納められているのが普通だ。
確かに、「ファイルを選ぶ」というスクリプティング機能追加ファイルの用語説明に
、choose fileやchoose folder がありますね。
先生
このほかによく使うコマンドには、こんなものがあるね。

  activate アプリケーションを前面に
  beep ビープ音を鳴らす
  choose application アプリケーションの選択
  choose file ファイルの選択

  choose folder フォルダの選択
  current date 現在の日時を取り出す
  display dialog ユーザーとのやり取り
  info for ファイルやフォルダの情報を得る

ま、ほかにもあるけど、その大部分はほとんど使わないから、こんなものでいいだろう。
覚えすぎは頭でっかちでよくないよ。記憶力より人生は体験が重要だ。

TOP

《 ユーザ定義コマンド 》
先生、先ほどおっしゃったコマンドの種類に、「ユーザ定義コマンド」というのがありましたが、これは何なのでしょうか
先生
要するにサブルーチンさ。前回説明しただろう。

 on average(x,y,z)
  return (x+y+z)/3
 end average


なんて風にサブルーチンを書いておくと、

 average(10,20,30)

なんて、あたかもコマンドであるかのようにそれを呼び出せるわけだ。



《 tellやrepeatはステートメント 》
コマンドについては分かりましたが、tellとかifとかあるいはrepeatとかは何なんですか。
コマンドじゃありませんよね。
先生
これらは処理の流れを制御するステートメントなんだ。今まで出てきたのは、

 tell 〜 end tell
 if 〜 else 〜 end if
 repeat 〜 end repeat
 try 〜 on error 〜 end try

なんてのがあったね。

repeatはさらに、

 repeat with 変数 in リスト 〜 end repeat
 repeat while 条件 〜 end repeat

とかいろいろな書き方がありましたよね。

先生
そうそう、ほかにも、
 repeat until 条件 〜 end repeat
 (条件が成立したら繰り返しをやめる)
 repeat with 変数 from 初期値 to 最終値 by ステップ〜 end repeat
 (変数を初期値から最終値までステップずつ変化させる)

なんていうのもある。あるいは繰り返し条件を冒頭で指定せずに、

 repeat
   :
  if 条件 then exit repeat
 end repeat

というように、内部で条件を判断してexit repeatステートメントで繰り返しを抜ける方法もあるんだ。

ほかにはどんなものがあるんですか。
先生
処理に時間がかかる時に、一定時間で打ち切るためのwith timeoutとか、大文字/小文字を区別するconsideringとかがあるけど、滅多に使うもんじゃないね。

TOP

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

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

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