AppleScript(アップルスクリプト)は、Appleが開発したClassic Mac OS/macOS用のオブジェクト指向スクリプト言語。System 7(Mac OS 7にあたる)から採用されている。

AppleScript
パラダイム オブジェクト指向スクリプト言語
登場時期 1993年
最新リリース 2.8
型付け 弱い動的型付け
影響を受けた言語 HyperTalk, Objective-C
プラットフォーム System 7, Mac OS 8, Mac OS 9, macOS
ウェブサイト AppleScript Overview
拡張子 .applescript .scpt .scptd
テンプレートを表示

Mac OSApple event

AppleScriptMac OSOpen Scripting Architecture (OSA) OSAOS X v10.10JavaScript for Automation (JXA) [1]

特徴

編集

カバーエリアの広さ

編集

WebCocoaiCloudGUIMac (OS) #

Classic Mac OSmacOS[2][3]GUI

仕組み

編集

AppleScriptOSAApple eventOSCPU (68000, PowerPC, x86, x64, Apple Silicon) AppleScriptAppleScriptAppleScript

AppleScript[4]Scripting Additions/OSAXOpen Scripting Architecture eXtension[5]AppleScriptAppleScript LibrariesOSAXmacOS 10.14[6]

AppleScriptMac OSApple eventUser Interface Scripting[7]GUI Scripting[8][9]UI Element Scripting[10]Apple eventApple event

[][]GUI Scripting

ユーザインタフェース

編集

AppleScript (display dialogdisplay alert) (display notification) (choose from list) (choose file) (choose folder) (choose file name) Mac OS X v10.10

Mac OS XAppleScript

Adobe InDesignAppleScript

XcodeAppleScript AppAppleScriptAppleScriptObjCXcodeGUIAppleScript

開発環境

編集

macOSMac OS X v10.0v10.4Mac OS X v10.5v10.9AppleScriptMac OS

AppleScriptAppleScript[11]

Late Night SoftwareScript DebuggerCocoaAppleScript LibrariesAppleScriptScript Debugger

AppleScriptAppleScript DebuggerMac App StoreAppleScriptXcode

osascript

AppleXcodeProject BuilderAppleScriptAppleScriptCocoaAppleScriptObjC[12]Mac OS X v10.1v10.5AppleScript StudioInterface BuilderAppleScript StudioMac OS X v10.6AppleScriptGUIInterface BuilderAppleScriptCocoa

異なるOSバージョン間の互換性

編集

AppleScriptMac OS X v10.4CPUMac OS X v10.764macOS 11.0Apple SiliconARMOSAppleScriptAppleScript15使

AppleScriptOSAX

macOSOSAppleScriptOSOS

OSOSScriptOSMac OS X v10.5macOS

GUI ScriptingOS

OS X v10.10AppleScriptAppleScript macOSuse使
AppleScript version macOS version useコマンド記述
2.4 10.10 use AppleScript version "2.4"
2.5 10.11, 10.12 use AppleScript version "2.5"
2.7 10.13, 10.14 , 10.15, 11.0 use AppleScript version "2.7"
2.8 12.0, 13.0, 14.0, 15.0 use AppleScript version "2.8"

また、macOS 10.14以降でサードパーティ製のOSAXが使用できなくなったため、それらを使用しているScriptをmacOS 10.14以降で動かす場合には代替機能を探す必要もある(Cocoaの機能を呼び出したり、shellコマンドの機能を呼び出したりするのが一般的)。

構文

編集

HyperCardHyperTalkAppleScriptAppleScript

Mac OS 8.5 | 使

Mac OS X v10.10AppleScriptObjCXcodeObjective-C

=myItem0


if myItem = 0 then
    display dialog "持ち物がありません" buttons {"OK"} default button "OK"
end if

通常は上記のように記述するが、より英文に近い以下のようなコードも記述できる。ただし複数の処理を一行のif文に組み込むことはできないので、先ほどの構文を使用することになる。下記のコードでは比較演算子の“等価”を表す = が is に置き換えられている(is は is equal to と書くこともできる。このような同義語が数多く存在するのもAppleScriptの特徴のひとつ)。

if myItem is 0 then display dialog "持ち物がありません" buttons {"OK"} default button "OK"

変数名に日本語を用いた例

if |持ち物| is 0 then display dialog "持ち物がありません" buttons {"OK"} default button "OK"

日本語(現在は利用できない)

もし「持ち物」が0ならば
    “持ち物がありません”をボタンリスト:{“OK”}、デフォルトボタン:“OK”で表示する
以上

AppleScriptObjC構文

編集

Mac OS X v10.6XcodeMac OS X v10.10CocoaAppleScriptObjCmacOSAppleScriptCocoa

AppleScriptObjCAppleScript10[13]AppleScriptstringlistrecordCocoaNSStringNSArrayNSDictionaryCocoaAppleScriptAppleScriptObjCAppleScriptCocoa

AppleScriptObjCObjective-CBlocksprotocolCocoaCocoaAppleScript|NSURLURLdocumentcountpropertiesObjective-C 2.0

CocoamacOSCocoaScript Debugger


aString

Objective-C
NSString *aString = @"123/abc/ABC.txt";
[aString lowercaseString];

AppleScriptObjC

use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aString to current application's NSString's stringWithString:"123/abc/ABC.txt"
(aString's lowercaseString()) as string

AppleScripttellAppleScriptObjCAdobe InDesignAppleScriptObjCAppleScriptObjCInDesign

AppleScriptObjCCocoaARCrelease

独特な挙動

編集

スクリプトエディタ上でのコンパイル(構文確認)時に演算の優先順位を指定するため、AppleScript処理系がソースコード内にカッコ(「(」「)」)を自動的に補う動作を行う。ユーザーはこのカッコが自分の意図に合うかどうかを判断し、適宜カッコを補ったり移動させる必要がある。

カッコが自動で付加されるのは、主に四則演算や文字列の連結演算、Cocoaオブジェクトへのメソッド実行などの記述時である。

独特な要素

編集

thethe
set end of aList to 1

のような配列変数の末尾に数値を追加する記述を行なった場合、英文風に読みやすくするため、

set the end of aList to 1





AppleScript
about, above, against, apart from, around, aside from, at, below, beneath, beside, between, by, for, from, instead of, into, on, onto, out of, over, since, thru (throughも可), under

などがあり、サブルーチンのパラメータを指定する装飾子としてこれらの無意味句を利用できる。

set a to aSub for 10 at 20
--> 30

on aSub for aInt at bInt
      return (aInt + bInt)
end aSub

アプリケーション操作対象

編集

アプリケーションの操作による作業の自動化や、複数のアプリケーションの操作によるソフトウェア・ロボットの構築が可能であるが、操作対象の種類によって利用する技術や手法が変わる。

ローカルアプリケーション

編集

SafarimacOSAppleScript

AppleScriptAppleScript

GUI ScriptingOS//Script/

UNIXコマンド

編集

do shell scriptBSD (UNIX) [14]Terminal.appdo shell scriptTerminal.appenv

リモートアプリケーション

編集

macOSApple eventsTCP/IPLANMacmacOSOSApple events

1MacMacMacmacOS[15]

Webサービス

編集

SOAP、XML-RPCを呼び出すための命令が標準で装備されている(call soap、call xmlrpc)[16][17][18][19][20]。Cocoaの機能を用いてRESTful APIを呼び出すことも可能である[21]

これらのサービスが存在しないサイトに対しても、Safariのdo JavaScriptコマンド経由で操作したり、GUI Scriptingで強制的に操作することで、Webサービスにログインして必要な情報を取得するなどの処理が可能である。

iOSアプリケーション

編集

macOS 11.0Apple Silicon MaciOSApple Silicon MaciOSAppleScriptiOSGUI ScriptingmacOS

ApplemacOSiOSiCloudmacOSiOSiOSMacAppleScriptiPhoneMacAppleScriptSMS[22]

iOSiOSGUI ScriptingAppleScriptiOS

各種フレームワーク

編集

Mac OS X v10.10AppleCocoaAppleScript[23][24]iTunes LibraryiTunes.appiTunes Music Library.xml

AppleScript Libraries

編集

Mac OS X v10.9AppleScriptAppleScriptAppleScriptAppleScript

ショートカット

編集

macOS 12以降では、iOS系のOSから移植された自動化ツール「ショートカット」(Shortcuts.app)が利用できる。このツール自体がAppleScriptからの操作に対応しており、指定のショートカット(ユーザーが定義した自動化ワークフロー)を実行できるほか、Shortcuts.appが起動していない状態でも、AppleScriptからの実行専用バックグラウンドツール「Shortcuts Events」を指定してショートカットの実行が可能。

AppleScriptから音声エージェント「Siri」を呼び出すAppleScriptライブラリ「AgentCallerLib」がPiyomaru Softwareより提供(電子書籍の付録として提供)されており、指定の文字列をSiriに渡して実行できるようになった。コマンドの冒頭に「Hey Siri」を書く必要はない。同ライブラリは、macOS 12以降をサポートしている。

さまざまな実行環境

編集

AppleScript

Xcode2AppleScriptAppleScript

スクリプトエディタ上で実行

編集

AppleScript

アプレット/ドロップレットとして保存して実行

編集

スクリプトエディタ上で記述して、アプリケーションとして保存、あるいはアプリケーションとして書き出したものである。この形態のものをアプレットと呼ぶ。アプレット実行時にはアプレット用のランタイム環境が用意されている。この環境で実行すると、on idleによるタイマー割り込み、ファイルやフォルダをドラッグ&ドロップ受信する機能、ハンドラの実行後に終了しない、プログレスバーの表示機能(Mac OS X v10.10より)などの機能が利用できる。ファイル/フォルダのドラッグ&ドロップを受け付けるアプレットをドロップレットと呼んで区別する(アイコンが異なる)が、ランタイム環境は同じである。

アプレット実行時にログ表示などの機能は利用できないため、この実行形態のままではバグの確認や修正が困難である。アプレットとして書き出す前にスクリプトエディタ上で内容に問題がないことを確認する必要がある。

Automator上で実行

編集

AutomatorAppleScript使AutomatorAppleScriptAppleScriptAppleScript

Cocoa-AppleScript Appletとして保存して実行

編集

Mac OS X v10.7で導入された。スクリプトエディタ上で「ファイル」>「テンプレートから新規作成」>「Cocoa-AppleScript Applet」を選択することで新規作成できる。AppleScriptObjCによるプログラムをスクリプトエディタ上で記述できるが、Interface Builderによるユーザーインタフェースの作成が行えず、デバッグ機能も乏しい。実行はアプレット形式でのみ行う。

Xcode上でAppleScript Appとして作成してビルドして実行

編集

XcodeFileProjectOtherAppleScript AppMac App StoreCocoaAppleScriptCocoaCocoaXcodeAppleScript

スクリプトメニューに登録して実行

編集

macOSのメニューバーから所定のフォルダ内のAppleScriptを実行できる、macOS標準装備の「スクリプトメニュー」に登録・実行した場合の実行環境も、OSのバージョンに応じてさまざまな変更が加わってきた。Mac OS X v10.10からはosascriptコマンドで実行する実装になった。このため、スクリプトメニューから複数のAppleScriptを同時に実行させることが可能になったが、実行するScript同士で共通のアプリケーションにアクセスした場合のバッティングまでは面倒を見てくれない。スクリプトメニューから実行中のScriptの停止を行えるが、実行中のログ表示はできない。macOS v10.14からは独立したアプリケーションとして提供されるようになった。

フォルダアクションに登録して実行

編集

AppleScriptmacOSMac OS X v10.10[25]macOS v10.11FSEventsScript

Terminalからosascriptコマンドで実行

編集

OSdisplay dialogMac OS X v10.10AppleScriptNSWindowGUI

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上でデバッグ実行

編集

AppleScriptScript DebuggerAppleScriptAppleScript DebuggerAppleScriptOSAAppleScriptClassic Mac OSAppleScript便Script Debugger使

ショートカットアクション「AppleScriptを実行」上で実行

編集

Shortcuts.appのアクションに「AppleScriptを実行」が用意されており、ショートカット内でのAppleScript実行が可能である。このアクションはmacOS専用であり、他のOS上では実行できない。Cocoaの機能呼び出しや、ユーザー環境にインストールされたAppleScript Librariesの機能呼び出しなどが可能。このことにより、Mac上であればSiri経由で日本語音声認識/テキスト操作によりAppleScriptを実行できるようになった。

制限機能

編集

あまりに拡張され、できることが増えすぎたため、AppleScriptの一部機能を抑止するための機構がmacOSに用意されつつある。以下の機能についてはデフォルトでは禁止状態になっているが、管理者パスワードを入力すれば実行を許可するようになっている。

リモートApple Eventsへの応答禁止

編集

ネットワーク上の他のMacからのコントロールを行うリモートApple Eventsに対し、macOS標準装備の各アプリケーションは応答しないようになっている。また、出荷時のデフォルト設定で、リモートApple Eventsはオフになっている。

GUI Scriptingの実行禁止

編集

画面上のメニューやボタンなどを操作するGUI Scriptingについては、「システム環境設定」の「セキュリティとプライバシー」>「アクセシビリティ」で個別に許可を行うようになっている。デフォルト設定では、どのプログラムに対しても許可していない。

Safari上でのdo javascript命令の実行禁止

編集

Safari 9.1.1Apple EventsJavaScriptAppleScriptSafarido javascript[26]

FileMaker Pro上での拡張アクセス権におけるApple Eventによる操作許可設定

編集

FileMaker Pro v16より、FileMaker Script中におけるAppleScriptの実行(正確にいえば、AppleScriptからFileMaker Pro自身を操作すること)がデフォルトの権限セットのままでは許可されない状態になっている。そのため、より以前のバージョンで作成したFileMaker ProデータベースをFileMaker Pro v16でオープンすると、FileMaker Script Step実行時に「実行権限エラー」ダイアログが表示され、Script Stepの実行が行われないという現象に直面することがある。このような場合には、拡張アクセス権で「Apple EventおよびActive-XによるFileMaker操作の実行を許可」にチェックを入れれば実行できるようになる。

「セキュリティとプライバシー」による権限設定(macOS 10.14より)

編集

macOS 10.14調AppleScript

MacSafariTime MachineAppleScript





activateAppleScript/AppleScriptAppleScript[27]

SIPによる機能制限(macOS 10.14より)

編集

macOS 10.11以降、SIPによる機能制限が段階的に強化され、macOS 10.14においてはApple純正のスクリプトエディタにも制限が加わった。ホームディレクトリ下の「ライブラリ」フォルダ中の「Frameworks」フォルダ(デフォルトでは存在しない)へのアクセスがSIPにより禁止された。macOS 10.14上でこの制限を回避するには、サードパーティの開発環境「Script Debugger」を利用するか、SIPそのものを解除する必要がある。

リモートApple Eventsの応答ユーザー名制限(macOS 10.15より)

編集

macOS 10.15以降、リモートApple Eventsでネットワーク上の他のMac上のAppleScriptから命令を受け付ける場合、呼び出す側と受け付ける側のユーザー名が同じである必要があるようになった。なお、簡単なシェルコマンドでこの制限は無効にすることができる。

脚注

編集


(一)^ JavaScript for Automation Release Note

(二)^ Leopard 5System 71990

(三)^ 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. 2016529

(八)^ AppleScript Overview - AppleScript Utilities and Applications - System Events and GUI Scripting. 2016529

(九)^ OS X: Using AppleScript with Accessibility and Security features in Mavericks. 2016529

(十)^ GUI ScriptingUI element Scripting

(11)^ 

(12)^ AppleScriptObjC Release Notes

(13)^ AppleScript sorting performance comparison

(14)^ Technical Note TN2065: do shell script in AppleScript. Mac Developer Library. Apple, 2006-03-23.

(15)^ ParallelesOSOS XAppleScript

(16)^ 便

(17)^ 便XML-RPCJIS56便

(18)^ 便2

(19)^ 便便int

(20)^ 便XML-RPC便6JIS

(21)^ REST APIGETPOSTPUTDELETEmethod

(22)^ AppleScript

(23)^ ZipZap framework使Zip

(24)^ ContactsPNG

(25)^ AppleScript Release Notes 10.11 Changes Folder Actions

(26)^ OS X 10.11.5Safari 9.1.1AS

(27)^ tccKitBundle ID

参考文献

編集
  • 「AppleScript Studioでぜんまいびゅんびゅん」, 掌田津耶乃 (2003)ISBN 4-7561-4279-6
  • 「AppleScriptリファレンス」, こばやしゆたか/AppleScriptリファレンス制作委員会 (1999)ISBN 4-7973-1011-1
  • 「AppleScript言語ガイド 英語表現形式」, Apple Computer Inc. (1997) ISBN 4-7952-9669-3
  • 「AppleScriptでぜんまいびゅんびゅん」, 掌田津耶乃 (1995)ISBN 4-7561-1068-1

関連項目

編集

外部リンク

編集