2025-07-09

フォントごとにレイヤーを分けてくれるスクリプト/illustrator

フォントごとにレイヤーを分けてくれるスクリプトを作成しました。


デザインレギュレーションの確認で、指定のフォントを使っているか確認したい。

けれども渡されるデータはPDF。
PDFをイラレで開くと、一文字一文字切り分けられてしまって、どこがどのフォントだか分からん!! って時に便利なスクリプトを作成しました。
(そもそもPDFをイラレで開くべきではないけど……)

フォントごとにレイヤーを分けてまとめてくれます。


自力で検索する方法

ちなみに、自分で頑張って検索する方法もあります。


自力検索方法1 「書式」-「フォントの検索と置換」を使う。

「フォントの検索と置換」で、「ドキュメントフォント」の欄に表示されているのが、現在使われているフォントです。
右にある「検索」ボタンを連打すれば、どのフォントがどこに使われているかざっくり把握することができます。

通常はこの方法で探すと思いますが、文字が細切れになっていると大変です。


自力検索方法2 「選択」-「フォントファミリー」で探す

調べたいフォントが使われているテキストを選択した状態で、「選択」-「共通」-「フォントファミリー」をクリックすると、同じフォントが使われているテキストを一気に選択することができます。

ウェイトも指定したいときは「フォントファミリー(スタイル)」にしたりと、いろいろ応用が利きます。

スクリプトを使わないでも、「フォントの検索と置換」で探したいフォントがある場所を探し、それを選択した状態で「選択」-「フォントファミリー」でだいたい事足りると思います。


スクリプト配布

このスクリプトは素人が作ったものなので、使ってみて何か問題が起こっても責任は取れません。
動作の正確性や安全性についても保証はできないので、使うのはあくまで自己責任でお願いします。


【使い方】

「フォントごとにレイヤー分け.jsx」スクリプトを起動する。

スクリプトを起動すると、画像のようにレイヤーごとにまとめてくれます。


【ダウンロード】 

Googleドライブです。右上のダウンロードボタンからDLしてください。

https://drive.google.com/file/d/1CY6mR3nSa5Vil8EA78CBakySGiHuJoKg/view?usp=sharing

右上にこんな感じのボタンがあります。

ダウンロードしたスクリプトをイラレ上にドラッグ&ドロップしても使えます。


コードはこんな感じ。

/**
 * Illustratorスクリプト
 * ============================
 * 【目的】
 * ドキュメント内のすべてのテキストオブジェクトを調べ、
 * 使用フォントごとに専用レイヤーに振り分けて整理します。
 *
 * 例)小塚ゴシックを使っている文字は「KozGoPro-Regular」レイヤーに移動。
 *
 * 【使い方】
 * 1. Illustratorで対象ドキュメントを開く。
 * 2. スクリプトを実行する(ExtendScript Toolkit または Scripts フォルダに保存)。
 * 3. フォントごとのレイヤーに自動で分類されます。
 *
 * ※既存レイヤー名と同じものがあれば再利用します(重複作成なし)。
 */

// スクリプト全体を無名関数で囲んでスコープを制限
(function () {
    var doc = app.activeDocument;                // アクティブなドキュメントを取得
    var items = doc.textFrames;                  // 全テキストフレームを取得
    var fontLayerMap = {};                       // フォント名 → レイヤー のマッピング

    /**
     * 指定された名前のレイヤーを探し、あれば返す。
     * なければ新しく作成して返す。
     *
     * @param {string} layerName - 探すレイヤー名(=フォント名)
     * @returns {Layer} 対応するレイヤー
     */
    function getOrCreateLayerByName(layerName) {
        for (var i = 0; i < doc.layers.length; i++) {
            if (doc.layers[i].name === layerName) {
                return doc.layers[i]; // 既存のレイヤーを再利用
            }
        }
        // 見つからなければ新規作成
        var newLayer = doc.layers.add();
        newLayer.name = layerName;
        return newLayer;
    }

    // すべてのテキストフレームを処理
    for (var i = 0; i < items.length; i++) {
        var text = items[i];
        var font = text.textRange.characterAttributes.textFont;

        if (font) {
            var fontName = font.name;

            // 該当フォント用レイヤーを取得 or 作成
            if (!fontLayerMap[fontName]) {
                fontLayerMap[fontName] = getOrCreateLayerByName(fontName);
            }

            // 該当レイヤーにテキストを移動
            text.move(fontLayerMap[fontName], ElementPlacement.PLACEATBEGINNING);
        }
    }

    alert("フォントごとにレイヤー分けが完了しました!");
})();