Photoshop

ExtendScriptの概要

ExtendScriptは, Adobeが提供するJavaScriptの拡張版で, PhotoshopやIllustratorなどのAdobe製品のスクリプト制御に使用されます.
ECMAScript 3をベースにしており, 独自の機能を追加することで, Adobeアプリケーションの自動化を強化しています.

ExtendScriptの歴史

Adobeは, スクリプトによる作業の効率化を目的としてExtendScriptを導入しました.
特に, Photoshopのバッチ処理や複雑なワークフローの自動化において, ExtendScriptは重要な役割を果たしてきました.

ExtendScriptの便利さ

作業の自動化: 繰り返し作業をスクリプトで処理できるため, 時間を大幅に節約可能.
ユーザーインターフェースの拡張: ScriptUIを利用してカスタムUIを作成し, 操作性を向上.
ファイル操作の簡易化: File や Folder クラスを使用して, クロスプラットフォームのファイル管理が可能.

言語仕様

ExtendScriptはJavaScriptをベースにしているため, 基本的な構文はJavaScriptと共通ですが, 以下のような独自の拡張が含まれています:
ScriptUI: Adobeアプリケーション内でGUIを作成できる.
ファイルシステムアクセス: File や Folder クラスを使用して, OSのファイルシステムにアクセス可能.
デバッグツール: $ オブジェクトを使用したデバッグ機能が提供されている.

以下のコードは, Photoshopで新規ドキュメントを作成し, テキストレイヤーを追加するものです.

// 新規ドキュメントを作成
var doc = app.documents.add(800, 600, 72, "Sample Document");

// テキストレイヤーを追加
var textLayer = doc.artLayers.add();
textLayer.kind = LayerKind.TEXT;
textLayer.textItem.contents = "Hello, ExtendScript!";
textLayer.textItem.position = [100, 100];
textLayer.textItem.size = 36;
textLayer.textItem.font = "Arial";

// ドキュメントを保存(オプション)
var file = new File("~/Desktop/sample.psd");
doc.saveAs(file, PhotoshopSaveOptions, true);

このスクリプトをPhotoshopのExtendScript Toolkit(ESTK)または「スクリプト」メニューから実行すると, 新規ドキュメントが作成され, 「Hello, ExtendScript!」というテキストが表示されます.

ExtendScriptの生い立ち

ExtendScriptは, Adobeが提供するスクリプト言語で, 主にPhotoshopやIllustratorなどのAdobe製品の自動化に使用されます. Adobeは, スクリプトによる作業の効率化を目的として, JavaScriptをベースにした独自の拡張を加えたExtendScriptを導入しました.

主な歴史的な流れ:

1999年: ECMAScript 3が登場し, JavaScriptの標準仕様が確立される.
2000年代初頭: AdobeはECMAScript 3をベースにしたExtendScriptを開発し, Creative Suite製品に組み込む.
2005年頃: ExtendScript Toolkit(ESTK)が登場し, スクリプトの開発環境が整備される.
2010年代: AdobeはCEP(Common Extensibility Platform)を導入し, ExtendScriptの代替としてUXP(Unified Extensibility Platform)を推進.

ECMAScript 3(ES3)

ECMAScript 3(ES3)は, JavaScriptの標準仕様としてリリースされました. このバージョンは, 現在のJavaScriptの基盤となる重要な機能を導入しました.

主な特徴

正規表現の導入: 文字列処理が強化される.
例外処理(try…catch): エラーハンドリングが可能に.
新しい制御構造: switch 文や do…while ループの追加.
より厳密なエラー定義: JavaScriptの動作がより明確に.
ECMAScript 3は長らく標準として使われ, AdobeのExtendScriptもこの仕様を基に設計されています.
Adobe製品のスクリプト制御において, ECMAScript 3の仕様を理解することは非常に重要です.

// 新規ドキュメントを作成
var doc = app.documents.add(800, 600, 72, "Sample Document");

// テキストレイヤーを追加
var textLayer = doc.artLayers.add();
textLayer.kind = LayerKind.TEXT;
textLayer.textItem.contents = "Hello, ExtendScript!";
textLayer.textItem.position = [100, 100];
textLayer.textItem.size = 36;
textLayer.textItem.font = "Arial";

// ドキュメントを保存(オプション)
var file = new File("~/Desktop/sample.psd");
doc.saveAs(file, PhotoshopSaveOptions, true);

このスクリプトをPhotoshopのExtendScript Toolkit(ESTK)または「スクリプト」メニューから実行すると, 新規ドキュメントが作成」され「Hello, ExtendScript!」というテキストが表示されます.


ECMAScript 3(ES3)は1999年に登場し, JavaScriptの標準仕様として広く使われました. 現在のJavaScriptと比べると古い仕様ですが, 当時は画期的な機能が導入されました. 以下に, ES3の実際の利用例をいくつか紹介します.

正規表現を使った文字列検索

ES3では正規表現が導入され, 文字列の検索や置換が簡単になりました.

var text = "Hello, world!";
var regex = /world/;
var position = text.search(regex);
console.log(position); // 出力: 7

このコードでは, search() メソッドを使って “world” の位置を検索しています.

例外処理(try…catch)

ES3では try…catch 構文が導入され, エラーハンドリングが可能になりました.

try {
    var result = someUndefinedFunction();
} catch (error) {
    console.log("エラーが発生しました: " + error.message);
}

このコードでは, 未定義の関数を呼び出した際にエラーをキャッチし, 適切に処理できます.

文字列の置換

replace() メソッドを使って, 特定の文字列を別の文字列に置き換えることができます.

var text = "I love cats!";
var newText = text.replace(/cats/, "dogs");
console.log(newText); // 出力: "I love dogs!";

このコードでは “cats” を “dogs” に置き換えています.

ユーザー入力のバリデーション

ES3の正規表現を使って, メールアドレスの形式をチェックできます.

[code language="JavaScript"]
var email = "example@example.com";
var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
var isValid = regex.test(email);
console.log(isValid); // 出力: true

このコードでは, メールアドレスの基本的なフォーマットを検証しています.

数値の抽出

文字列から数値を抽出することも可能です.

var text = "My phone number is 123-456-7890.";
var regex = /\d+/g;
var matches = text.match(regex);
console.log(matches); // 出力: ["123", "456", "7890"]

このコードでは, match() メソッドを使って, 文字列内のすべての数字を抽出しています.

var text = "Hello, world!";
var regex = /world/;
var position = text.search(regex);
console.log(position); // 出力: