AppleScript
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/05/13 07:49 UTC 版)
さまざまな実行環境
AppleScriptは中間コードに翻訳されて逐次実行されるが、以下のようなさまざまな保存・実行環境(ランタイム環境)を持つため、実行環境によって動作が微妙に異なり、想定していた通りに動かない場合がある。
また、実行中のログ表示が行えるのはスクリプトエディタでオープンしてスクリプトエディタで実行させた場合、およびXcode上で作成してデバッグビルドを行なっている場合の2つのケースにかぎられる。フォルダアクションで実行中のAppleScript書類をスクリプトエディタでオープンさせたからといって、フォルダアクションで実行中のAppleScriptのログがスクリプトエディタ上にログ表示されることはない。
スクリプトエディタ上で実行
スクリプトエディタ上に記述して、スクリプトエディタ上で実行する形態である。この際の実行環境はスクリプトエディタであり、途中でAppleScriptの実行を停止させたり、ログ表示させた内容を確認したりできる(ログ表示させると実行速度がいちじるしく低下する)。セキュリティ上の制約がもっとも少ない実行環境でもあり、他の実行環境では動かせないコードもこの環境で動くケースが多い。
アプレット/ドロップレットとして保存して実行
スクリプトエディタ上で記述して、アプリケーションとして保存、あるいはアプリケーションとして書き出したものである。この形態のものをアプレットと呼ぶ。アプレット実行時にはアプレット用のランタイム環境が用意されている。この環境で実行すると、on idleによるタイマー割り込み、ファイルやフォルダをドラッグ&ドロップ受信する機能、ハンドラの実行後に終了しない、プログレスバーの表示機能(Mac OS X v10.10より)などの機能が利用できる。ファイル/フォルダのドラッグ&ドロップを受け付けるアプレットをドロップレットと呼んで区別する(アイコンが異なる)が、ランタイム環境は同じである。
アプレット実行時にログ表示などの機能は利用できないため、この実行形態のままではバグの確認や修正が困難である。アプレットとして書き出す前にスクリプトエディタ上で内容に問題がないことを確認する必要がある。
Automator上で実行
Automatorのワークフロー記述の一部としてAppleScriptを使用することもできる。Automator上のアクション「AppleScriptを実行」がスクリプトエディタに近い機能(ログ表示、結果表示)を持つが、他のAppleScript対応アプリケーションのAppleScript用語辞書をブラウズしたり、途中で実行を停止させるなどの機能はない。
Cocoa-AppleScript Appletとして保存して実行
Mac OS X v10.7で導入された。スクリプトエディタ上で「ファイル」>「テンプレートから新規作成」>「Cocoa-AppleScript Applet」を選択することで新規作成できる。AppleScriptObjCによるプログラムをスクリプトエディタ上で記述できるが、Interface Builderによるユーザーインタフェースの作成が行えず、デバッグ機能も乏しい。実行はアプレット形式でのみ行う。
Xcode上でAppleScript Appとして作成してビルドして実行
Xcode上で「File」>「Project」>「Other」>「AppleScript App」を呼び出すと作成される。Mac App Store上でのアプリケーション販売が可能な形式である。一般的なCocoaアプリケーションをAppleScriptで開発する環境であり、一般的なCocoaアプリケーションに近いものが作れるが、一般的なCocoaアプリケーションを作成するレベルの知識が必要とされる。Xcode内蔵のエディタ上で編集するAppleScriptは、文法要素に応じた構文色分け機能が利用できず、デバッグも行いにくい。複数のスクリプトファイルにプログラムを分割した場合のハンドラ呼び出し方法にクセがある。
スクリプトメニューに登録して実行
macOSのメニューバーから所定のフォルダ内のAppleScriptを実行できる、macOS標準装備の「スクリプトメニュー」に登録・実行した場合の実行環境も、OSのバージョンに応じてさまざまな変更が加わってきた。Mac OS X v10.10からはosascriptコマンドで実行する実装になった。このため、スクリプトメニューから複数のAppleScriptを同時に実行させることが可能になったが、実行するScript同士で共通のアプリケーションにアクセスした場合のバッティングまでは面倒を見てくれない。スクリプトメニューから実行中のScriptの停止を行えるが、実行中のログ表示はできない。macOS v10.14からは独立したアプリケーションとして提供されるようになった。
フォルダアクションに登録して実行
指定のフォルダ内容を数秒間隔で監視し、変更が加わるとAppleScriptの実行を行う機構である。ランタイムの差異が問題を生むというよりも、このフォルダアクションの機構そのものがmacOSのバージョンによってはうまく動作していない(Mac OS X v10.10)ことが問題であった[25]。のちに、macOS v10.11でFSEvents経由で変更イベントを受信するよう全面的に書き直され、ファイル変更があったら即時にScriptが実行されるようになった。
Terminalからosascriptコマンドで実行
OSバージョンによっては、display dialogなどのコマンドが利用できなかったが、Mac OS X v10.10以降はスクリプトエディタ上での実行にきわめて近いランタイム環境が提供されている。全く同一ではないため、スクリプトエディタ上で記述すれば発生しないような問題に直面する場合がある。一例として、AppleScript中からNSWindowを動的に生成し、そのウィンドウ上の各種GUI部品でユーザーからの操作を受け付けたい場合、操作が処理されないといった問題がある。
Switch Control上の「AppleScript」アクションから実行
macOSのアクセシビリティ系の機能に、フローティングパレット上に配置したボタンからキーボードショートカットやAppleScriptの実行を行えるSwitch Controlがある。バンドル形式のScriptを読み込んで実行できない、Scriptのバンドル内に実行ファイルを入れて呼び出すことができない、ユーザーディレクトリ下のAppleScriptライブラリを認識しない、といった運用上の制約がある。
「音声入力コマンド」の「高度なコマンド」>「ワークフローを実行」でAppleScript実行
日本語音声認識でAppleScriptを実行できる。実行可能形式は、AppleScriptのフラット形式(.scpt)およびAppleScriptアプレット。Siriとは別の音声認識コマンドであり、あらかじめ指定しておいた固定文字列を日本語音声認識して、合致すればコマンドを実行する。macOS 12でショートカット.appがmacOSに搭載されたことにより、AppleScriptを実行可能な音声認識コマンドの実行系が2つ存在している。
アプリケーション内のScript実行機能で実行
FileMaker Proを外部からAppleScriptでコントロールするよりも、FileMaker Proスクリプトの「AppleScriptを実行」スクリプトステップ中にAppleScriptをコピー&ペーストで入れて実行する方が数倍高速に実行される。画面の再描画などを抑止するほか、高速実行するための仕組みを備えている[要出典]。
Microsoft OfficeのVBAスクリプト内でも、AppleScriptを呼び出す仕組みが用意されている。Excel v.14.xまでは「MacScript」コマンドにより文字列で与えたAppleScriptが、Excel v.15.xでは「AppleScriptTask」コマンドによりファイル名を指定して外部のAppleScriptを実行できるようになっている。
同様に、Adobe InDesignの「スクリプト」パレット中からAppleScriptを呼び出すことが出来、この際に画面の再描画を抑止できるため高速実行(おおよそ2倍)が可能となっている。ただし、Adobe InDesignについては大量のデータ処理時にクラッシュが発生するため、処理速度より安定稼働を重視すると外部からのコントロールも選択肢に入る。
Script Debugger上でデバッグ実行
AppleScript専用のサードパーティー統合開発環境といえるScript Debuggerでは、デバッグ時にAppleScript互換の「AppleScript Debugger」というAppleScriptとは別のOSA言語を実行することになる。厳密にいえばAppleScriptそのものを実行するわけではないため、振る舞いが異なる箇所が出てくることは否定できない。ただし、以前(Classic Mac OS時代)に比べると純正AppleScript環境との互換性は大幅に高まっている。強力で便利な環境であるが、「デバッグ時以外はScript Debuggerを使うべきではない」という方針の開発現場もあるのは、この「互換性問題」ゆえである。
ショートカットアクション「AppleScriptを実行」上で実行
Shortcuts.appのアクションに「AppleScriptを実行」が用意されており、ショートカット内でのAppleScript実行が可能である。このアクションはmacOS専用であり、他のOS上では実行できない。Cocoaの機能呼び出しや、ユーザー環境にインストールされたAppleScript Librariesの機能呼び出しなどが可能。このことにより、Mac上であればSiri経由で日本語音声認識/テキスト操作によりAppleScriptを実行できるようになった。
- ^ JavaScript for Automation Release Note
- ^ 林信行の「Leopard」に続く道 第5回:System 7で幕をあけた激動の1990年代(後編)
- ^ AppleScript Users ML
- ^ AppleScript Language Guide Keywords
- ^ Scripting Additions for Mac OS X
- ^ macOS Mojave 10.14 Release Notes
- ^ “Mac Automation Scripting Guide - Automating the User Interface”. 2016年5月29日閲覧。
- ^ “AppleScript Overview - AppleScript Utilities and Applications - System Events and GUI Scripting”. 2016年5月29日閲覧。
- ^ “OS X: Using AppleScript with Accessibility and Security features in Mavericks”. 2016年5月29日閲覧。
- ^ “GUI Scripting”と”UI element Scripting”
- ^ 【基礎】アプリケーションの操作は、用語辞書に書いてあるとおり記述しないと動かない
- ^ AppleScriptObjC Release Notes
- ^ AppleScript sorting performance comparison
- ^ Technical Note TN2065: do shell script in AppleScript. Mac Developer Library. Apple, 2006-03-23.
- ^ ParallelesにゲストOSとしてインストールしたOS XをAppleScriptで制御
- ^ 郵便専門ネットでバージョン番号を取得
- ^ 郵便専門ネットでXML-RPC経由でJISコード(5桁、6桁どちらでも)から、その市区町村に属している郵便番号のリストを取得
- ^ 郵便専門ネットで道府県のコード(地方公共団体コードの先頭2文字)から都道府県名を返す
- ^ 郵便専門ネットで引数に指定した郵便番号で何件ヒットするのかをint型で返す
- ^ 郵便専門ネットでXML-RPC経由で郵便番号を6桁(チェックデジット付き)の全国地方公共団体コード/JISコード/市町村コードに変換
- ^ REST APIに対してGET、POST、PUT、DELETEのmethodを呼び出す
- ^ AppleScriptから電話にアクセスする
- ^ ZipZap frameworkを使ってZipアーカイブ内の情報を取得
- ^ Contactsに登録してある自分の写真をPNGでデスクトップに保存する
- ^ AppleScript Release Notes 10.11 Changes Folder Actions
- ^ OS X 10.11.5+Safari 9.1.1以降で、新たなAS制限機能が増える
- ^ tccKitで指定Bundle IDのアプリケーションの「オートメーション」認証状況を取得
固有名詞の分類
Mac OS |
AppleShare オプションキー Preferred Executable Format Hierarchical File System AppleScript |
アップルコンピュータ |
Nitro Core Image Apple Battery Charger Apple Store AppleScript |
スクリプト言語 |
Kross ActionScript UnrealScript REBOL AppleScript |
- AppleScriptのページへのリンク