AppleScriptは、
Appleが開発したmacOS用の
スクリプト言語です。System 7(Mac OS 7)から標準搭載されており、その構文は自然言語(
英語)に近く、
プログラミング初心者にも比較的理解しやすい設計となっています。
AppleScriptは、Mac OSの
プロセス間通信機能である
Apple eventを利用して、システムや様々なアプリケーションを制御できます。これにより、アプリケーションの自動化や連携、データ処理など、幅広いタスクをスクリプトで実現できます。
また、
AppleScriptはOpen Scripting Architecture (OSA) に準拠した言語の一つであり、macOS v10.10以降はJavaScript for Automation (JXA)も利用可能になりました。
幅広いカバーエリア
AppleScriptは、アプリケーションの操作自動化から、
シェルコマンドの実行、画面上のGUI要素の操作、Webコンテンツの制御、Cocoaフレームワークの利用、iCloudとの連携まで、非常に広範な領域をカバーします。GUIベースのアプリケーション開発も可能であるため、一度習得すれば、Macでの作業効率を大幅に向上させることができます。ただし、他の
コンピュータからの操作も可能なため、セキュリティには注意が必要です。macOSには、さまざまな抑止機能が用意されています。
AppleScriptは、
Classic Mac OSからmacOSへと継承された唯一のテクノロジーであり、長年にわたり多くの開発者によって利用されてきました。GUIベースのアプリケーション制御に関する知見は、海外を中心に豊富なコミュニティで共有されています。
仕組み
AppleScriptは、OSAに準拠した
スクリプト言語であり、アプリケーションなどの
プロセスに
Apple eventを送信することで自動操作を実現します。通常はコンパイル済みの
バイトコードが保存され実行されます。これにより、OSのバージョン、
CPUの種類、記述言語(
AppleScript
英語、
AppleScriptフランス語、
AppleScript日本語)に依存しないコード生成が可能となります。
AppleScriptの言語自体が定義する
予約語は比較的少なく、標準では三角関数などの高度な機能は含まれていません。しかし、Scripting Additions/OSAXと呼ばれる機能拡張や、
AppleScript Librariesを利用することで、命令を拡張できます。
AppleScriptはアプリケーション間通信を基礎技術としているため、
Apple eventに対応したアプリケーションであれば、処理を委ねることができます。
また、現在のバージョンではUser Interface Scripting(GUI Scripting)を使用して、メニュー操作やキー入力をスクリプトからアプリケーションに伝達できます。アプリケーションはシステムから送られてきた
Apple eventメッセージを解釈し、対応する処理を行い、その結果を
Apple eventメッセージとして返します。
AppleScriptは
バイトコードインタプリタで逐次実行されるため、ネイティブコードに比べると実行速度は劣りますが、アプリケーションの機能呼び出しを行わない場合は、
スクリプト言語として十分な速度で実行されます。ただし、GUI Scriptingを用いると、処理に時間がかかる場合があります。
ユーザーインターフェース
AppleScriptは、シンプルなダイアログ表示や
通知センターへの通知、ポップアップメニューからの項目選択、ファイル選択、フォルダ選択、ファイル保存先選択などの基本的なユーザーインターフェースを提供します。また、プログレスバーの表示も可能です(macOS v10.10以降、アプレット動作時のみ)。
複雑なユーザーインターフェースを作成するには、スイッチコントロールや、Adobe InDesignなどの一部アプリケーションに搭載されている動的UI生成機能を利用する方法があります。本格的なGUIを作成する場合は、Xcode上で
AppleScript Appプロジェクトを作成し、
AppleScriptコード(
AppleScriptObjC)を記述します。Xcodeでは、一般的なアプリケーション開発と同様にユーザーインターフェースを作成できます。
開発環境
macOSには、スクリプトの編集・実行ツールとしてスクリプトエディタが付属しています。スクリプトエディタに
AppleScript対応アプリケーションの
アイコンをドラッグアンドドロップすると、
AppleScript用語辞書が表示され、アプリケーションのコントロールに必要な情報を参照できます。
スクリプトエディタにはブレークポイント設定や変数モニタリングなどの機能がないため、これらの機能を利用するには、サードパーティ製のScript Debuggerを使用する必要があります。また、Script Debuggerは、Cocoaオブジェクトのログ表示や
AppleScript Librariesの編集にも対応しています。
AppleScriptへのコードサインは、
Apple純正のスクリプトエディタまたはScript Debuggerで行えます。
Mac App Storeに
AppleScriptで作成したアプリケーションを提出するには、Xcodeでの記述とコードサインが必要です。
テキスト形式で書かれたスクリプトは、コマンドラインからosascriptコマンドでコンパイル、実行できます。
Apple純正の
統合開発環境Xcodeでも
AppleScriptによるアプリケーション開発が可能です。
AppleScriptから直接Cocoaの機能を呼び出す「
AppleScriptObjC」も利用できます(macOS v10.1以降)。
OSバージョン間の互換性
AppleScriptの書類フォーマットは維持されており、基本的には互換性が確保されています。これまで、macOSの大きな変革期(Intel
CPUへの移行、64ビット化、
Apple Siliconへの移行など)を経ても、
AppleScript自体への影響はほぼありませんでした。ただし、OSAXや外部アプリケーションの機能を利用している場合は、個別に確認が必要です。
macOS標準添付のアプリケーションの機能は、OSバージョンによって異なる場合があります。特に、
AppleScriptにOS機能を提供する補助アプリケーションは、OSバージョンごとに変更されることがあるため、注意が必要です。古いOSから新しいOSへの移行は確認作業レベルで済むことが多いですが、新しいOSから古いOSへの移植は、大きな作業量を伴う場合があります。
GUI Scriptingを利用している場合は、メニュー構成やボタンの文字が変わると動作しなくなる可能性があるため、異なるOSバージョン間での動作は保証されません。macOS v10.10以降では、スクリプト側が対応する処理系のバージョンを指定できるようになりました。
macOS 10.14以降では、サードパーティ製のOSAXが使用できなくなったため、代替機能を
探す必要があります。
構文
AppleScriptの構文は、HyperCardの
スクリプト言語であるHyperTalkに似ており、
英語に近い記述が可能です。そのため、比較的習得しやすいと言えます。しかし、アプリケーションごとに異なる命令やオブジェクト構造を理解する必要があるため、
AppleScript用語辞書を参照しながら記述することになります。
初期には日本語などの
英語以外の言語での記述も可能でしたが、macOS 8.5以降は
英語表現形式のみが採用されています。ただし、変数名には日本語を使用できます。macOS v10.10からは、
AppleScriptObjCがスクリプトエディタでも利用可能になり、
Objective-C風の表記も採用されました。
AppleScriptObjCは、macOS v10.6で部分的に導入され、macOS v10.10でスクリプトエディタでも利用可能になりました。これにより、現在のmacOSではどの環境でもCocoaの機能を利用できるようになっています。
AppleScriptObjCは従来の
AppleScriptよりも高速処理が可能ですが、これは
AppleScriptのオブジェクトをCocoaのオブジェクトに変換し、Cocoaのメソッドを呼び出した場合です。
AppleScriptとCocoaのオブジェクト変換は暗黙的に行われる場合もありますが、多くは明示的な変換が必要です。
AppleScriptObjCでは
Objective-CのBlocks構文やprotocolはサポートされていません。また、Cocoaのクラス名やメソッド名が
AppleScriptの
予約語と衝突する場合は、「|」で囲む必要があります。Cocoaオブジェクトの結果表示やログ表示は、macOS標準添付のスクリプトエディタではサポートされていません。
独特な挙動と要素
スクリプトエディタでのコンパイル時、
AppleScript処理系がソースコードに自動的に括弧を追加する動作があります。ユーザーは、この括弧が意図通りであるか確認し、必要に応じて修正する必要があります。また、
AppleScriptでは、英文のように記述するために「無意味句」(例: "the")を使用できます。無意味句はプログラム的な動作を行いませんが、構文を読みやすくするために役立ちます。
アプリケーション操作対象
AppleScriptは、さまざまなアプリケーションを操作できます。ローカルアプリケーション、UNIXコマンド、リモートアプリケーション、Webサービス、iOSアプリケーション、各種フレームワークなど、多岐にわたる対象を自動化できます。
ローカルアプリケーション
Safari、カレンダーなどのmacOS標準添付アプリケーションの多くは
AppleScriptでの制御に対応しています。しかし、
AppleScript用語辞書に定義された範囲内でのみ操作可能です。GUI Scriptingによる強制操作が必要になる場合があります。
UNIXコマンド
do shell scriptコマンドでBSDレイヤー上のコマンドを実行できますが、Terminal.appと環境変数が異なる点に注意が必要です。
リモートアプリケーション
リモート
Apple eventsを利用して、ネットワーク内の他のMac上のアプリケーションを制御できますが、セキュリティ確保のためデフォルトではオフになっています。
Webサービス
SOAP、XML-RPCを呼び出す命令が標準で搭載されています。Cocoaの機能を利用してRESTful APIを呼び出すことも可能です。Webサイトの操作には、
Safariのdo JavaScriptコマンドやGUI Scriptingも利用できます。
iOSアプリケーション
Apple Silicon MacではiOSアプリが動作するため、
AppleScriptから操作できます。ただし、GUI Scripting経由での操作となり、macOSアプリのようなオブジェクト階層は辿れません。
各種フレームワーク
macOS v10.10以降では、Cocoaフレームワークを
AppleScriptから直接呼び出すことができます。
AppleScript Libraries
AppleScript自体をライブラリ化して再利用できます。このライブラリに
AppleScript用語辞書を持たせることで、命令語の拡張も可能です。
ショートカット
macOS 12以降では、ショートカット.appを
AppleScriptから操作できます。
AppleScriptライブラリを利用して、
Siriに文字列を渡して実行できます。
さまざまな実行環境
AppleScriptは、中間コードに翻訳されて実行されますが、実行環境によって動作が異なる場合があります。スクリプトエディタ、アプレット、Automator、Xcode、スクリプトメニュー、フォルダアクション、Terminal、Switch Control、音声入力コマンド、アプリケーション内のスクリプト実行機能、Script Debuggerなど、さまざまな環境で実行できます。ログ表示などのデバッグ機能は、スクリプトエディタやXcodeで実行した場合に限られます。
制限機能
AppleScriptの機能が拡張されすぎたため、macOSには一部機能を制限する機構が用意されています。リモート
Apple Events、GUI Scripting、
Safariのdo javascript命令、FileMaker Pro上での
Apple Event操作には、管理者パスワードによる許可が必要な場合があります。macOS 10.14以降では、「セキュリティとプライバシー」の設定で、アプリケーションの権限を細かく設定できます。また、SIP(System Integrity Protection)によって、一部機能に制限が加わっています。
まとめ
AppleScriptは、macOSの強力な自動化ツールであり、多岐にわたるタスクをこなせます。習得には一定の学習コストが必要ですが、そのポテンシャルは非常に高く、Macの作業効率を大幅に向上させることが可能です。様々な環境で実行可能であり、それぞれの特性を理解することで、より効果的な活用が期待できます。