AppleScript ことはじめ

多くの偉い方々が、AppleScript の書き方などの説明をされています。しかし、AppleScript をはどうやって使うのかという解説ってあんまり見た事がないと思います。大量に自分の作品を公開している手前、作るのではなく使う人向けの解説をしてみようとおもいます。

Mac OS X での AppleScript を想定しています。昔に書いた Classic 編はこちら

Contents

AppleScript とは

まずは、やっぱりここから。自分なりの AppleScript 観を語ってみます(ちょっと恥ずかしい)。そもそも、ここは Macintosh の スクリプティングのサイト(だんだん、Mac のソフトを公開するサイトになっています)であって、決して AppleScript だけのサイトではないつもりです(ほとんど AppleScript ですが)。じゃあなんで、わざわざ AppleScript だけ解説するんだというと、Macintosh 上では、「なにはともあれ、まずは AppleScript」です。他のスクリプト言語を使うにしても AppleScript を知っていると色々と役に立ちまくります。自分は、AppleScript から始まって JGAWK(結構やった)、Frontier(結構やったけど、昔の話)、Perl などを使うにあたって AppleScript が非常に役に立ちました。とくに Per lや Awk など Unix から移植されたものは、なかなか Macintosh という環境の中でシームレスにつかうのは難しいのですが、そんなとき Perl と他のアプリーエションやユーザーインターフェースの間に割って入ってお互いをうまくつなげてくれるのが AppleScript だったりします。だから、何はともあれ AppleScript です。

さて、いささか飛躍してしまいましたが、本題に。ふつうスクリプト言語とは C や Fortran などのコンパイラ言語と違って、インタプリタ言語で高度な事が結構簡単にできるように、と作られた言語のことをいいます(たぶん)。その分、できる事が限られていたり、実行速度が遅かったりします。

AppleScript は近代的な言語としてはいくからか機能を欠いていますが、それを補って余りある特徴があります。それは、「他の GUI を持ったアプリケーションを interactive に制御できる(アプリケーションの AppleScript への対応の仕方次第ですが)」というものです。ふつうスクリプト言語とは、それに用意された機能しか使えないのですし(ちょっと言い過ぎかな)、shell スクリプトで起動できるコマンドは、もっぱらデータのフィルターとしてしか機能しません。 AppleScript は対応しているアプリケーションの数だけできる事が増えます。アプリケーションと interactive にデータを構築し、そのデータを他のアプリケーションに渡して・・・という複数の GUI を持ったアプリケーションを駆動しての連係プレイが AppleScript では簡単にできます・・・というか、そのための言語らしいです。単なるスクリプト言語だけでなく Macintosh というプラットホームで、Universal なマクロ言語でもあるのです。AppleScript はネットワークを越えてアプリケーションをコントロールする事さえ可能です。

もちろん、許しがたい欠点もいくつか持っています。連想配列がないとか、標準の環境では正規表現がないとか、亀より実行速度が遅い(時代は進み、現在では相当複雑な事をしてもストレスのない速度で動くようになってきました。)とか・・・。

Mac OS X になって、AppleScript は大幅にその活用範囲が広がったと思います。まずは、複雑なGUIを手軽に構築できる AppleScript Studio が Apple からだれでもただで使えるようになりました。また、Unix ベースの OS になった事で シェルコマンドが AppleScript から呼び出せるので、シェルコマンドも含めれば AppleScript でできる事は大幅に広がったと言えます。

AppleScript のファイル形式

さて、AppleScript はあなたの Macintosh で、どのような形で存在しうるでしょうか?「アプリケーション形式」、「コンパイル済みスクリプトファイル」、「テキストファイル」の3つのファイル形式でご覧になられると思います。多くの場合、これらのファイルをスクリプトエディタで開くとソースコードを見ることができますが、ソースコードを見れない「実行専用形式」で保存する意地悪な人もいます。僕が配布しているものはすべて、ソースコードを見れますし、再利用してかまいません。というか自分が作ったものを踏み台に、さらにすばらしいものを産み出してくれることを願ってやみません。

アプリケーション形式

Applet Iconとか、Droplet Iconというアイコンのfileは、アプリケーション形式のAppleScriptです。普通のアプリケーションと同じように扱えると思ってかまいません。配布されている多くのアップルスクリプトはこの形式でしょう。

Droplet Iconは、ドロップレットと呼ばれ、Drag&Dropを受け付けます。

Applet Iconはアプレットと呼ばれ、ただダブルクリックで起動するだけです。Drag&Dropは受け付けません。

多くのスクリプトはやることやったら勝手に終了します。ちなみに、Command+.(ピリオド)のショートカットキーを押してやると作業を中断して終了してくれます。

中には自動的に終了しないで、定期的に作業を行うようなスクリプトもあります。もちろんそういうスクリプトはその必要があってのことでしょうが、そういったアプリケーション形式のスクリプトを終了するには、明示的に終了の作業(ファイルメニューから終了を選ぶ、もしくはCommand+Q)をしてやる必要があります。

コンパイル済みスクリプトファイル

Compiled Script Iconは、コンパイル済みスクリプトファイル(もしくは単にスクリプトファイル)と呼ばれ、スクリプトの骸骨のようなものです。普通、スクリプトメニューを持っているアプリケーションに登録するなどして使います。このファイルだけではスクリプトを実行することができず、何らかのアプリケーションの助けが必要です。一種の Plug-in だと思っても大間違いではないと思います。

アプリケーション形式のスクリプトは、このスクリプトファイルの上に、スクリプト実行専用のアプリケーションをかぶせたものであるといえるでしょう。

Finder上で、ダブルクリックすると、スクリプトエディタで開かれます。スクリプトエディタでは、この形式のファイルを実行できたり、アプリケーション形式として保存しなおしたりできます。

この形式のファイル、すなわち Plug-in としての AppleScript をどう扱うかが AppleScript を活用して、Macintosh を便利に使うかの要になるとおもいます。たとえば、僕の場合は常に数十もの各種自作スクリプトを扱っていますが、それらをすべてアプリケーションとして管理活用するのは、めんどくさくて現実的ではないでしょう。 目的のスクリプトに手早くアクセスする方法も必要になります。くわしくは、下記の AppleScript の活用を読んでみてください。

テキストファイル

Script Source Iconというアイコンのファイルは、スクリプトのソースコードが書かれた、ただのテキストファイルです。Finder上でダブルクリックするとスクリプトエディタで開かれます。もちろん適当なテキストエディターで、このファイルの中身を見ることができます。

このファイル形式では、実行することができなくてスクリプトエディタで一度コンパイルしてやる必要があります。普通は、スクリプトを開発途中に、コードが不完全でコンパイル済みスクリプトファイルやアプリケーションとして保存できない時に、この形式で保存します。このファイル形式でスクリプトが配布されることはまずないでしょう。

AppleScript の拡張

実は、AppleScript 本体だけでは本当にたいしたことはできません。他のアプリケーションをコントロールしたり、これから述べる「スクリプティング機能追加(Scripting Addition)」というものを使って多くの仕事をこなします。スクリプティング機能追加は、多くの場合Scriptting Addtion Iconなアイコンをしていて、OSAX(Open Scriptin Architecture eXtenstion)と呼ばれたりします。スクリプティング機能追加は、AppleScript にコマンドを追加し、その機能を拡張するものです。

Mac OS X の場合、

の中に入っています。標準の状態で相当な機能がスクリプティング機能追加によって提供されており、これ無しでは AppleScript は何もできないといっても過言ではありません。

スクリプティング機能追加は、標準のものだけではなく、多くの人が作ったスクリプティング機能追加が インターネットで非常にたくさん配布されています。インターネットで配布されているスクリプトには、スクリプティング機能追加をダウンロードしてインストールしてやる必要があったりします。実際、自分が配布しているスクリプトでも、何らかの追加のスクリプティング機能追加を必要としているものもすくなくありません。ユーザーがシステムにスクリプティング機能追加をインストールするには、

にファイルを置くだけです。スクリプティング機能追加は、新たにインストールしても再起動する必要はありません。また、インストールするだけでは、悪さする可能性はありません。もちろん、スクリプティング機能追加のできが悪い場合、それを呼び出したスクリプトがエラーを起こしたりすることはありえます。

じゃあバカスカ、スクリプティング機能追加をインストールしてもいいかというと、残念ながら世の中はそんなにうまくできていない。用語のコンフリクトという問題があります。同じ ID をもったコマンドで、機能が違った物が存在した場合、スクリプトが本来のコマンドでない物を呼び出してしまって、期待した動作が得られない、もしくは error が起きるということがあります。過ぎたるはおよばさるが如しということでしょうか・・・やっぱり本当に必要な物だけインストールしておくことをお薦めします。

自分がよく使うメジャーなスクリプティング機能追加を Pick up OSAX にまとめてあります。ダウンロードしてインストールしておくと、なにかと都合がよろしいかと思います。

AppleScript の活用

AppleScript の使い方は、何もアプリケーション形式で保存して使ったり、スクリプトメニューを持っているアプリケーションに登録するだけではありません。非常に多様な使い方ができ、いろいろ工夫すれば、AppleScript をもっと便利に、もっとシームレスにあなたの Macintosh にとけこませることができます。

スクリプトメニュー を使う

Mac OS X に標準で付属しているので、AppleScript 活用の為の最も基本的なユーティリティーだと思います。メニューバーにスクリプトを起動できるメニューが追加されます。標準の状態にでは、インストールされていません。

Mac OS X 10.4 の場合は、「AppleScipt ユーティリティ」を使うとスクリプトメニューが使えるようにできます。

Mac OS X 10.3 の場合は、「/アプリケーション/AppleScript/」にある「Install Script Menu」を実行すると、インストールされスクリプトメニューがメニューバーに表示されます。

常に表示されるメニュー項目と最前面のアプリケーションによって変わるメニュー項目に分けられています。最前面のアプリケーションに従って内容が変化するメニューを付け加えるには、「ホームフォルダ/ライブラリ/Scripts/Applications」フォルダを新たに作り、その中にアプリケーションの名前の付いたフォルダを用意します。

AppleScript だけでなく、シェルスクリプトの実行も行えます。また、任意の書類、アプリケーションを登録できます。エイリアスファイルもちゃんと認識するようです(昔はエイリアスファイルを扱ってくれなかったのですが、いつの頃からかできるようになりました。Mac OS X 10.3.3 で確認。)。ですから、スクリプトを使わなくても Mac OS 9 以前のアップルメニューのように扱う事ができるので、万人に有用であると思います。

これで、メニュー項目にショートカットキーを割り当てる事ができれば、僕にとっては文句ないのですが・・・

詳しくは、Apple の Script Menu の Web Page をご覧になってください。

Quicksilver をつかう

Quicksilver は Spotlight のようにインクリメンタルサーチによってアプリケーションやファイルを検索し、実行したり開いたりすることができます。非常にいろんなことができるアプリケーションなのですが、僕はアプリケーションおよび AppleScript のランチャーとして使っております。

Spotlight があるのに、なぜ似たような物を持ち出すかというと、

僕は、スクリプトファイル/アプリケーションの起動には Quicksilver、ファイル検索には Spotlight と使い分けております。

スクリプトメニューや何らかのユーティリティでショートカットを割り当てたり、パレットに登録したりしてもその数はおのずと限界があります。また、いちいち設定するのも面倒です。しかし、Quicksilver なら非常に多くのアプリケーションとスクリプトファイルの取り回しが可能です。癖のあるアプリケーションかもしれませんが、慣れると手放しがたいものがあります。メニューをたどったりパレットを探しまわったりするより圧倒的に素早くスクリプトファイル/アプリケーションの起動ができます。

特に、Finder の選択項目を取得して実行するようなスクリプトの起動に適しているとおもいます。そんなスクリプトを描くときは、拙作 TypicalRun をお試しください。

他にも山のように機能がありますが、ランチャーとして割り切って使うといいのではないかと思います。イチオシです。

OnMyCommandCM をつかう

OnMyCommadCM は、コンテキストメニューから AppleScript を使いたいときに一番のおすすめユーティリティーです。もともとはシェルスクリプトをコンテキストメニューから実行するコンテキストメニュープラグインですが、version 1.6 から AppleScript もサポートされました。

なぜ、OnMyCommandCM がおすすめかというと、僕の知る限りではコンテキストメニュー項目が表示される条件を最も細かく指定できるユーティリティーだからです。

以下は、OnMyCommandCM での設定例です。OnMyCommandCM の設定は、OMCEdit というアプリケーションを使って行います(日本語版もあります。最近のローカライズは僕が担当するはめになってしまいました。)。OMCEdit でダイレクトに AppleScript を入力しても良いですが、長いスクリプトを入力するには適していませんので 「run script」コマンドを使って外部のスクリプトファイルを実行する AppleScript を入力する方が便利ではないかと思います。

また、多くの場合「タスクをバックグラウンドアプリケーションに送る」をチェックしておくといいでしょう。こうすると実行速度は遅くなりますが、互換性が高まります。このオプションを OFF にすると、OnMyCommandCM を呼び出したアプリケーションへイベントを送るような AppleScript はうまく動作しません。例えば、Finder のコンテキストメニューから Finder にイベントを送る AppleScript を実行する場合は、タスクをバックグラウンドアプリケーションに送る」を ON にする必要があります。

DragThing を使う

DragThing はランチャーソフトとして非常にメジャーなアプリケーションですが、Dock(DragThing のランチャーパレット) に登録したスクリプトファイルを起動できるという機能があります。Finder でスクリプトファイルをダブルクリックすると、スクリプトエディタが起動して、そのファイルを開いくだけですが、DragThing に登録してしまうと DragThing がそのスクリプトを実行してくれるのです。これはすなわち、カスタムなツールパレットを作ることだ出来るということを意味します。まあ、こんなことができなくても、アプリケーション形式のものを登録すればいいといえばいいのですが、いちいちアプリケーションが起動するより DragThing がスクリプトを実行してくれるほうが、ずっとスマートですよね。

また、Dock に登録した項目に任意のショートカットキーを割り当てる事ができますし、特定のアプリケーションだけ表示する Dock も作れますから、特定のアプリケーションのツールパレット及び、ショートカットキーで特定のアプリケーションだけで起動するスクリプトも作れます。DragThing があれば スクリプトメニュー 等の他のユーティリティーはいらないほど様々な用途に対応できると思います。

DragThing は、ただでさえ AppleScript に対応しまくっています。いつの日か、DragThing を酷使する AppleScript を作ってみたいと思う今日このごろです。

フォルダアクションを使う

特定のフォルダにファイルが追加されたときに、スクリプトを起動する事ができます。Mac OS 9 のころは、Postscript ファイルを Acrobat Distiller で PDF ファイルに変換するスクリプトを作って大いに活用していましたが、Mac OS X では今のところ適当な用途が見つからず使った事がありません。また今度、いつの日か解説できる日がきたらいいですね。

その他のユーティリティー

その他に AppleScript を便利に活用できるユーティリテーとして僕の知る限りでは、

等があります。探せばもっといろいろあると思います。