AppleScriptの使い方

他力本願でAppleScriptを使う

 前回の説明で、AppleScriptの仕組みが少し理解できて、スクリプトを作ってみたくなったことでしょう。
 でも、ちょっと待ってください。
 これから作ろうと考えているスクリプトは、すでに誰かが作成している可能性があります。
 そして、他人が作ったスクリプトはAppleScriptを理解するうえで、非常に参考になるお手本です。
 まずは、これらのスクリプトを試してみることをお勧めします(注1)。

 AppleScriptを使うために、基本的なことを知っておく必要があります。
 今回はAppleScriptのファイ形式に、どのような種類があるかを紹介します。
 また、それらのファイルの使用方法についても解説します。
 あちこちからスクリプトを集めて、スクリプトを書かずに便利な環境を整えましょう。

アプレット

 前回説明したように、アプリケーションとして保存したスクリプトを「アプレット(applet)」と呼びます。
 アプレットはアプリケーション(application)と、小さいことを表す接尾語レット(-let)を合成した言葉です。

 アプレットは実現する機能の多くを、OS/機能拡張ファイル/AppleScriptで操作するアプリケーション、などに頼っています。
 そのおかげでスクリプトの開発や修正が簡単に行え、そのうえファイルサイズが小さくて済みます。

 また、アプレットにはスクリプトで記述した処理を行うとすぐに終了するタイプと、一度起動するとバックグラウンドで処理を続行するタイプがあります。
 後者のアプレットは、通常のアプリケーションと同様に[ファイル]-[終了](もしくは[command+Q]キー)を選択すれば終了できます。

ドロップレット

 ドラッグ&ドロップしたファイルに対して処理を施すアプレットを、「ドロップレット(droplet)」と呼びます。
 ファイル形式やクリエータの変換など、複数のファイルに同じ処理を一括して加える場合によく使われます。
 アプレットとは異なり、実行するたびに対象となるファイルを変更できるので、応用範囲が広い点が特徴です。
 ドロップレットのAppleScriptには、アイコンに矢印が付きます。

 ドロップレットの作り方に付いて詳しくは後の回で解説します。
 基本的にはアプレットと同じ作り方で、次のようなスクリプトが含まれている場合、自動的にドロップレットになります。

on open theList
	-- ファイル処理スクリプト
end open

フォルダアクションスクリプト

 フォルダにAppleScriptの機能を追加するものを、「フォルダアクションスクリプト(folder action script)」と呼びます。
 フォルダアクションは、フォルダの開閉や開いているフォルダ内の項目(ファイル/フォルダ)の追加/移動、ウィンドウの移動/サイズ変更——などの動きがあった場合に、自動的にスクリプトを実行します。

 フォルダアクションを設定するには、適当なフォルダのコンテクストメニューから[サービス]-[フォルダアクション設定](注1)を選び、現れたウインドウで適当なスクリプトを選択します。

 次に、[フォルダアクションを使用]にチェックを入れます。
 この画面で、任意のスクリプトを 指定するなど、その他細かい設定が可能です。

 フォルダアクションを解除する場合も、[フォルダアクション設定]を選び、設定してあるスクリプトを解除します(注2)。

 フォルダアクションは、このようにフォルダごとにスクリプトを埋め込むのではなく、フォルダとフォルダアクション用のスクリプトをリンクさせるだけなので、ひとつのスクリプトを多数のフォルダに設定でき、汎用性があり管理しやすい点が特徴です(注3)。

付加可能アプリケーション

 アプリケーションには、AppleScriptを内蔵できる「付加可能(attachable)アプリケーション」があります。
 さらにこれは「書類にスクリプトを内蔵する」タイプと、「メニューにスクリプトを追加する」タイプの2種類に大きく分けることができます。

「ファイルメーカーPro」などは、書類にスクリプトを内蔵するタイプです。
 書類のなかに配置したポップアップメニューやボタンなどを使って、アプリケーションが備える機能をAppleScriptで実現します。
 書類にスクリプトを内蔵する方法はアプリケーションごとに異なるので、ここでは詳しく触れません。

 一方「Jedit」や「mi」などは、メニューにスクリプトを追加するタイプです。「Jedit」では、AppleScript専用の項目をメニューバーに用意しています。
 メニュー項目にスクリプトを追加するには、アプリケーションが指定したフォルダ(「Jedit」では"Macro Menu Items"フォルダ)へスクリプトを入れておくだけです。

「カレンダー」を使うと、指定時間にスクリプトを実行することができて便利です。

 OS Xには「Xcode」という開発環境がありますが、これらを使ってAppleScriptを使ったアプリケーション開発を行う事もできます。
 その環境を特に「AppleScriptObjC(ASOC)」と呼びます(注2)。

 このように、AppleScriptはダブルクリックで起動するアプレットだけではなく、さまざまな用途で使えます。
 利用する形によってスクリプトの作り方が若干異なりますが、スクリプトの文法は同じです。
 従って、アプレットとして作ったスクリプトをコピー&ペーストするだけでアプリケーションに内蔵することもできます。

AppleScriptの使い勝手を向上させるTips&ユーティリティー

 多くのアプレットをそろえると、整理する作業が面倒です。
 よく使うアプレットはフォルダにまとめて、フォルダごとDockに登録して即座に呼び出せる状態にしておくといいでしょう。

 アプレットはアプリケーションの一種ですから、各種のラウンチャーを利用して整理することもできます。
 代表的なラウンチャーのDragThing等は、それ自体がAppleScript対応ですから、AppleScriptの整理にはもってこいです(注1)。

 Script Menu
  エディタの[一般設定]-[メニューバーにスクリプトメニューを表示]オプション選択すると、スクリプトをメニューから呼び出せるようになり、非常に便利です(注2)。

「スクリプトメニュー」のスクリプトは"Library/Scripts/"にあるものが表示されます。
 新たにスクリプトを追加するのは、ホームフォルダの"Library/Scripts/"に「アプレット」か「コンパイル済みスクリプト」ファイルを置くだけの簡単なものです。
 なお、このフォルダはスクリプトメニューの[スクリプトフォルダを開く]から開けます。

 このフォルダの中には最初から沢山のスクリプトが用意されているので、どういうことができるのかの参考になります。
 optionキーを押しながらメニューのスクリプトを選択すると、メニューから直接スクリプトが開けるので、どんなものか覗いてみるのも良いでしょう。
 まだこの段階では、書かれている内容はよく分からないと思いますが、「意外と簡単そう」じゃありませんか?
 それとも「英語だらけで不安」でしょうか?

おまけスクリプトを使ってまずは予行演習

 インターネット上で公開してあるスクリプトを試す前に、まずは手元にあるスクリプトを試してみましょう。

 OS Xでは、起動ディスクの"/Library/Scripts/"にサンプルスクリプトが用意されています(注1)。
 スクリプトメニューやフォルダアクションなどで使えるスクリプトが、たくさん収録されています。

 エディタのメニュー[ファイル]-[テンプレートから新規作成]を使うと、AppleScriptの雛形が使えます。
 また、スクリプト入力ウインドウでコンテクストメニューを使うと、コードスニペット(スクリプトの断片)が入力できます。
 全部一からスクリプトを入力するのは大変でも、とりあえずの大枠のスクリプトがあれば、随分と作りやすくなるはずです。

 また、サードパーティー製も含めて「AppleScript対応」のアプリケーションには、サンプルスクリプトが付属する事も多くあります。
「この作業は面倒だな」と思っていたアプリケーション上の処理が、付属のスクリプトで自動化できる場合がありますので、一度試してみましょう。

 アプリケーション自体をコンテクストメニューの[パッケージの内容を表示]で調べてみると、AppleScriptのスクリプトが含まれている事もあります。
 アプリケーションを使い込みたい場合は、一度調べてみるのも良いでしょう。

スクリプト読解の手がかりはコメント文と「記録」ボタン

 スクリプトは「実行専用」形式で保存されていない限り、エディタで開いて内容を確認できます。
 AppleScriptは中学生レベルの英語で書かれているため、スクリプト全体は理解できなくても、1行1行の内容はおぼろげにわかるでしょう。

 またスクリプトを理解するヒントとなる部分がコメント文で、「(*」と「*)」で囲まれた部分や「--(マイナス二つ)」から行末までの部分(注1)に記述されています。
 自分が作りたいと考えているものと同様の処理を行うスクリプトのコメント文は、必ず目を通しておきましょう。
 コメント文は、スクリプトの内容を説明する部分なので、スクリプトの実行にはまったく影響しません。

(* この部分はコメントです。
改行があってもコメントは続きます。
コメントはプログラムとしては無視されます。*)

-- これもコメントです。改行するとコメントは終わりです。

 前回説明した「記録可能アプリケーション」であれば、「スクリプト編集プログラム」の[記録]ボタンで処理内容を自動生成して、どのようなスクリプトが使えるのかをチェックしましょう。
 残念ながら、記録がきちんと働くアプリケーションは少ないのですが、手がかりのひとつとして、覚えておいて損はありません。

セキュリティ機能の設定・解除

 インターネットからダウンロードされたアプリケーションを使う場合、OS Xは年々セキュリティが厳しくなり、色々と設定を変更しないと動作しないか、動作までの手続きが煩雑になっています。
 AppleScriptはその性質上、Macのほとんどのソフトウェアの制御ができます。
 すばらしく便利ですが、悪意のあるアプレットが実行されてしまうと、まるっきり無防備です。
 AppleScriptをダウンロードして使う場合、それがどういう性質のものであるか理解して使いましょう。

 まず「システム環境設定」の[セキュリティとプライバシー]-[一般]-[ダウンロードしたアプリケーションの実行許可]-[すべてのアプリケーションを許可]で、ダウンロードしたアプリケーション(アプレット)の実行を許可します。

 場合によっては、さらにアプリケーション毎の制御の許可が必要です。
「システム環境設定」の[セキュリティとプライバシー]-[アクセシビリティ]で制御を許可するアプリケーション(アプレット)にチェックを入れます(注2)。
 AppleScriptを使う場合、最低でもスクリプトエディタは制御の許可をしておかないと話になりません。
 スクリプトを実行してみたが何も起きない、あるいは「補助アクセスは許可されません」といったエラーが発生するという場合、「システム環境設定」の[アクセシビリティ]に、許可するアプリケーションが増えていることがあるので、そのアプリケーションを許可すると実行されるということがよくあります。
 詳細はAppleが公開している資料、OS X:Mavericks でアクセシビリティとセキュリティ機能を使った AppleScript の使用方法 - Apple サポート、を参照してください。

 また、ブラウザのリンクをクリックすると、エディタにスクリプトがコピーされるサイトもあります(注2)
例 : beepをエディタで開く
 先ほどの[ダウンロードしたアプリケーションの実行許可]を設定していない場合「開発元を識別できないスクリプト」という警告ダイアログが出てきます。

 少々面倒ですが、自分でスクリプトを書かずにすむ楽さとインターネットの自由、との引き換えと思いましょう。

外部機能でAppleScriptをパワーアップ

 "/System/Library/ScriptingAdditions/"フォルダに収録されているファイルは「スクリプティング機能追加(OSAX)」(注1)と呼ばれ、AppleScriptの機能を拡張してくれます。
 システムが標準で用意するこれらのOSAXは、OSのさまざまな機能で利用されていますので、移動/削除を行わないほうが賢明です。

StandardAdditions.osax

 新しくOSAXを追加するにはホームフォルダの"Library/ScriptingAdditions/"にOSAXファイルを置きます。フォルダが無い場合は、利用者各自でフォルダを作って用意します。
 Mac Scripter.netのOSAXコーナーに主なOSAXがリンクされています(現在、更新停止中ですが)ので、参考になるでしょう。

 OS X10.9以降は、スクリプトライブラリという仕組みが作られていて、そちらに移行する予定のようですが、OSAXはすでに沢山存在しますし、スクリプトライブラリは、まだあまり活用されていません。
 組み込む場合は、多くはユーザ用の"~/Library/Script Libraries/"に対応ファイルを置くという使い方になるかとおもいます。

【今回のまとめ】

AppleScriptには次の形がある、

  • 小さなアプリケーションである「アプレット」
  • ファイルを一括処理できる「ドロップレット」
  • フォルダと連動させる「フォルダアクション」

サンプルスクリプトの入手は、

  • OS付属のスクリプト
  • 対応アプリケーションに付属のスクリプト
  • インターネット上のスクリプト

AppleScriptを使うには、

  • コメントを参考にちょっと改造
  • 各種メニューを使う
  • セキュリティ設定を行う

AppleScriptを強化するには、

  • OSAXを組み込む
  • スクリプトライブラリを使う