AppleScript

AppleScriptとは



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 StoreAppleScriptで作成したアプリケーションを提出するには、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



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から操作できます。

Siri


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の作業効率を大幅に向上させることが可能です。様々な環境で実行可能であり、それぞれの特性を理解することで、より効果的な活用が期待できます。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。