OS/macOS用のオブジェクト指向のスクリプト言語。7にあたる)から採用されている。標準環境で利用でき、ある程度自然言語(英語)に似た構文を持つ。eventによって、システムや様々な対応アプリケーションにまたがって制御できる。標準搭載されるようになった[1]。外部リンク特徴編集カバーエリアの広さ編集アプリケーション操作の自動化、シェル、コマンドの呼び出し、画面上の部品の強制操作にWebコンテンツの強制コントロール、Cocoaフレームワークの呼び出しにiCloud経由のコンテンツ更新など、マクロ言語としてはカバーできる範囲がとても広い。そのうえ、GUIベースのアプリケーション開発まで行えるため、いったん覚えるとMacを用いた作業の生産性が向上する。他のアプリケーションを他のコンピュータからも操作できるため、セキュリティを考慮しさまざまな抑止機能がOSに用意されつつある(詳細は#制限機能を参照)。OSからmacOSを通じて継承された唯一のテクノロジーであり[2]、海外を中心に古くから開発者コミュニティが形成され[3]、GUIベースのアプリケーションのコントロールについての知見が蓄積されている。eventを送ることにより自動操作を実現する。通常はコンパイル済みのバイトコードが保存され実行される。x64)、記述した言語(AppleScript英語、AppleScriptフランス語、AppleScript日本語)などに依存しないコードが生成される。10.14で廃止になった[6])。eventに対応していればそのアプリケーションに処理を委ね、その処理結果を別のアプリケーションに対して用いることも可能である。Scripting[10]と呼ばれる機能を用いて、スクリプトからアプリケーションにメニュー操作やキー入力を伝達することも可能になっている。eventメッセージとして返す。バイトコードインタプリタ型の逐次実行で処理されるため[要出典]、ネイティブコードに比べると実行速度は劣るものの、アプリケーションの機能呼び出しを行わない場合にはスクリプト言語としては十分な速度で実行される[要出典]。Scriptingを用いたメニューなどの強制操作を行うと、さらに処理コストが増加し、時間がかかる。アプレット動作時のみ)などの、目的に特化した簡単なユーザインタフェースを提供している。これら以外のユーザインタフェースを利用するために、現在利用できる手段で一番簡単なやり方は、FileMakerで画面を作成し、ボタンに対してスクリプトステップ「AppleScriptを実行」を割り当てておくというものである。InDesignなどの一部のアプリケーションでは、簡易的なユーザーインタフェースをAppleScriptのプログラムから動的に生成する機能を備えている。App」プロジェクトを作成し、その中にAppleScriptコード(AppleScriptObjC)を記述する。Xcode上で一般のアプリケーション開発と同様にユーザインタフェースを作成できる。コントロール(GUIの部品)が操作されると、AppleScriptコード中の対応するイベントハンドラが呼び出される。OSでは『スクリプト編集プログラム』)が付属する。スクリプトエディタにAppleScript対応アプリケーションのアイコンをドラッグ・アンド・ドロップするとAppleScript用語辞書が表示され、これを参照しつつアプリケーションのコントロールを行う処理を記述する[11]。Debugger」を用いる必要がある。Debugger」で行える。Debuggerで行うことができる。StoreにAppleScriptで作成したアプリケーションを提出するには、Xcode上で記述・コードサインする必要がある。その他、テキストで書いたスクリプトをコマンドラインからosascriptコマンドでコンパイル・実行することも可能である。Builder)上でAppleScriptによるアプリケーション開発を行うこともできる。Builder上でバインディングによりAppleScriptプログラム中のプロパティ値にひもづけしたり、Cocoaの各種フレームワーク内のメソッドを呼び出す方式に変更された。異なるOSバージョン間の互換性編集AppleScript書類のフォーマットは維持されているため、基本的には互換性が確保されている。v10.7の64ビットへの移行などのOSの基盤の大変革期があったが、AppleScriptそのものについてはほぼ影響はなかった。AppleScriptの処理系そのものの変更が小刻みであったため、15年前に作られたソートルーチンがそのまま使えたりもする。AppleScriptだけでなくOSAXや外部のアプリケーションの機能を利用していた場合には、部品ごとに確認が必要となる。macOS標準添付のアプリケーションの機能がOSバージョンごとに異なる。これらを呼び出す処理を行っている場合にはチェックが必要である。AppleScriptにOSの機能を提供するために用意されている補助アプリケーションはOSバージョンによって変更されることがあるため、その存在および代替機能を確認する必要がある。一般的に、古いバージョンから新バージョンへの移行は、それなりに手間はかかるものの確認作業レベルで済む。逆に、新しいバージョンのOSから古いバージョンのOSにScriptを移植する場合には大幅に作業量が増える。v10.5以前は日本語のパスの扱いに問題があった)、それらを考慮した処理に変更する必要も生じる。古いmacOSが動作する実機と関連アプリケーションを用意し、きちんと動作検証や書き換え作業が必要になる。Scriptingを利用している場合には、メニュー構成やボタンの文字を変えただけで動かなくなる可能性があるため、そもそも異なるOSバージョン間でそのまま動く可能性は低い(ただし単純な修正で対応できる)。macOSそのもののバージョン)をuseコマンドを使って表記できるようになった。10.14以降で動かす場合には代替機能を探す必要もある(Cocoaの機能を呼び出したり、shellコマンドの機能を呼び出したりするのが一般的)。構文編集HyperCard用のスクリプト言語であるHyperTalkに似た、英語に近い構文が採用されており、基本的には習得しやすい。機能の異なるアプリケーションを操作するためには、それぞれアプリケーションごとに異なる命令やオブジェクト構造を知る必要があり、AppleScript対応アプリケーションのアイコンをスクリプトエディタでオープンすることで表示される「AppleScript用語辞書」を参照しつつ記述することになる。8.5以降は英語表現形式のみが採用されている。囲むことで日本語などを使用できる。v10.10でAppleScriptObjCがXcode上のみならず、スクリプトエディタ上でも利用できるようになったため、Objective-C風の表記も標準採用された。if通常は上記のように記述するが、より英文に近い以下のようなコードも記述できる。複数の処理を一行のif文に組み込むことはできないので、先ほどの構文を使用することになる。このような同義語が数多く存在するのもAppleScriptの特徴のひとつ)。v10.10でスクリプトエディタでもCocoaの機能を利用するAppleScriptObjCが導入された。このため、現行のmacOS上ではどのマシンでも、どのAppleScriptランタイム環境上でもCocoaの機能を利用できる状態になっている。AppleScriptObjCは従来のAppleScriptと比べて10倍以上の高速処理が可能である[13]。それはCocoaのメソッドを呼び出した場合であり、従来型のAppleScriptをAppleScriptObjC環境で記述しても速度は変わらない。AppleScriptObjCではObjective-CのBlocks構文やprotocolをサポートしていないため、Cocoaのフレームワークすべてが利用できるわけではない。Cocoaのクラス名やメソッド名でAppleScriptの予約語とコンフリクトするものについては「|」で囲う必要がある(例:NSURL、URL、document、count、propertiesなど)。2.0にくらべるとやや冗長な表記になる。Cocoaオブジェクトの結果表示やログ表示については、macOS標準添付のスクリプトエディタではサポートしていない。Debugger」の利用が必要である。stringAppleScript対応アプリケーションへのtellブロック内でAppleScriptObjCの命令を呼び出すとエラーになる。InDesignの書類から得られたデータをAppleScriptObjCを用いて高速にソートしたい場合などは、AppleScriptObjCの機能部分をサブルーチンとして分離し、InDesignへの命令ブロックと明示的に分ける必要がある。AppleScriptObjCで実行されるCocoa機能呼び出しはARC環境下で実行されるため、releaseなどのメソッドを呼び出すと実行環境ごとクラッシュする。独特な挙動編集スクリプトエディタ上でのコンパイル(構文確認)時に演算の優先順位を指定するため、AppleScript処理系がソースコード内にカッコ(「(」「)」)を自動的に補う動作を行う。ユーザーはこのカッコが自分の意図に合うかどうかを判断し、適宜カッコを補ったり移動させる必要がある。カッコが自動で付加されるのは、主に四則演算や文字列の連結演算、Cocoaオブジェクトへのメソッド実行などの記述時である。英文風に記述するため、「無意味句」を入れることができる。無意味句の代表的なものに「the」がある。theはプログラム内で何もプログラム的な動作を行わない。1のように無意味句を補うことができる。無意味句はプログラム的な動作を何も行わないが、それら自体が存在し、無意味句同士は別物として識別される。そのため、無意味句を補助的に用いてサブルーチン(ハンドラ)の宣言を行うことも可能。underなどがあり、サブルーチンのパラメータを指定する装飾子としてこれらの無意味句を利用できる。aSubアプリケーション操作対象編集アプリケーションの操作による作業の自動化や、複数のアプリケーションの操作によるソフトウェア・ロボットの構築が可能であるが、操作対象の種類によって利用する技術や手法が変わる。ローカルアプリケーション編集Safariやコンタクト、カレンダーなどのmacOS標準添付アプリケーションの多くがAppleScriptからのコントロールに対応しており、主要機能にアクセスできる。対応アプリケーションであっても機能のすべてがAppleScriptに解放されているわけではない。AppleScript用語辞書に定義されている範囲のみである。Scriptingによるメニューやボタンなどの強制操作が時と場合によって必要になる。この強制操作機能はOSのデフォルト設定ではオフになっているほか、アプリケーション/アプレット/Scriptごとに許可/禁止するようになっている。レイヤー上のコマンドを呼び出すことができる[14]。scriptコマンドでは設定されている環境変数が異なるため、Terminal.app上で実行できていた処理ができなくなる場合がある。指定したコマンドにパスが通っていないことや、カレントディレクトリが異なること等はエラーの原因となる。これは環境変数の内容を明示的に指定することや、利用コマンドをフルパスで表記することで回避できる(環境変数内容はenvコマンドを実行して確認できる)。events」の機構を用いて、TCP/IPネットワーク(主にLAN)内の他のMac上のアプリケーションをコントロールできるようになっている。eventsはオフになっている。1台のMacでは処理が追いつかない場合、この機構を用いて複数台のMacに仕事を割り振り分散処理を行うことができる。Mac上で稼働する仮想環境上でmacOSを動作させ、仮想環境との間での分散処理も可能である[15]。xmlrpc)[16][17][18][19][20]。APIを呼び出すことも可能である[21]。Scriptingで強制的に操作することで、Webサービスにログインして必要な情報を取得するなどの処理が可能である。iOSアプリケーション編集iOS上でAppleScriptが動くわけでも、iOSのアプリケーションを直接コントロールできるわけでもないが、iCloudを経由して間接的にデータの変更を行える。macOS上のリマインダーを更新するとiOS上のリマインダーも更新される。これを利用して、iOS側に大量のデータを登録したい場合にMac上でAppleScriptなどによってデータを追加するといった方法が可能である。iPhoneとひもづけされたMacからAppleScriptを用いて電話をかけたりSMSメッセージを送信したりもできる[22]。Scriptingにより操作や情報の取得などが可能である。そのため、AppleScriptからシミュレータ上のiOSアプリを操作し、操作テストを実施して段階ごとに画面キャプチャを記録することも行われている。v10.10以降では、Apple純正およびサードパーティー製CocoaフレームワークをAppleScriptから直接呼び出すことが可能となっている[23]。コンタクト(住所録)やカレンダーの情報をフレームワーク経由で検索・操作できるようになった[24]。Library.xmlを検索するよりも高速に行える。v10.9以降で、AppleScript自体をライブラリ化して再利用できるようになった。このライブラリにはAppleScript用語辞書を持たせることが可能なため、AppleScriptの命令語をAppleScriptで記述したライブラリによって拡張することが可能である。さまざまな実行環境編集AppleScriptは中間コードに翻訳されて逐次実行されるが、以下のようなさまざまな保存・実行環境(ランタイム環境)を持つため、実行環境によって動作が微妙に異なり、想定していた通りに動かない場合がある。実行中のログ表示が行えるのはスクリプトエディタでオープンしてスクリプトエディタで実行させた場合、およびXcode上で作成してデバッグビルドを行なっている場合の2つのケースにかぎられる。フォルダアクションで実行中のAppleScript書類をスクリプトエディタでオープンさせたからといって、フォルダアクションで実行中のAppleScriptのログがスクリプトエディタ上にログ表示されることはない。スクリプトエディタ上で実行編集スクリプトエディタ上に記述して、スクリプトエディタ上で実行する形態である。この際の実行環境はスクリプトエディタであり、途中でAppleScriptの実行を停止させたり、ログ表示させた内容を確認したりできる(ログ表示させると実行速度がいちじるしく低下する)。セキュリティ上の制約がもっとも少ない実行環境でもあり、他の実行環境では動かせないコードもこの環境で動くケースが多い。アプレット/ドロップレットとして保存して実行編集スクリプトエディタ上で記述して、アプリケーションとして保存、あるいはアプリケーションとして書き出したものである。この形態のものをアプレットと呼ぶ。アプレット実行時にはアプレット用のランタイム環境が用意されている。v10.10より)などの機能が利用できる。ファイル/フォルダのドラッグ&ドロップを受け付けるアプレットをドロップレットと呼んで区別する(アイコンが異なる)が、ランタイム環境は同じである。アプレット実行時にログ表示などの機能は利用できないため、この実行形態のままではバグの確認や修正が困難である。アプレットとして書き出す前にスクリプトエディタ上で内容に問題がないことを確認する必要がある。Automator上で実行編集Automatorのワークフロー記述の一部としてAppleScriptを使用することもできる。Automator上のアクション「AppleScriptを実行」がスクリプトエディタに近い機能(ログ表示、結果表示)を持つが、他のAppleScript対応アプリケーションのAppleScript用語辞書をブラウズしたり、途中で実行を停止させるなどの機能はない。v10.7で導入された。Applet」を選択することで新規作成できる。Builderによるユーザーインタフェースの作成が行えず、デバッグ機能も乏しい。実行はアプレット形式でのみ行う。App」を呼び出すと作成される。Store上でのアプリケーション販売が可能な形式である。一般的なCocoaアプリケーションをAppleScriptで開発する環境であり、一般的なCocoaアプリケーションに近いものが作れるが、一般的なCocoaアプリケーションを作成するレベルの知識が必要とされる。Xcode内蔵のエディタ上で編集するAppleScriptは、文法要素に応じた構文色分け機能が利用できず、デバッグも行いにくい。複数のスクリプトファイルにプログラムを分割した場合のハンドラ呼び出し方法にクセがある。スクリプトメニューに登録して実行編集macOSのメニューバーから所定のフォルダ内のAppleScriptを実行できる、macOS標準装備の「スクリプトメニュー」に登録・実行した場合の実行環境も、OSのバージョンに応じてさまざまな変更が加わってきた。v10.10からはosascriptコマンドで実行する実装になった。このため、スクリプトメニューから複数のAppleScriptを同時に実行させることが可能になったが、実行するScript同士で共通のアプリケーションにアクセスした場合のバッティングまでは面倒を見てくれない。スクリプトメニューから実行中のScriptの停止を行えるが、実行中のログ表示はできない。指定のフォルダ内容を数秒間隔で監視し、変更が加わるとAppleScriptの実行を行う機構である。v10.10)ことが問題である[25]。v10.10以降はスクリプトエディタ上での実行にきわめて近いランタイム環境が提供されている。同一ではないため、スクリプトエディタ上で記述すれば発生しないような問題に直面する場合がある。一例として、AppleScript中からNSWindowを動的に生成し、そのウィンドウ上の各種GUI部品でユーザーからの操作を受け付けたい場合、操作が処理されないといった問題がある。Proスクリプトの「AppleScriptを実行」スクリプトステップ中にAppleScriptをコピー&ペーストで入れて実行する方が数倍高速に実行される。画面の再描画などを抑止するほか、高速実行するための仕組みを備えている[要出典]。OfficeのVBAスクリプト内でも、AppleScriptを呼び出す仕組みが用意されている。v.15.xでは「AppleScriptTask」コマンドによりファイル名を指定して外部のAppleScriptを実行できるようになっている。InDesignの「スクリプト」パレット中からAppleScriptを呼び出すことが出来、この際に画面の再描画を抑止できるため高速実行(おおよそ2倍)が可能となっている。InDesignについては大量のデータ処理時にクラッシュが発生するため、処理速度より安定稼働を重視すると外部からのコントロールも選択肢に入る。Debugger」というAppleScriptとは別のOSA言語を実行することになる。厳密にいえばAppleScriptそのものを実行するわけではないため、振る舞いが異なる箇所が出てくることは否定できない。OS時代)に比べると純正AppleScript環境との互換性は大幅に高まっている。Debuggerを使うべきではない」という方針の開発現場もあるのは、この「互換性問題」ゆえである。運用上、注意すべき項目編集この節には独自研究が含まれているおそれがあります。問題箇所を検証し出典を追加して、記事の改善にご協力ください。議論はノートを参照してください。(2016年5月)構文チェックが甘いので間違っている箇所を見つけにくい編集スクリプトエディタ上でのコンパイル(実質的には構文チェック+中間コードへの置き換え)時には、AppleScriptの基本的な文法を外れなければ、それがたとえ実行できない命令の組み合わせであってもエラーにならない。実行時にエラーとなる。application」といったできそうもないプログラムを組めそうに見え、実際にFinderへのtellブロック内に記述するとコンパイルを通ってしまう。tell実際には、アプリケーション側が想定している命令語の組み合わせは限定されたものである。想定された条件下によっては実行できるが、条件がそろわないと実行してもエラーになったり無意味な結果になるものもある。このため、アプリケーションが備えている機能を逸脱しない表記、アプリケーションの用語辞書で実現可能な記述パターンの情報を収集することには大いに意義がある(Appleが主催するメーリングリストのアーカイブの検索がこれに適している)。Scriptはこまめに実行して想定どおりの実行結果が得られているかを確認するとよい。機能の分布が不均一編集たとえば、printコマンドでプリンタを指定して書類を印刷する機能が存在していても、LAN内に存在するプリンタ名一覧を取得する機能はデフォルトでは用意されていない。同様に、テキストの音声読み上げを行うsayコマンドで音声キャラクタの名称を指定できるのに、現在システムにインストールされている音声名称の一覧を取得する機能が存在していない。scriptやCocoaのサービスを呼び出して、取得する手段を別途用意する必要がある[26][27]。何らかの条件に基づいてオブジェクトを抽出する処理が、アプリケーションコントロールでは日常的に発生する。リマインダーで名称(name)に「発売日」を含む項目のみ抽出するといった処理である。そのような場合に、オブジェクトの抽出をせずに「とりあえずすべてのオブジェクトを取得して、ループで条件一致するものを抽出する」ようなコードでは処理が遅くなってしまう。フィルタ参照[28]を使って対象オブジェクトのしぼりこみを行うと速度を向上できる。何らかのオブジェクトの属性値を取得したい場合に、複数の属性値を何回かに分けて取得するよりもpropertiesでまとめて属性を取得した方が速いケースなどがある。アプリケーションをコントロールするために存在しているAppleScriptであるが、アプリケーションとの通信回数を減らすことが処理の高速化につながる。OS時代にはFinderに対して再帰処理で取得するように書いていたが、現代のmacOSではSpotlightを用いてファイル一覧を取得するとずっと速く処理できる。このように、macOSの機能の移り変わりを意識していないと処理速度が大幅に変わる。アプリケーションの過度のローカライズにともなう互換性問題編集iTunes、Keynote、Pages、Numbersなどアップル純正アプリケーションに固有の問題が存在する。アプリケーションのローカライズをやりすぎて、AppleScript関連の機能までローカライズされてしまうことが多々ある。このため、海外で流布しているAppleScriptの、主にオブジェクト名称を英語名表記から日本語名表記に変更しないと日本語環境上では実行できない(エラーになる)ケースが存在する[29]。制限機能編集あまりに拡張され、できることが増えすぎたため、AppleScriptの一部機能を抑止するための機構がmacOSに用意されつつある。以下の機能についてはデフォルトでは禁止状態になっているが、管理者パスワードを入力すれば実行を許可するようになっている。Eventsに対し、macOS標準装備の各アプリケーションは応答しないようになっている。Eventsはオフになっている。Scriptingについては、「システム環境設定」の「セキュリティとプライバシー」>「アクセシビリティ」で個別に許可を行うようになっている。デフォルト設定では、どのプログラムに対しても許可していない。javascript命令を実行できなくなった[30]。許可すれば、その状態は継続される。Pro自身を操作すること)がデフォルトの権限セットのままでは許可されない状態になっている。Stepの実行が行われないという現象に直面することがある。EventおよびActive-XによるFileMaker操作の実行を許可」にチェックを入れれば実行できるようになる。10.14より、システム環境設定の「セキュリティとプライバシー」>「プライバシー」項目にセキュリティ度を調整するための各種機能が追加され、AppleScriptもその影響を受けるようになった。Machineバックアップなどのデータや特定の管理設定へのアクセスを許可する。AppleScriptを利用するユーザーはこの項目に「スクリプトエディタ」と「スクリプトメニュー」を登録しておく必要がある。「オートメーション」項目では、他のアプリケーション制御の許可、および取り消しを行える。スクリプトエディタ以外のアプリケーションで、他のアプリケーションを制御する場合には、動作中の最初の要求時にユーザーに対して承認を求めるダイアログを表示する。承認されたアプリケーションはこの「オートメーション」項目に表示されるようになる。実行したユーザーが承認しなかった場合にも、本項目にチェックボックスがオフになった状態で表示されるため、あとからシステム環境設定上の本項目において承認を行う(チェックボックスをオンにする)ことが可能である。一度「オートメーション」項目に登録され、ユーザーの承認を得ていれば、毎回ユーザーの承認ダイアログが表示されることはない。逆に、本「オートメーション」項目に意図的に登録させたい場合、アプリケーションのバージョン番号を確認したり最前面に表示させる(activate)コマンドを実行させる程度ではシステムが反応しない。他のアプリケーションを操作するAppleScriptアプレット/AppleScriptアプリケーションにおいて、初回起動時に「オートメーション」項目に登録される程度の簡単な(害のない)アプリケーション操作を意図的に行う必要が生じるようになった。AppleScript側から任意のアプリケーションに対する操作が許可されているかを知ることは、サードパーティのフレームワークを呼び出すことで可能となっている[31]。10.14においてはApple純正のスクリプトエディタにも制限が加わった。ホームディレクトリ下の「ライブラリ」フォルダ中の「Frameworks」フォルダ(デフォルトでは存在しない)へのアクセスがSIPにより禁止された。Debugger」を利用するか、SIPそのものを解除する必要がある。Eventsでネットワーク上の他のMac上のAppleScriptから命令を受け付ける場合、呼び出す側と受け付ける側のユーザー名が同じである必要があるようになった。簡単なシェルコマンドでこの制限は無効にすることができる。バグ編集この節には独自研究が含まれているおそれがあります。問題箇所を検証し出典を追加して、記事の改善にご協力ください。議論はノートを参照してください。SierraにおいてはAppleScriptをドロップレットとして保存し、ファイルをドラッグ&ドロップした場合には、ファイルの処理が行われなかったりファイル処理の順序が以前のOSのとおりに行われなかったりする。これは、ファイルの拡張属性(Xattr)の1つ「com.apple.quarantine」により発生する。インターネット上からダウンロードしたファイルなどは、その安全性が担保されていない状態であると(macOSが)みなし、この「com.apple.quarantine」属性が添付される。ユーザーの操作によりファイルのオープンを許可された(「ダウンロードされたファイルですが、オープンしてもよいですか?」という確認ダイアログでユーザーに承認)場合には処理されるが、同属性がついたままだとドロップレットによる処理が行われない。一応回避手段は存在するが、初心者には理解が難しいものとなっている。sayコマンドで日本語読み上げ音声を指定して「もげる」「捥げる」を読み上げると正常に読み上げられない(NSSpeechManagerのバグで、SwiftやObjective-Cでも同様のバグが発生し、iOSでも状況は同じ)。Enum「NSNotFound」の定義が間違っており、-1ではない値を返す(10.13.1にて修正)。Bridgeの定義ファイルに問題があり、いくつかの機能が正常に呼び出せない状況が確認されている。NSRectが属性ラベルつきのレコード型ではなくリスト型に変換されるようになっている。10.13.xの挙動PDFViewに対してcurrentPage()を実行してもPDFPageが返ってこない。このため、PDFView上でPDFを表示させるGUIプログラムに影響が出ている。2016年5月29日閲覧。2016年5月29日閲覧。2016年5月29日閲覧。2016年5月29日閲覧。Managerについてのリファレンス。Apple担当者の手違いでしばらくの間「Retired」扱いになっていたが、手違いであったことが2016年2月に判明し、修正された。3.0のもとで利用可能です。プライバシーデスクトップ。