コンポ名を変数として利用し、テキスト差分を作成する手順を解説します。
流し込みたいテキストをコンポジション名に含め、エクスプレッションで参照してテキストレイヤーへ反映させる方法です。
ベースとなるコンポジションを1つ作成しておけば、複製するだけで効率よく差分コンポジションを作成できます。
コンポ名とテキストを対応させ、所有の練習コピーで差分を確認します。
3つの名前とテキストを対応させる練習
所有の練習プロジェクトを別名保存し、2つのテキストレイヤーがあるテンプレートのコンポジションを作ります。
1つ目と2つ目のソーステキストへ、それぞれ下の式をAlt/Optionを押しながらストップウォッチをクリックして貼り付けます。
コンポ名はPractice_青森_リンゴのように、接頭辞と2つの項目をアンダースコアで区切る形式です。
テンプレートなど形式が合わない名前では元のソーステキストを返します。
項目の内部にはアンダースコアを入れません。
下の複製コードをduplicate-comp.jsxとして保存し、テンプレートのコンポジションを選択して「ファイル」→「スクリプト」→「スクリプトファイルを実行」から実行します。
所有のサンプル3行では、青森とリンゴ、沖縄とバナナ、栃木とイチゴを表示する3つのコンポジションを作る例です。
rowsの2項目の配列を書き換えるだけで、文字列のsplitやforEachの追加は不要です。
同名の出力が既にある場合や項目が欠けた場合は、複製前に止めます。
20行を超える一括処理はこの例では扱いません。
トップのコンポジションを複製しても、内部で参照するプリコンポジションや素材がすべて独立したコピーになるわけではありません。
実行後は3つの名前・2つの表示・元テンプレートの内容を確認します。
途中で複製に失敗してもUndo処理は閉じますが、作成済みのコピーが自動で消えたとは判断せず、Ctrl+Z/Command+Zか元コピーで復元します。
| 確認すること | 期待する結果 | 違ったとき |
|---|---|---|
| Practice_青森_リンゴ | 青森とリンゴ | 接頭辞と区切りを確認 |
| 項目が不足 | 元テキストを維持 | 名前の形式を確認 |
| 同じ出力名が存在 | 複製前に停止 | 既存コンポを確認 |
2026年10月3日にLayer・CompItem・ApplicationのAPI参照を照合し、ローカルのJavaScriptで境界と選択条件を検証しましたが、AE実機でのプロパティ連動・表示・取り消しは未検証です。
ベースとなるコンポジションの作成

- コンポ名を「コンポ名_名産地_果物」の形式で作成します。
- コンポ内に2つのテキストレイヤーを作成し、それぞれのソーステキストへ以下のエクスプレッションを適用します。
1つ目のテキスト(名産地)のソーステキスト:
var fields = thisComp.name.split("_");
fields.length === 3 && fields[0] === "Practice" && fields[1] && fields[2] ? fields[1] : value;
2つ目のテキスト(果物)のソーステキスト:
var fields = thisComp.name.split("_");
fields.length === 3 && fields[0] === "Practice" && fields[1] && fields[2] ? fields[2] : value;
エクスプレッションを適用すると、コンポ名から抽出された「名産地」と「果物」がそれぞれのレイヤーに表示されます。
コンポ名にテキストを反映しながら一括複製する手順
旧記事で参照していた外部のスクリプトには、変数と入力形式の不一致があったため、以下は所有の3行サンプルを使う修正版です。
(function () {
var rows = [["青森", "リンゴ"], ["沖縄", "バナナ"], ["栃木", "イチゴ"]];
var comp = app.project && app.project.activeItem;
if (!(comp instanceof CompItem)) { alert("Open or select the template composition."); return; }
if (rows.length === 0 || rows.length > 20) { alert("Use 1 to 20 practice rows."); return; }
var names = [], i, j;
for (i = 0; i < rows.length; i++) {
if (rows[i].length !== 2 || !rows[i][0] || !rows[i][1] ||
/_/.test(rows[i][0]) || /_/.test(rows[i][1])) {
alert("Each row needs two nonempty fields without underscores. Nothing changed."); return;
}
var name = "Practice_" + rows[i][0] + "_" + rows[i][1];
for (j = 0; j < names.length; j++) {
if (names[j] === name) { alert("Repeated output name. Nothing changed."); return; }
}
for (j = 1; j <= app.project.numItems; j++) {
if (app.project.item(j).name === name) { alert("Output name already exists. Nothing changed."); return; }
}
names.push(name);
}
app.beginUndoGroup("Duplicate practice text compositions");
try {
for (i = 0; i < names.length; i++) {
var copy = comp.duplicate();
copy.name = names[i];
}
} finally { app.endUndoGroup(); }
})();
修正版では、冒頭のrowsの2項目を編集します。
入力例は複製コードのrowsに含めています。
各行は地域と果物の2項目として編集します。
プロジェクトパネルで先ほど作成したベースコンポを選択した状態でスクリプトを実行すると、指定した文字列を含むコンポ名で複製されます。

After Effectsの基本的な操作や効率化テクニックは、まとめ記事で確認できます。

以前の実装は、GitHubのMOTOKI-LLC/cg-method-codeを参考にできますが、本稿の修正版とは異なります。
コンポジションの複製や、サイズ・デュレーションを統一するスクリプトは以下の記事でも紹介しています。




