After Effectsのスクリプトは、JavaScriptを拡張したExtendScriptで書き、拡張子を.jsxにしたテキストファイルとして保存します。
最初は「開いているコンポジションで、選んだレイヤーを右へ動かす」くらいの短いコードから始めると、プロジェクト・コンポジション・レイヤー・プロパティのたどり方がつかめます。
書いたファイルは、ファイル/スクリプト/スクリプトファイルを実行で、その場で試せます。
この記事では、選択レイヤーを動かす最小のコード、1行ずつの意味、実行の場所、値やキーフレームの変え方、デバッグの方法を、Adobeのヘルプと、Adobeが案内しているAfter Effects スクリプティングガイドをもとにまとめました(2026年11月1日に確認)。
配布されているスクリプトの入れ方はスクリプトの導入・実行方法にまとめています。
用意するもの
| もの | 使い道 |
|---|---|
| テキストエディター | コードを書いて、拡張子を.jsxにして保存する |
| After Effects スクリプティングガイド | 使えるオブジェクトと書き方を調べる(ae-scripting.docsforadobe.dev) |
| Visual Studio Code と ExtendScript Debugger | ブレークポイントを置いて止めながら確かめる(Adobe製の無料の拡張機能) |
Adobeのヘルプは、スクリプトで使える機能の詳細をAfter Effects スクリプティングガイドで調べるよう案内しています(Adobe:After Effects のスクリプト)。
選択レイヤーを右へ動かす最小のコード
開いているコンポジションで選んだレイヤーを、位置のX方向に100ピクセル動かすコードです。
(function () {
var comp = app.project.activeItem;
if (!(comp instanceof CompItem)) {
alert("Open a composition first.");
return;
}
var layers = comp.selectedLayers;
if (layers.length === 0) {
alert("Select at least one layer.");
return;
}
app.beginUndoGroup("Move selected layers");
var moved = 0;
for (var i = 0; i < layers.length; i++) {
var layer = layers[i];
if (layer.locked || !layer.hasVideo) continue;
var pos = layer.transform.position;
if (pos.numKeys > 0 || pos.dimensionsSeparated) continue;
var v = pos.value;
v[0] = v[0] + 100;
pos.setValue(v);
moved++;
}
app.endUndoGroup();
alert("Moved: " + moved + " / " + layers.length);
})();スクリプティングガイドに載っている書き方だけで組んだ最小の例で、どの環境でも動くことを確かめたものではありません。
試すときは、プロジェクトを別名で保存してからにしてください。
1行ずつの意味
| コード | していること | ガイドの記載 |
|---|---|---|
| (function () { … })(); | 変数を外に漏らさないよう、全体を関数に包んで1回だけ実行する | ― |
| app.project.activeItem | いま作業の対象になっているアイテムを取る | 何も選んでいないときや複数選んでいるときは null |
| instanceof CompItem | 取れたものがコンポジションか確かめる | Project のページの例と同じ形 |
| comp.selectedLayers | 選んでいるレイヤーを配列で取る | 0から数える配列で読み取り専用 |
| app.beginUndoGroup(“…”) | ここからの操作を、取り消し1回でまとめて戻せるようにする | 文字は編集メニューの取り消しの名前になる |
| layer.locked・layer.hasVideo | ロックしたレイヤーと、ビデオスイッチ(目のアイコン)の無いレイヤーを飛ばす | Layer オブジェクト |
| layer.transform.position | トランスフォームの位置プロパティを取る | PropertyBase のページの例と同じ書き方 |
| pos.numKeys・pos.dimensionsSeparated | キーフレームがある位置と、XとYに分けた位置を飛ばす | numKeys が0ならキーフレームなし |
| pos.value・pos.setValue(v) | 今の値を読み、Xに100を足して書き戻す | setValue はキーフレームの無いプロパティ用 |
| app.endUndoGroup() | 取り消しのまとまりを閉じる | beginUndoGroup と組で使う |
キーフレームの付いたプロパティにsetValueを使うと、例外が起きてエラーが表示されます(スクリプティングガイド:Property)。
このコードでは、そうしたレイヤーを先に飛ばしています。
書いたスクリプトを実行する場所
| 方法 | 操作 | 向いているとき |
|---|---|---|
| スクリプトファイルを実行 | ファイル/スクリプト/スクリプトファイルを実行で.jsxを選ぶ | 書いている途中で何度も試す |
| Scripts フォルダーに置く | After Effectsを再起動すると、ファイル/スクリプトに名前が出る | できあがったものを毎日使う |
| 最近使ったスクリプトを再実行 | Ctrl+Alt+Shift+D(macOSはCmd+Option+Shift+D) | 直したものをすぐ試し直す |
| コマンドライン | Windowsで afterfx -r とスクリプトのフルパスを指定 | キーボードの付属ソフトでショートカットに割り当てる |
実行中のスクリプトはEscキーで止められます(Adobe:After Effects のスクリプト)。
Scripts フォルダーの場所とパネルとしての置き方は導入・実行方法の記事、ボタンから呼び出したいときはスクリプトランチャーの記事が参考になります。
値やキーフレームを変える書き方に広げる
最小のコードの「位置」を別のプロパティに変えれば、ほかの値も同じ形で変えられます。
たとえば不透明度は、スクリプティングガイドの例のとおり myLayer.opacity で取り、setValue(50) で50%にします。
キーフレームを打つときは setValueAtTime を使い、時間(秒)と値を渡します。
var myProperty = layer.rotation;
myProperty.setValueAtTime(0, 0);
myProperty.setValueAtTime(5, 90);この例は、0秒で回転0度、5秒で90度のキーフレームを打ちます(スクリプティングガイド:setValueAtTime)。
エクスプレッションをスクリプトから設定する例はエクスプレッションをスクリプト化する方法にあります。
デバッグのしかた
| 方法 | わかること |
|---|---|
| alert(値) | その時点の値を画面に出して止める。いちばん手軽 |
| $.writeln(値) | JavaScript コンソールに文字を書き出す |
| try … catch | エラーの内容を受け取って表示する |
| ExtendScript Debugger | ブレークポイントで止め、変数を見ながら1行ずつ進める |
try {
// ここに処理を書く
} catch (e) {
alert(e.toString());
}ExtendScript Debugger は、Visual Studio Code の拡張機能としてAdobeが公開しています(Visual Studio Marketplace)。
Evaluate Script in Host...で、開いているファイルを起動中のAfter Effectsに送って実行できます。
止めながら確かめるときは、実行とデバッグから ExtendScript を選び、対象のアプリを選びます。
ExtendScript Toolkit を同じアプリにつないでいると、この拡張機能が正しく動かなくなり、アプリの再起動で直ると案内されています。
$.writeln の使い方はJavaScript Tools Guide:Dollar ($) objectにあります。
つまずきやすい所と対処
| つまずき | 起きること | 対処 |
|---|---|---|
| コンポジションを開かずに実行 | activeItem が null かコンポジション以外になる | タイムラインを選んでから実行する |
| プロジェクトパネルで複数を選んでいる | activeItem が null になる | 選ぶのを1つにする |
| キーフレームのある位置に setValue | 例外が起きてエラーが出る | setValueAtTime を使うか、その位置を飛ばす |
| selectedLayers を1から数える | 最初のレイヤーが抜ける | 0から数える |
| 取り消しのまとまりを作らない | 取り消しを何度も押さないと戻らない | beginUndoGroup と endUndoGroup で囲む |
| Scripts フォルダーに置いてもメニューに出ない | 起動時にしか読み込まれない | 再起動するか、スクリプトファイルを実行で選ぶ |
| ファイルに書き出す処理で止まる | 既定ではファイルへの書き込みとネットワーク通信ができない | 環境設定/スクリプトとエクスプレッションで「スクリプトによるファイルへの書き込みとネットワークへのアクセスを許可」を選ぶ |
「アクセスが拒否されました」と出たときの確かめ方は導入・実行方法の記事にあります。
よくある質問:After Effectsスクリプトの書き方
ExtendScript と JavaScript は同じですか?
ExtendScript は JavaScript を拡張した言語です。
After Effects で使えるオブジェクトと書き方は、スクリプティングガイドで確かめます。
エクスプレッションとは何が違いますか?
スクリプトは、メニューなどから実行して、プロジェクトに一連の操作をさせるものです。
プロパティごとに書くエクスプレッションの書き方はエクスプレッション作成のTIPSにまとめています。
.jsx と .jsxbin は何が違いますか?
Adobeのヘルプでは、ExtendScript のファイルの拡張子は .jsx か .jsxbin とされています。
この記事のコードは、テキストエディターで .jsx として保存します。
配布された .jsxbin の扱いは導入・実行方法の記事にあります。
書いたスクリプトをショートカットで呼べますか?
Windowsでは afterfx -r にスクリプトのパスを付けて呼べるので、キーボードの付属ソフトなどで割り当てられます。
まとめ
After Effectsのスクリプトは ExtendScript で書き、.jsx で保存して、スクリプトファイルを実行で試します。
まずは activeItem → selectedLayers → プロパティ → setValue の順にたどる短いコードを動かし、取り消しのまとまりで囲む形を覚えます。
つまずいたら alert や ExtendScript Debugger で値を確かめ、スクリプティングガイドで書き方を引いてください。
