Adobe ExtendScriptとは何か?JavaScriptとの関係性を調べた
前から存在は知っていたけど、あまり情報がない「ExtendScript」。今回は私の中での情報整理も兼ねてとても簡単にまとめてみようと思います。
ExtendScriptはAdobe製品を動かすJavaScriptの方言
ExtendScriptは、一言で言うと、Adobe製ソフトを自動化するために用意されたJavaScriptの亜種というか方言のようなものです。
Adobe社が作っている一部のデザイン系ソフトは、スクリプトを書いて操作を自動化することができ、そのためのプログラミング言語として以下の3つをサポートしています。そのうちの1つがExtendScriptです。
AppleScriptはmacOS上動き、VBScriptはWindows OS上で動きます。ExtendScript(JavaScript)はどちらのOSにも使用できます。
ちなみに、少々古いですが、Adobe社が公式に出しているガイドではExtendScriptについて以下のような説明がありました。
Adobe provides an extended implementation of JavaScript, called ExtendScript, that is used by many Adobe applications that provide a scripting interface. In addition to implementing the JavaScript language according to the ECMA JavaScript specification, ExtendScript provides certain additional features and utilities.
https://www.adobe.com/content/dam/acom/en/devnet/scripting/estk/javascript_tools_guide.pdf
精度はともかくとして、ざっと訳すと以下のような感じです。
AdobeはJavaScriptを拡張して実装した「ExtendScript」を提供しており、スクリプトインターフェースを提供する多くのAdobeアプリケーションで使用することができます。ECMA JavaScriptの仕様に則って実装されているだけでなく、ExtendSciptでは、数々の役立つ機能や特徴を備えています。
また、Scripting Developer Centerのサイトによると、ExtendScriptで動かせるアプリケーションは
- Acrobat
- After Effects
- Bridge
- Illustrator
- Device Central
- InDesign / InCopy / InDesign Server
- Photoshop
上記のようです。
「JavaScript」と呼ぶのは厳密には間違い?
Adobe社が出しているドキュメントを見ても、ExtendScriptという言葉は使われず、ほとんどJavaScriptと書かれています。便宜上のためでしょう。
基本的にExtendScriptをJavaScriptと呼んでも概ね問題ないのですが、これをJavaScriptと呼ぶのは、厳密には正しくありません。またECMAScriptとJavaScriptとExtendScriptの関係性を理解していないことで私もちょっとしたトラブルがありました。これは後ほど触れますが、まず以下にその成り立ちに触れておこうと思います。
ExtendScriptはECMAScriptの実装の1つ
JavaScriptを厳密に説明すると、まずECMAScriptという標準化された言語があり、その仕様に則って各ブラウザが実装した言語のことをJavaScriptと呼びます。
ExtendScriptについても同様で、ECMAScriptに則ってAdobe社がAdobe製品用に実装したものをExtendScriptといいます。例えるならJavaScriptの「方言」というか「兄弟」といってもよいでしょう。
JavaScriptのコードで動かないものもある
なんでこんな厳密な説明を書いたのかというと、JavaScriptとして書いたものが何でもExtendScriptで動くと勘違いしないようにです。そうです。私は実際に勘違いしていました。
私もこうした関係性をよく知らなかったのでJavaScriptのコードのたいていはExtendScriptで動くのかなと漠然と思っていたのですが、実際そうではありませんでした。この理由は次のとおりです。
まず、先述のECMAScriptは、年々バージョンアップし、どんどん新しい機能が追加されています。ECMAScript1から始まり、ECMASCript2、ECMAScript3と続き、4は欠番で現在は6が最新版のようです。
ブラウザはそれに対応しようとするので、ECMAScriptのアップデートに合わせて、順次主要なブラウザは最新版で対応し最新の文法などが動くわけです。
一方で、ExtendScriptと解釈して実行するAdobe社の各製品はどうかというと、別にECMAScriptのアップデートに追随するわけではないのです。過去に策定されたECMAScriptベースのままです。
じゃあAdobe製品はどのバージョンに準拠しているのかというと、Wikipediaによれば、1999年に改訂されたECMAScript 3「ECMA-262 3rd edition」に準拠しているとのこと。
つまり、それ以降に追加されたJavaScriptの機能はExtendScriptで使用することができないというわけです。
indexOfメソッドが動かない事件
というわけで、ECMAScript、JavaScript、ExtendScriptの関係性をよくわかっていないと、私みたいに以下のようなことをやらかしてしまうわけです。
Photoshop用にスクリプト書いているんだが、javaScriptのindexOfメソッドがなぜか動かない!
— (有) (@tdyu05) October 25, 2019
どうやら調べてみたらindexOfメソッドはECMAScript5で追加されたメソッドらしくAdobe CS用のJavaScript(ExtendScript)はECMAScript3に準拠しているというオチでした。
ツイートの通りですが、JavaScriptのindexOfは比較的新しいメソッドですが、Adobe製品はそれより古いJavaScriptの仕様に準拠しているため、このメソッドが動かないということです。
これが、先程最初のほうで基本的にExtendScriptをJavaScriptと呼んでも「おおよそ」は問題ないと書いた理由です。逆に言えばブラウザ用のJavaScript感覚で書くと動かないところがポツポツ出てくるということです。
ExtendScriptとJavaScriptの関係性だったり「Adobe製品はJavaScriptで動かすことができる」の厳密な意味はちゃんと知っておくべきなだなー、というのが本日お伝えしたい内容でした。