楽天ポイント4倍セール!セール会場へ

Illustratorで文字色を1文字ずつ交互に変えるJSX|選択と色名の指定

Illustratorの文字を1文字ずつ2色へ交互に変更するJSXの例です。オブジェクト全体として選択した1個のテキストフレームだけを対象にし、2色はスウォッチの名前で指定します。文書内で最初に見つかった文字や、スウォッチの並び順で色を決める方式は使いません。

2026年10月16日に、Windows 11 Pro(10.0.26200)のAdobe Illustrator 30.8.2(Build 7R)で、CMYKとグレーのスウォッチ、空白と改行を含む文字への割り当てを確かめました。

目次

準備と対象範囲

  1. 文書のコピーを開き、「グローバル」をオフにしたプロセスカラーのスウォッチを「交互_A」「交互_B」の名前で作る。2つの名前は重複させない。
  2. 選択ツールで、変更したいテキストフレーム1個を選ぶ。文字の編集中の範囲選択や、複数オブジェクトの選択は対象外。
  3. UTF-8でalternateTextColors.jsxとして保存し、「ファイル」→「スクリプト」→「その他のスクリプト」から実行する。
  4. 表示された入力欄に2つのスウォッチ名を指定し、変更後の塗り色を確認してから必要なら別名保存する。

対応する色はRGBColor、CMYKColor、GrayColorの単色です。特色、レジストレーション、グラデーション、パターンはこの例では受け付けません。元の色を退避してから割り当てますが、Illustrator全体をまとめて巻き戻すトランザクションではありません。

(function () {
    if (app.documents.length === 0) { alert("ドキュメントを開いてください。"); return; }
    var doc = app.activeDocument, sel = doc.selection;
    if (!sel || sel.length !== 1 || !sel[0] || sel[0].typename !== "TextFrame") {
        alert("選択ツールでテキストフレーム全体を1個選んでください。"); return;
    }
    var frame = sel[0], parent = frame;
    while (parent && parent.typename !== "Document") {
        if (parent.locked || parent.hidden || (parent.typename === "Layer" && !parent.visible)) {
            alert("対象または親がロック・非表示です。"); return;
        }
        parent = parent.parent;
    }
    if (!frame.editable) { alert("編集できないテキストです。"); return; }
    var chars = frame.textRange.characters;
    if (chars.length === 0) { alert("文字がありません。"); return; }
    var nameA = prompt("1色目のスウォッチ名", "交互_A");
    if (nameA === null) { return; }
    var nameB = prompt("2色目のスウォッチ名", "交互_B");
    if (nameB === null) { return; }
    nameA = String(nameA).replace(/^\s+|\s+$/g, "");
    nameB = String(nameB).replace(/^\s+|\s+$/g, "");
    if (!nameA || !nameB || nameA === nameB) { alert("異なる2つの名前を指定してください。"); return; }
    function findColor(name) {
        var found = null, count = 0;
        for (var n = 0; n < doc.swatches.length; n++) {
            if (doc.swatches[n].name === name) { found = doc.swatches[n].color; count++; }
        }
        if (count !== 1) { throw Error("スウォッチ名が未登録または重複しています:" + name); }
        if (found.typename !== "RGBColor" && found.typename !== "CMYKColor" && found.typename !== "GrayColor") {
            throw Error("この例は通常のRGB・CMYK・グレーのスウォッチだけを扱います:" + name);
        }
        return found;
    }
    var a, b, before = [], i;
    try {
        a = findColor(nameA); b = findColor(nameB);
        for (i = 0; i < chars.length; i++) { before.push(chars[i].characterAttributes.fillColor); }
    } catch (e) { alert("変更前の確認で停止しました:" + e); return; }
    try {
        for (i = 0; i < chars.length; i++) {
            chars[i].characterAttributes.fillColor = (i % 2 === 0) ? a : b;
        }
        alert("文字コレクションの " + chars.length + " 件へ交互の塗り色を指定しました。保存前に表示を確認してください。");
    } catch (e) {
        var restoreFailed = 0;
        for (i = 0; i < before.length; i++) {
            try { chars[i].characterAttributes.fillColor = before[i]; } catch (r) { restoreFailed++; }
        }
        alert("色の変更に失敗しました:" + e + "\n元の色への復帰失敗:" + restoreFailed + " 件。文書を確認してください。自動保存はしません。");
    }
}());
Illustratorの実画面。ABCDEの赤と青が交互になり、別のUNCHANGEDはグレーのまま。
2026年10月3日、Illustrator 30.8.2/Windows 11。自作サンプルのJSX実行後のAIを再度開いた実画面。

実機で実行した手順(2026年10月16日)

Windows 11 Pro(10.0.26200)のAdobe Illustrator 30.8.2(Build 7R)で、日本語表示のまま、上のJSXを書き換えずに実行しました。

400×240ポイントのCMYKのドキュメントに、「AB C」と改行と「DE」を入れたポイント文字と、色を変えない確認用の「CONTROL」を置きました。

「交互_A」はCMYK(C0・M100・Y100・K0)、「交互_B」はGrayColorの50のスウォッチです。

ドキュメントとスウォッチの用意、テキストフレームの選択はスクリプトで行い、確認に含めていません。

「ファイル」→「スクリプト」→「その他のスクリプト」からJSXを選ぶと、「1色目のスウォッチ名」の入力欄が「交互_A」の入った状態で表示されました。

Illustratorでスクリプトを実行し、1色目のスウォッチ名の入力欄に交互_Aが入った状態で表示された画面
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。記事のJSXを「その他のスクリプト」から実行し、1色目のスウォッチ名の入力欄が表示された実機画面。入っていた「交互_A」のまま確定した。

そのままEnterキーで確定し、続く「2色目のスウォッチ名」も、入っていた「交互_B」のままEnterキーで確定しました。

入力欄にスウォッチ名を打ち直す操作は試していません。

スポンサーリンク

どこから1文字と数えるか

textRange.charactersの先頭を1色目にし、コレクションの添字が偶数なら1色目、奇数なら2色目を指定します。空白や改行もコレクションに含まれれば順番へ数えます。結合文字や絵文字について、見た目の1文字とコレクションの1要素が常に一致するとは保証しません。空白を飛ばす、行ごとに先頭色へ戻すなどのルールは実装していません。

この処理は実行時の文字へ塗り色を割り当てるものです。後から文字を追加・削除しても交互の色を自動で並べ直しません。文字の編集が終わったら、対象のテキストフレームを選び直して再実行し、空白や改行を含めた色の順序を確認してください。

空白と改行を含めた割り当て結果(2026年10月16日)

終了通知には、文字コレクションの7件へ交互の塗り色を指定したと表示されました。

文字コレクションの7件へ交互の塗り色を指定したと表示されたIllustratorのスクリプト警告
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。2色目も確定した後の終了通知の実機画面。空白と改行を含む7つの要素へ塗り色が割り当てられた。

「AB C」と「DE」の5文字に、空白1つと改行1つを加えた7つが、文字コレクションの要素として数えられました。

実行後に各要素の塗りをスクリプトで読み取った結果は、次の表のとおりです。

添字要素割り当てられた塗り
0A交互_A(CMYK:C0・M100・Y100・K0)
1B交互_B(GrayColor:50)
2空白交互_A
3C交互_B
4改行交互_A
5D交互_B
6E交互_A

空白と改行にも色が割り当てられたため、見える文字だけで見ると、Aが赤、BとCとDがグレー、Eが赤になりました。

2行目の先頭のDは、1色目に戻らず、2色目になりました。

1行目のAが赤でBとCがグレー、2行目のDがグレーでEが赤になり、下のCONTROLは薄いグレーのままのIllustratorの画面
2026-10-16撮影。Adobe Illustrator 30.8.2 (Build 7R)、Windows 11 Pro (10.0.26200)。実行後の実機画面(上部のメニューとファイルのタブの行を切り取り)。空白と改行も順番に数えるため、見える文字だけでは交互にならない。下のCONTROLは色を変えていない確認用の文字。右のスウォッチパネルのマウスポインターと表示は、色の割り当てとは関係ない。

確認用の「CONTROL」の7文字は、実行前と同じGrayColorの30のままでした。

見える文字だけで交互にしたい場合、この記事のJSXのままでは対応できません。

結果を保存したファイルを開き直しての確認はしていません。

失敗時の扱いと確認結果

途中の割り当てで例外が起きた場合、退避した色へ戻す処理を試み、戻せなかった数を表示します。復元にも失敗する可能性があるため、保存前に文書を確認します。レイヤーや親グループのロック・非表示は勝手に解除しません。

2026年10月3日、Illustrator 30.8.2(64-bit)/Windows 11で、自作のポイント文字「ABCDE」を試験しました。

塗り色はRGB(230,30,45)とRGB(25,90,220)が5要素へ交互に割り当てられ、別のテキスト「UNCHANGED」のGrayColor値は処理前と同じ30相当でした。

この試験は、入力欄と終了通知を固定したハーネスで確認した結果です。

2026年10月16日には、書き換えていないJSXを「その他のスクリプト」から実行し、CMYKとGrayColorの入力色、空白と改行を含む文字で確かめました。

エリア内文字、パス上文字、日本語や絵文字などの特殊文字、Macでの実機試験は未実施です。

対象なし、複数選択、ロック・非表示、同名スウォッチ、未対応の色、割り当て失敗など19ケースは模擬オブジェクトで確認しました。実機のすべての条件を検証した結果ではありません。

動かし方はJSXの保存・実行、特色とプロセスカラーは色とスウォッチの設定、対象の取得はDOMの基本を参照してください。

参照資料と確認範囲

スポンサーリンク

よくある質問:文字色を1文字ずつ交互に変えるJSX

このJSXは、何をするものですか?

Illustratorの文字を、1文字ずつ2色へ交互に変更するJSXの例です。オブジェクト全体として選択した1個のテキストフレームだけを対象にし、2色はスウォッチの名前で指定します。文書内で最初に見つかった文字や、スウォッチの並び順で色を決める方式は使いません。

実行する前に、何を準備しますか?

文書のコピーを開き、「グローバル」をオフにしたプロセスカラーのスウォッチを「交互_A」「交互_B」の名前で作ります(2つの名前は重複させません)。選択ツールで、変更したいテキストフレーム1個を選びます。文字の編集中の範囲選択や、複数オブジェクトの選択は対象外です。UTF-8でalternateTextColors.jsxとして保存し、「ファイル」→「スクリプト」→「その他のスクリプト」から実行します。表示された入力欄に2つのスウォッチ名を指定し、変更後の塗り色を確認してから、必要なら別名保存します。

どんな色に対応していますか?

RGBColor、CMYKColor、GrayColorの単色です。特色、レジストレーション、グラデーション、パターンは、この例では受け付けません。

「1文字」は、どこから数えますか?

textRange.charactersの先頭を1色目にし、コレクションの添字が偶数なら1色目、奇数なら2色目を指定します。空白や改行もコレクションに含まれれば順番へ数えます。結合文字や絵文字について、見た目の1文字とコレクションの1要素が常に一致するとは保証されません。空白を飛ばす、行ごとに先頭色へ戻すなどのルールは実装していません。

2026年10月16日の確認では、空白と改行にも色が割り当てられ、2行目の先頭の文字は1色目に戻りませんでした。

あとから文字を追加・削除したら、どうなりますか?

この処理は、実行時の文字へ塗り色を割り当てるものです。あとから文字を追加・削除しても、交互の色を自動で並べ直しません。文字の編集が終わったら、対象のテキストフレームを選び直して再実行し、空白や改行を含めた色の順序を確認してください。

途中で失敗したら、元の色に戻りますか?

元の色を退避してから割り当てますが、Illustrator全体をまとめて巻き戻すトランザクションではありません。途中の割り当てで例外が起きた場合は、退避した色へ戻す処理を試みますが、復元にも失敗する可能性があるため、保存前に文書を確認してください。レイヤーや親グループのロック・非表示は、勝手に解除しません。

実際のIllustratorで、動作を確認していますか?

2026年10月3日に、Illustrator 30.8.2(64-bit)/Windows 11で、自作のポイント文字「ABCDE」をRGBの2色で試験しました。

この試験は、入力欄と終了通知を固定したハーネスで確認した結果です。

2026年10月16日には、Adobe Illustrator 30.8.2(Build 7R)/Windows 11 Proで、書き換えていないJSXを「その他のスクリプト」から実行しました。

CMYKとGrayColorの2色が、空白と改行を含む7つの要素へ交互に割り当てられ、別のテキストの色は変わりませんでした。

エリア内文字、パス上文字、日本語や絵文字などの特殊文字、Macでの実機試験は未実施です。

対象なし、複数選択、ロック・非表示などの場合は、どう扱われますか? 最新はどこで確認しますか?

対象なし、複数選択、ロック・非表示、同名スウォッチ、未対応の色、割り当て失敗など19ケースは、模擬オブジェクトで確認しています。実機のすべての条件を検証した結果ではありません。動かし方は「JSXの保存・実行」、特色とプロセスカラーは「色とスウォッチの設定」、対象の取得は「DOMの基本」の記事を参照してください。参照資料はAdobe資料をもとに維持されているCharacterAttributesの参照で、最新はAdobe公式の資料で確認してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次