スクリプトエディタ

スクリプトエディタは、macOS標準搭載の、AppleScriptなどのOSA (Open Scripting Architecture) 言語を記述、実行、保存、簡易デバッグするためのApple製GUIアプリケーションである。OSA言語はmacOSで動くコンピュータ上のGUIアプリケーションの自動化、機能の拡張や再構成のために用意されている機構。
スクリプトエディタは、Classic Mac OSから続いており、現行のmacOSに標準搭載されている。ただし、macOSのバージョンによって呼称が異なる。- Classic Mac OS：スクリプト編集プログラム- Mac OS X 10.1〜10.6：スクリプトエディタ- OS X 10.7〜10.9：AppleScriptエディタ- OS X 10.10〜：スクリプトエディタ

**所在**
OS X 10.6までは「アプリケーション」フォルダに入っていたが、OS X 10.7からは「ユーティリティ」フォルダに入っている。

**ファイル保存形式**
スクリプトエディタが保存可能なファイル形式は、プレーンテキスト形式 (.applescript)、コンパイル（構文確認）ずみスクリプト (.scpt)、スクリプトバンドル (.scptd)、アプレット (.app)。OS X 10.8でAuto Saveに対応したため、構文未確認状態（＝中間コードへの変換前）のスクリプトでも保存できるようになった。
バンドル形式のスクリプト (.scptd) を保存すると、バンドル内を直接操作するための編集ペインが表示できるようになり、バンドル内にスクリプトライブラリや各種Cocoa Frameworkの追加/削除/移動が可能になる。また、バンドルIDやバージョン番号などもバンドル形式時にのみ編集可能となる。

**記述OSA言語の切り替え**
macOSのOSA機構は登場当初の1993年から、アプリケーション操作自動化のためのOSA言語に複数言語をインストールして切り替え運用するスタイルを許容するようになっており、現在ではAppleScriptにくわえてJavaScriptベースのJXA (JavaScript for Automation) が標準搭載されている。これらのOSA言語の切り替えはOSA言語ポップアップメニューで行う。
現行のAppleScriptおよびJXA間、あるいはかつて存在していた Shell OSA、Tcl OSA、Ruby OSA、PythonOSA、Perl OSA、 JavaScript OSAなども実際にインストールして当時のスクリプトエディタ上で切り替えが可能なことを確認している（これらのOSA言語はOS X 10.7の64ビット化に対応できずに開発が打ち切られた）。
ただし、OSA言語ポップアップで記述言語を切り替えたとしても、記述中のScriptの内容が他のOSA言語に自動で翻訳されることはない。

**コード署名**
スクリプトエディタでは、スクリプトのアプリケーション書き出し時にコードサインを行うことができる。そのためにはmacOS開発者プログラムに登録して（有償）、証明書をダウンロードし、開発環境にインストールしておく必要がある。ただし、Xcode上でコードサインするのとは異なり、プロダクトごとに個別の証明書をダウンロードする必要はない。アプリケーション開発者ID (Developer ID) を指定すれば、コード署名が行える。

**制限事項**
Mac OS X 10.2まで、スクリプトエディタはCarbonベースで開発されており、編集可能なスクリプトに32Kバイトの上限が存在していた。Mac OS X 10.3ですべてCocoaベースで書き直されており、この32Kバイトの制限も撤廃された。OS X 10.7で64ビットアプリケーションに書き直され、32ビットOSAXとの互換性が失われた（スクリプトエディタ自体を32ビット起動すれば使えないことはない）。
OSA言語モジュールのインストールや、OSA言語の命令語拡張のためのスクリプティング拡張書類 (OSAX)、Script Librariesなどの管理についてスクリプトエディタは一切関知していない。
スクリプトエディタ上でGUI Scriptingを用いてGUI部品を強制的に操作する記述を行おうとしても、デフォルト時にはスクリプトエディタ自体にその機能にアクセスする許可が出ていない。このため、システム環境設定の「セキュリティとプライバシー」＞「プライバシー」の「アクセシビリティ」項目でスクリプトエディタに「コンピュータの制御を許可」する必要がある（初回時のみ）。

**拡張方法**

**スクリプト**
スクリプトエディタ自体がOSA言語からコントロール可能な（スクリプタブルな）アプリケーションであり、AppleScriptなどのOSA言語からコントロール可能である。外部スクリプトやOS標準装備のスクリプトメニューからスクリプトを呼び出して、スクリプトエディタ自身を操作できる。

**スクリプトアシスタント**
スクリプトエディタの編集エリア上でControlキーを押しながらクリック、あるいは複数ボタンが存在しているマウスなどで右クリックすると、コンテクストメニューが表示される。このコンテクストメニューには、特定ディレクトリ (/Library/Scripts) 以下のフォルダ階層構造がそのまま反映され、選択したスクリプトを実行できるようになっている。
スクリプトエディタ上で選択中のテキストに対して処理を行うスクリプトを呼び出せるほか、サードパーティーが提供している強化スクリプトにより、変数名の置換や各種オプションの記述が必要なコマンドの自動記述（choose fileでUTIを指定してファイル選択を行う場合のUTI記述など）を行えるようになる。

**プラグイン（macOS 10.14で廃止）**
スクリプトエディタ自体にプラグインをインストールすることができるようになっている。過去にいくつかのプラグインが発表されたが、だいたいはのちにmacOSに標準装備されていった。目下、このプラグイン開発用の資料も公開されていないため、ほぼプラグインは存在していない。macOS 10.14のスクリプトエディタでは、環境設定ウィンドウから「プラグイン」のタブが削除された。

**各種機能**

**構文書式設定機能**
OSA言語ごとに構文要素に応じた書式（フォント種別、フォントサイズ、色分け）を設定できるようになっている。ユーザーは自分の好みの構文書式を定義することで、スクリプトをより読みやすくすることができる。とくにAppleScriptにおいては「return return」（サブルーチンから返り値として改行コードを返す）といった文字情報だけでは判別しにくい記述もできるため、構文要素ごとに色分けされていないと可読性が著しく低下する（AppleがOS出荷時にデフォルトで設定している構文色分け内容は、お世辞にも見やすいものではない）。

**短縮記述の展開機能**
AppleScriptにおいては、tellブロックやifブロックを閉じる際に「end」とのみ書いておけば、「コンパイル」（構文確認）時にプログラム内容に合わせ、「end tell」や「end if」と自動認識して展開される。同様に、「tell app」と書いておくと、「tell application」と展開される。

**対応アプリケーションの用語辞書のブラウジング機能**
OSA言語によるコントロール可能な、いわゆるスクリプタブルなmacOSアプリケーションは、スクリプト用語辞書（sdef）を内蔵している。この内容をブラウズする機能を持っている。対象のアプリケーションのアイコンをスクリプトエディタにドラッグ＆ドロップすると、その内容が表示され、アプリケーションがOSA言語に対して利用を許可しているオブジェクトやコマンド、プロパティの一覧を見ることができる。

**「実行」機能**
スクリプトエディタは、エディタであり、実行環境でもある。スクリプトエディタ上で編集したスクリプトをその場で実行でき、結果も取得できる。macOS上のOSA言語は実行環境が多数あり、それぞれに微妙に実行条件が違っている。スクリプトエディタはmacOS上でもっともセキュリティ上の制限のゆるいOSA言語スクリプトの実行環境である。ただし、他の実行環境との制限のかかりかたの「差」があとで問題になることがままある。

**「フォアグラウンドで実行」機能**
Controlキーを押しながら「スクリプト」メニューをクリックすると、「実行」コマンドが「フォアグラウンドで実行」コマンドに表示変更される。本機能は、スクリプト内でCocoaの機能を呼び出したときに、NSWindowやWebViewなどのメインスレッドで呼び出す必要のあるクラスの操作に備えたもの。そのため「フォアグラウンド」ではなく、「メインスレッドで実行」と呼ぶのが正しい。これらのCocoaクラスを用いている場合に、普通の「実行」コマンドを操作しただけではエラーになったり、スクリプトエディタがクラッシュしたりする。

**「記録」機能**
アプリケーションの操作を「記録」（レコーディング）できる機能。ただし、OSA言語による操作に対応していて、そのうえで「記録」に対応しているアプリケーションの動作しか記録できない。対応アプリケーションも少なく、記録されている内容を読んでも理解しやすい内容ではないため、Appleからも非推奨の機能になっている。有名な対応アプリケーションには、Finderや Bare Bones SoftwareのBBEditがある。

**簡易デバッグ機能**
スクリプトエディタには、アプリケーションからの返り値などを確認するために、簡易ログ表示機能が用意されている。アプリケーションからの応答内容などを確認するのが主な用途であるため、変数のリアルタイム監視やブレークポイントの設定などの機能は持たない。AppleScript内蔵のlogコマンドでこのログへの変数や定数の内容を表示でき、簡易的なデバッグ用途にはこちらが利用されている。
スクリプトエディタのデバッグ機能はあくまで簡易版であるため、本格的なデバッガーの機能についてはサードパーティーのアプリケーション「 Script Debugger」の導入を検討すべきである（同デバッガはAppleScript専用であり、JXAには非対応）。

**「テンプレート」機能**
特殊な記述を行う各種プラグインスクリプトを記述するためのテンプレートが数種類用意されている。「Aperture」のインポートアクション記述テンプレート、各種ドロップレット、「メール」アプリケーションのルール処理スクリプト、「メッセージ」アプリケーションのメッセージ受信時の応答処理スクリプト、そしてCocoa-AppleScriptアプレットのテンプレートである。所定のフォルダに格納されたスクリプトをオープンする機能であるため、ユーザーが自分のテンプレートを追加することも可能。

**「ウィンドウのデフォルトサイズ記憶」機能**
新規書類を作成した際の、ウィンドウの大きさと位置を記憶する機能。最前面の書類ウィンドウの大きさと位置をデフォルトのものとして記録する。

**スクリプトメニューのON/OFF機能**
メニューバー上から階層式のメニューを表示させ、指定フォルダ以下のスクリプトを実行できる「スクリプトメニュー」のON/OFFを行う機能が、スクリプトエディタに搭載されている（デフォルト時はOFF）。スクリプトエディタの「環境設定」＞「一般」にあるスクリプトメニューにチェックを入れることで利用できるようになる。

**バグ**

**macOS 13,Ventura 〜macOS 15, Sequoia**
スクリプトエディタ上のテンプレート「Cocoa-AppleScript Applet」の実行ができなくなっている。同環境は、OS X 10.7で追加されたもので、現行のスクリプトエディタなどで実行可能なAppleScriptObjCの実行環境とは機能が異なる。この不具合の原因はスクリプトエディタではなくAppleScriptの処理系（テンプレート）に含まれるランタイムプログラムにある（書き出したAppletにFinder上で「Rosettaを使用して開く」を指定してx64コードで実行すると、Apple Sillicon Mac上でも実行できることが判明）。
スクリプトエディタのバグにより、.scpt形式のAppleScript書類の「説明」欄が白地に白色の文字として表示されてしまう。バンドル形式（.scptd）書類ではこの現象は発生していない。「見えない」だけで実際に文字情報は存在しているため、選択したり他の色に指定し直すことは可能。

**脚注 ==