AppleScriptスクリプティング基本編

実際にAppleScriptを使ってMacOS 9用アプリケーションを作ってみます。
細かい説明よりも、実際に使えるものを作ってみるのが一番早く理解できるかと思います(私はそうでした)。
 必要なもの
AppleScript:機能拡張フォルダに入っているはず。--AppleScriptを動かすために必須。
スクリプティング機能追加:システムフォルダにあるはず。--AppleScriptの基本機能にない機能を追加するためのファイル(OSAX)が入っている。
スクリプト編集プログラム:Apple エクストラにあるはず。--スクリプトの編集、実行を行う専用エディタ。
 上記は普通にシステムをインストールしていれば組み込まれているはずです。

 では、OS 9上でクリエータの変更を行うアプリケーションを作ってみたいと思います(OS Xではタイプ/クリエータではなく、拡張子によってファイルの種類とアプリケーションを決めています)。

次のような順を追って作っていきましょう。
 【1-1】対象を得る
 【1-2】情報を得る
 【1-3】情報を書き換える
 【2-1】アプリケーションにする
 【2-2】インターフェイスを付ける


【1-1】対象を得る
まず、スクリプト編集プログラムを起動します。ウィンドウの上下に入力可能な領域が表示されますが、下の方がスクリプトを記述する所で、上はコメントを書き込めるようになっています。
下の領域に、
tell application "Finder"
  item 1 of selection
end tell
と書いて「構文確認」ボタンを押して下さい。記述に誤りがなければ「編集」メニューの「書式...」に従って、文章が整形されるはずです。
次に、Finder上で何かのファイルを選択状態にして下さい。
そのまま、他のファイルやフォルダをクリックすることなく、編集プログラムのウィンドウに戻って下さい(アプリケーションメニューで選択、cmd+tab、編集ウィンドウをクリック等)
編集ウィンドウの「実行」ボタンを押して下さい。
"結果"ウィンドウに、選択したファイルが「file "〜" of application "Finder"」として表示されればOKです。

〈説明〉
tellend tell:命令を送る対象を指定する -- ここではFinderというアプリケーションに命令を送っている。
 アプリケーション名はダブルクォーテーションで囲む
・selection:Finder上で選択されているもの
・item 1:項目の1番目 -- selectionで得られたファイルの1番目だけを指定している。

【1-2】情報を得る
次に、スクリプトを下のように書き換えて下さい。
tell application "Finder"
  creator type of item 1 of selection
end tell
先程と同様に、ファイルを選択して「実行」を押して下さい。
"結果"ウィンドウに4文字の英数字が表示されるはずです。それが選択したファイルのクリエータです。
SimpleTextなら"ttxt"、Photoshopなら"8BIM"、iTunesなら"hook"といった具合です。

〈説明〉
・creator type:クリエータ -- ファイルタイプの場合は file type 。
  他の情報も得られる -- name:名前、modification date:修正日、comment:コメント、等

〈用語〉
1-1で得られた対象を「オブジェクト」(の参照)と呼び、オブジェクトの持つ性質(creator type等)を「属性」と呼ぶ。

【1-3】情報を書き換える
さらにスクリプトを書き換えます。
2行目の **** は書き換えたいクリエータコードを入力して下さい(必ず半角で)。
テキストファイルなら"ttxt"、"iTxt"、"JED4"、"MSIE"、"MOSS" 等、
グラフィックファイルなら"ogle"、"8BIM"、"GKON" 等、
サウンドファイルなら"TVOD"、"hook"、"SCPL" 等、
tell application "Finder"
  set creator type of item 1 of selection to "****"
end tell
クリエータを書き換えたいファイルを選択して「実行」して下さい(実験用として、コピーしたファイルを使用した方が良いかもしれません)。
"結果"ウィンドウには何も表示されませんが、ファイルのアイコンが書き換えたクリエータのものに変わっていれば成功です。
あなたが持っていないアプリケーションのクリエータを指定した場合や、指定したアプリケーションがそのファイルを開けない場合などは白紙アイコンになってしまうので注意して下さい。

〈説明〉
set△△to××:△△に××の値を代入する -- ここでは選択ファイルのクリエータに"****"を代入している。

【2-1】アプリケーションにする
一応クリエータを書き換えることができるようになりましたが、このままでは使い難いので、ファイルをドロップして使うことのできるアプリケーションにします。
3行目の **** は書き換えたいクリエータコードを入力して下さい。
on open obj
  tell application "Finder"
    set creator type of item 1 of obj to "****"
  end tell
end
「構文確認」後、「ファイル」メニューから「別名で保存...」を選択して下さい。
表示された保存ダイアログで保存先やファイル名は任意のものでかまいませんが、保存フォーマットを「アプリケーション」(またはclassicアプリケーション)にし、「初期画面を表示しない」にチェックを入れて [保存] して下さい。
保存先として指定した場所にファイルができたはずです。
できたアプリケーションに、ファイルをドロップして下さい。クリエータが書き換わるはずです。

〈説明〉
・on open 〜:ドロップしたファイルを〜に代入する。
・obj:変数 -- スクリプト中の様々なデータを保存しておく領域。任意の名称を付けられる(objでなくても良い)。

〈用語〉
on 〜 end から成る一連の命令の書かれた部分を「ハンドラ」と言い、on openを含むスクリプトはドロップされたファイルを扱えるようになる。こうして作られた、ドロップ可能なアップルスクリプトアプリケーションは、通称「ドロップレット」と呼ばれる。openハンドラを持たずに作られたアップルスクリプトアプリケーションは「アプレット」と呼ぶ。
なお、1-1では「on run 〜 end run」と言うrunハンドラが省略されている(runハンドラに限って省略可能)。

【2-2】インターフェイスを付ける
このままでは保存時に設定したクリエータにしか書き換えられません。そこで、ファイルをドロップした後でダイアログを表示し、書き換えたいクリエータを入力できるようにします。
on open obj
  set creatorData to text returned of (display dialog "creator?" default answer "")
  tell application "Finder"
    set creator type of item 1 of obj to creatorData
  end tell
end open
先ほどのドロップレットに上書き保存しても、別名で保存してもかまいません。
できたドロップレットにファイルをドロップして下さい。ダイアログが表示されるはずなので、クリエータコードを入力して(半角4文字)、OKを押して下さい。クリエータが書き換わるはずです。

〈説明〉
・display dialog "〜":"〜"と書かれたダイアログを表示(括弧に入れているのは命令の順序を明確にするため)。
 ・default answer "〜":ダイアログにテキスト入力欄を付ける -- デフォルトの文字が"〜"になる。
 ・text returned:入力されたテキスト -- 押されたボタンをbutton returnedで得ることもできる。
・creatorData:変数 -- text returnedで得られたテキストデータ(ここではクリエータコード)を収めている。
  補足:「display dialog」が「tell application "Finder"〜end tell」の外に書かれているのは、display dialog命令が標準機能追加(OSAX)のものであり、Finderへ命令を送らなくても良いからです(tell〜end tellの中に書いてもかまいません)

おまけ
 クリエータを調べるドロップレット
on open obj
  tell application "Finder" to display dialog (creator type of item 1 of obj)
end open
アプリケーション形式で保存して、できたドロップレットにアプリケーションをドロップして下さい。


 アップルスクリプトによるプログラミングはこんな感じです。多分この程度なら誰にでもできるのではないでしょうか?。せっかくApple純正のプログラミングツールが標準で付いているのですから、使わないのはもったいないと思います。
 なお、上記のスクリプトですが、さらに「複数ファイルを対象にする(repeatを使う)」「エラー処理を加える(if〜やtry〜)」「ファイルタイプも変更する(file type)」といった処理を加えることも可能です。
 また、上記の記述がベストという訳でもありません。同じ結果が得られるとしても、異なるスクリプトで書くこともできます。スクリプトの書き方によっては、処理速度を速くしたり、記述を短くしたりすることもできます。
例えば、TypeChangerでは複数ファイルの処理にrepeatは使用していません。


ゲーム 健康 テクノロジー 教育 ユーザビリティ ダウンロード 誰かの独り言 ⇒トップページへ