オブジェクトと属性
オブジェクトってなに?
オブジェクト(object)は、日本語で「物(もしくは部品)」という意味です。またオブジェクトには「目的語」という意味もあります。
AppleScriptの命令を動詞に見立てると、オブジェクトは目的語になる名詞と言えます。
つまり「何をどうする」の「何」の部分がオブジェクトです。
AppleScriptでのオブジェクトの指定方法は、様々なものがあります。その中で最もよく使われる書式が、名前によるものです。
オブジェクトの種類 名前(name)
「名前(name)」の部分は文字列なので、「AppleScript Editor」の入力欄に実際にスクリプトを入力する場合は、「名前」の部分をダブルクォーテーションで囲んで表します。例えば、次のようになります。
file "sample.txt"
また、番号を使った書式もよく使います。
オブジェクトの種類 番号(index)
例えば、次のように表記します。
folder 1
通常オブジェクトは番号と名前を持っていますが、例外もあります。例えば、テキストファイルに含まれる文字列には番号だけが付けられており、名前がありません。しかし、番号でも名前でも扱えないオブジェクトは、まずありませんから、とりあえずこの2つの書式を覚えておけば、たいていのオブジェクトを扱えます。

オブジェクトを集めてソフトはできています
ちなみに、オブジェクトを図に書くときは、立方体が使われる事が多いので、本書でもこの慣習に従いました。
REALbasicのアイコンなどは、まさにこの形をしています。
コンテナオブジェクト
さて、前回にも登場した「参照(reference)」とは、オブジェクトの位置を示す住所と言えます。フォルダの中にファイルがあるように、オブジェクトはほかのオブジェクトに含まれている場合があります。フォルダのようにオブジェクトを含んでいオブジェクトを「コンテナオブジェクト(container object)」と言います。また、コンテナオブジェクトに含まれているオブジェクトを「要素(element)」といいます。
オブジェクトに含まれるオブジェクトへの「参照」を書くには、「of」を使います。「ワーゲンという車のエンジンの第2プラグ」という文章をAppleScriptの参照風にすると、次のように表現できます。
プラグ 2 of エンジン 1 of 車 "ワーゲン"
Finderのオブジェクトの場合は、ファイルを指定した状態で[編集]-[コピー]を選択したあと、「AppleScript Editor」の[編集]-[参照のペースト]を実行(注1)すると、参照をスクリプト入力欄に表示できます。参照の書き方の参考にするといいでしょう。
階層が深いファイルを参照したい場合は、「of」で区切るのは面倒なうえ、スクリプトが読みにくくなってしまいます。
tell application "Finder"
file 1 of folder 1 of disk 1
end tell
この場合は、「tell」を使って基準となる参照を設定すればすっきりと表現できます。特に何度も同じファイル指定する場合に有効です。
tell application "Finder"
tell folder 1 of disk 1
file 1
end tell
end tell
このスクリプトでは、1行目の「tell application "Finder"」で参照する範囲をFinderに限定し、2行目の「tell folder 1 of disk 1」で1番目のボリュームの1番目のフォルダというふうにさらに範囲を絞り込んでいます。これで3行目の「file 1」は、「Finderにある1番目のボリュームの1番目のフォルダの中の1番目のファイル」ということになります。

Applicationコンテナの中にオブジェクトが存在します
(注1) [コピー]-[参照のペースト]の処理は、Mac OS 8.5以降で利用できます。
Mac OS X10.2では、バグで動きません。
属性ってなに?
現実にある「物」には、高さや重さ、色などのさまざまな性質を持っています。Macで扱うオブジェクトも同様で、ファイルサイズや名前、作成日時などの性質があります。AppleScriptでは、これらの性質を属性(property)と呼びます。属性はオブジェクトに固有で削除できません。属性は、次のような形で表します。
属性 of オブジェクトへの参照
また、属性を変更するには、set命令を使って次のように書きます。
set 属性 of オブジェクトへの参照 to 変更後の値
ただし、属性の中には「size(ファイルサイズ)」や「creation date(作成日)」などの値を変更できない項目があります。このような属性は、各用語説明の末尾に、読み出し専用(read only)という意味の[r/o]が記されています。
では、Finderの用語説明で「Finder items(一般的項目)」に分類されている「item」の属性を紹介しておきます。これらの属性は、Macのデスクトップ上にあるフォルダ(folder)や書類(file)が備えている情報です。例えば、「home」フォルダ(注1)にある"test.txt"というファイルの、コメント(comment)を変更するには次のように書きます。
tell application "Finder"
set comment of item "test.txt" of home to "変更しました"
end tell
「TextEdit」などの適当なアプリケーションを使って、"test.txt"というファイルを作って"home"フォルダに保存しておき、スクリプトを実行してみましょう。
スクリプトを実行したら、「Finder」の[ファイル]-[情報を見る]を選択し、コメントが"変更しました"に変わっていることが確認できます。
次に書類(file)が持つ属性を使ってみましょう。ファイルタイプを調べるには、次のように書きます。
tell application "Finder"
file type of item "test.txt" of home
end tell
結果ウィンドウにはファイルタイプが表示されます。ファイルタイプは四文字の文字列です。例えば、テキストファイルならば"TEXT"という文字列になります。
Mac OS Xではファイルタイプが設定されないことも多いので、その場合はmissing valueという結果が返ってきます。missing valueはダブルクォートで囲まれていませんから、文字列ではありません、注意して下さい。

日付け属性は紀元前?
(注1) 旧Mac OSにはhomeフォルダは存在しませんので、適当なフォルダに置き換えて読んで下さい。
windowを使ってみよう
またウィンドウ(window)が備える属性を使えばウィンドウの移動や形状の変更を行えます。一番手前にあるウィンドウを画面の左上に表示にするには、次のように書きます(注1)。
tell application "Finder"
set position of front window to {0, 44}
end tell
アプリケーション(application)そのものもオブジェクトの1つです。当然のことながら属性を備えています。では、アプリケーションの属性を使ってみましょう。次のスクリプトは、「Finder」を非表示に切り替えます。
tell application "Finder"
set visible to false
end tell
すでに「tell」で命令する範囲(ここでは、 application "Finder")を決めているので、2行目の「set visible to false」の前に「visible of application "Finder"」と記述する必要はありません。
このように属性には多くの種類があります。詳しくは「Finder用語辞書」を参照してください。旧Mac OSとMac OS Xでは、「Finder」の用語にかなりの違いが見られるので、それぞれ「Finder用語辞書」「FinderX用語辞書」として分けてあります。利用する環境にあった方を参照して下さい。Mac OS XのFinderについては、現在製作中です。
次に、テキストエディタ「QuoEdit」(注2)を使って、アプリケーションの属性を紹介していきます。QuoEditの「application」の属性はFinderとよく似ており、「name」「frontmost」「version」「selection」——などを用意しています。言い換えれば、これらの属性は多くのアプリケーションに共通するものです。
QuoEditの「window」オブジェクトは、ウィンドウそのものを操作する場合に使用します。また「document」オブジェクトは、ウィンドウに含まれる文書を操作する場合に使います。テキストエディタなどでは、「window」と「document」は同じオブジェクトとして扱われることが多いですが、ウィンドウを扱う場合と文書を扱う場合を意識して、両者を使い分けるほうがいいでしょう。
次のスクリプトは、QuoEditで開いた一番手前のウィンドウのサイズを300×400ピクセルに変更してみます。
tell application "QuoEdit"
set bounds size of front window to {300, 400}
end tell

日当たり属性良好ですわ
(注1) マウス操作では置けない場所にウィンドウを動かすこともできます。その場合、一旦ウィンドウを閉じたりしまったりすれば、タイトルバーがきちんと表示される位置に移動します。もちろん、AppleScriptで元に戻してもかまいません。
(注2) Mac OS Xには「TextEdit」というテキストエディタが付属していて、スクリプト対応ですが、あまり対応度は高くありません。ちなみに、Mac OS X10.2以降は日本語環境で「テキストエディット」と表記されます。
また、旧Mac OSで標準のテキストエディタである「SimpleText」はスクリプト対応アプリケーションではありません。
そこで「QuoEdit」というシェアウェアのエディタを利用します。
オブジェクトの内容
テキストエディタの場合は、現在選択しているものを表す「selection」属性を使う事が多いでしょう。
tell application "QuoEdit"
selection
end tell
現在の選択範囲への参照を結果ウィンドウに表示します。参照が表すオブジェクトの内容は「contents」属性で取り出せます。
contents of 参照
例えば、次のスクリプトは文字列を結果ウィンドウに表示します。
tell application "QuoEdit"
contents of selection
end tell
AppleScriptでは、「参照」で表したオブジェクトの内容が必要な場合は自動的に「contents of」があるものとして処理します。また「参照」そのものが必要な場合は、そのまま参照として処理します。次のスクリプトは、選択範囲を「【」と「】」でくくります。
tell application "QuoEdit"
set selection to "【" & selection & "】"
end tell
このスクリプトでは、「to」の後の「selection」は文字列と「&」で連結されているので、AppleScriptはオブジェクトの内容が必要だと判断し、参照が示す文字列を取り出し→その前後に文字列の「【」と「】」を「&」を使って連結→「to」の前の「selection」が示す参照に設定——という処理を行います。もちろん「to」の後の「selection」を「contents of selection」と書くのが正式な書き方ですから、AppleScriptの判断に任せず、省略しない方が望ましい書き方と言えます。

オブジェクトは内容を持っていることが多いのです
文字オブジェクト
さて、「character」「word」「paragraph」の3つの単語を覚えているでしょうか? これらは第3回の「Macも計算機なんだし」で、「文字列」を扱う単語として紹介しました。ここでの使い方もほぼ同じで、値の部分に文字列の代わりにオブジェクトへの「参照」を書くだけです。例えば文字列の場合は次のように。
word 2 of "test text"
オブジェクトへの参照の場合は、次のようになります。
tell application "QuoEdit"
word 2 of document 1
end tell
書式はほとんど一緒ですね。ただし、文字列は値なのでオブジェクトへの参照と同じ文字を扱う場合でもアプリケーションに依存しません。つまり「tell」ブロックの中でも外でも使えます。しかし、オブジェクトへの参照はアプリケーションに依存するため、必ず「tell application〜」のブロックの中で使わなければなりません。
「document」と同様に「character」「word」「paragraph」などもQuoEditのオブジェクトですが、これに加えて「byte」と「line」という便利なオブジェクトもあります。「byte」は文字をバイト単位で数えるオブジェクトです。1文字を1として換算する「character」とは異なり、「byte」では英字コード(半角文字)は1文字が1で、日本語コード(全角文字)は1文字が2となります。
「line」はウィンドウに表示される行を扱うオブジェクトです。改行までを1単位とする「paragraph」とは異なり、「line」はウィンドウサイズを拡大/縮小して1行の文字数が変わった場合、指定した行の内容が異なった文字列になります。
では、「byte」「line」を使って、文書中の文字を選択するスクリプトを作ってみましょう。
tell application "QuoEdit"
select text from byte 5 to line 10 of document 1
end tell
このように文字を選択する場合は「select」命令を使います。「AppleScript Editor」の記録機能を有効にして、QuoEditを操作した場合に自動作成されるスクリプトを見るとよく分かるでしょう。
命令とオブジェクトの使い方が分れば、記録機能を使って作成したスクリプトはほぼ理解できます。ですが、AppleScriptが持っているのは、記録して再生するだけの機能ではありません。次回からは記録機能だけでは作れないスクリプトを作っていきます。

どんどん書いて下さいね
【今回のまとめ】
オブジェクトは、
参照は、
- オブジェクトの住所
- オブジェクト同士を「of」でつないで書く
- 「tell」で基準オブジェクトを変更
属性は、
2002-10-09
2002-11-01
2012-02-13