After Effectsで、コンポジション名・レイヤー名・エフェクト名を指定してチェックボックス制御をON/OFFにするJSXです。TARGETを1にするとON、0にするとOFFになります。同名の対象が複数ある場合は、変更前に停止するコードです。
練習用のチェックボックスと連動する平面を用意する
練習用プロジェクトを別名保存し、次の名前を完全に一致させます。実機検証では960×540・30fps・3秒のコンポジションを使いました。
- コンポジション名をPracticeSwitchにし、ヌルオブジェクトを作ってレイヤー名をCtrlに変更します。
- Ctrlへ「エフェクト」→「エクスプレッション制御」→「チェックボックス制御」を追加し、エフェクト名をToggleに変更します。チェックはOFFにし、キーや式を付けません。
- 表示確認用に平面Boxを作ります。検証では200×100のオレンジ色の平面を中央に配置しました。
- Boxの不透明度のストップウォッチをAltキーを押しながらクリックし、下の確認用エクスプレッションを入力します。
- 後掲のJSXをset-checkbox.jsxとしてUTF-8で保存し、「ファイル」→「スクリプト」→「スクリプトファイルを実行」で実行します。
thisComp.layer("Ctrl").effect("Toggle")(1).value == 1 ? 100 : 0;
この式はBoxの不透明度に設定します。Toggleのチェックボックス自体へ式を入れると、後掲のスクリプトは停止します。チェックボックスを切り替えるだけでは他のレイヤーの表示は変わらないため、表示側にこのような連動する式が必要です。
Adobeのエクスプレッション制御の公式説明でも、チェックボックスを1/0のスイッチとして不透明度などへ利用する方法が紹介されています。
掲載コードの実機検証:指定名・ON/OFF・Undo
2026年10月14日、Windows 11 Pro(10.0.26200)/After Effects 26.5(Build 89、日本語表示)で検証しました。掲載JSXをそのまま実行し、OFFの場合だけTARGETを0へ変更しました。比較用に別コンポジションOtherSwitchにもCtrl/Toggleを置き、こちらはOFFのまま維持されるか確認しました。
| 操作 | 実機結果 |
|---|---|
| TARGET=1を実行 | PracticeSwitchのToggleが1、Boxの不透明度が100%。OtherSwitchは0のまま |
| 直後にCtrl+Zを1回 | Toggleが0、不透明度が0%へ復帰。OtherSwitchは0のまま |
| ONからTARGET=0を実行 | Toggleが0、不透明度が0%。他コンポのToggleは変更なし |
| PracticeSwitchを同名で2つ用意して実行 | 「Use exactly one named composition.」で停止。両方のToggleは0のまま |

検証途中では、確認用エクスプレッションをプロパティ参照のまま条件に渡すと、チェックが0でも不透明度が100%になりました。上記の式のように.valueを取り出して1と比較する形へ直し、OFF=0%、ON=100%とUndoを再確認しました。JSXのチェック切り替えと、表示側の式の評価は別々に確認してください。
実機で確認した停止条件はコンポジション名の重複です。レイヤー名・エフェクト名の重複、ロック、キー・式付きチェックはコード上の検査条件として残していますが、今回の実機試験には含めていません。連続レンダリングや映像全体の一致も未検証です。
指定名のチェックボックスを切り替えるJSX
(function () {
var COMP_NAME = "PracticeSwitch", LAYER_NAME = "Ctrl", EFFECT_NAME = "Toggle";
var TARGET = 1; // 1 = ON, 0 = OFF
if (!app.project || (TARGET !== 0 && TARGET !== 1)) { alert("Use TARGET 0 or 1."); return; }
var comp = null, layer = null, effect = null, i, matches = 0;
for (i = 1; i <= app.project.numItems; i++) {
var item = app.project.item(i);
if (item instanceof CompItem && item.name === COMP_NAME) { comp = item; matches++; }
}
if (matches !== 1) { alert("Use exactly one named composition."); return; }
matches = 0;
for (i = 1; i <= comp.numLayers; i++) {
if (comp.layer(i).name === LAYER_NAME) { layer = comp.layer(i); matches++; }
}
if (matches !== 1 || layer.locked) { alert("Use one unlocked named control layer."); return; }
var effects = layer.property("ADBE Effect Parade"); matches = 0;
if (effects) {
for (i = 1; i <= effects.numProperties; i++) {
if (effects.property(i).name === EFFECT_NAME) { effect = effects.property(i); matches++; }
}
}
if (matches !== 1 || effect.matchName !== "ADBE Checkbox Control") { alert("Use one named Checkbox Control."); return; }
var checkbox = effect.property("ADBE Checkbox Control-0001");
if (!checkbox || checkbox.numKeys !== 0 || checkbox.expression !== "") {
alert("Use a checkbox with no keys or expression."); return;
}
app.beginUndoGroup("Set named checkbox");
try { checkbox.setValue(TARGET); }
catch (error) { alert("Stopped: " + error.toString() + "\nUndo or reopen your practice copy."); }
finally { app.endUndoGroup(); }
})();
停止メッセージと対象の確認
このコードは選択状態ではなく、指定した名前で対象を探します。「Use exactly one named composition.」が出た場合は、プロジェクトパネルにPracticeSwitchが1つだけ存在するか確認してください。0個でも複数でも停止します。別名のコンポを選択しても、指定名は変わりません。
ほかの停止条件は、Ctrlが1枚だけでロックされていないこと、Toggleが1つだけでチェックボックス制御であること、チェックにキーも式もないことです。対象の名前を変更する場合は、コード先頭のCOMP_NAME・LAYER_NAME・EFFECT_NAMEも合わせます。APIの補足にはコミュニティのProperty参照を利用できます。
元に戻すときは実行直後にCtrl+Zを押し、Toggleの値と連動するプロパティを確認します。今回の正常実行は1回のUndoで戻りました。途中でエラーが出た場合の復旧は未検証なので、元の練習コピーと照合してください。
参考:別の名前で設定した既存の画面
以下は2026年10月13日の別条件の画面です。コンポジション名TargetComp17846、レイヤー名TargetControl17846、エフェクト名EnableTargetで、OFF時は矩形が非表示、ON時は表示されています。上記の掲載コードで使うPracticeSwitch/Ctrl/Toggleとは名前が異なります。


選択プロパティへ式を付ける場合
選択プロパティへ式を設定する記事で、入力例と既存の式の保護を確認してください。
After Effectsのほかの操作やテクニックについては、まとめ記事をご覧ください。

旧実装の参考コードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
エクスプレッションの書き方や、スクリプト化に関する記事は、ほかにもあります。




