Illustrator ガイドを1つのレイヤーにまとめる方法【無料スクリプト配布】

スポンサーリンク
スクリプト
スポンサーリンク

Illustratorで作業していると、
「ガイドがいろんなレイヤーに散らばって管理しづらい…」
と感じたことはありませんか?

複数人で触ったデータや、過去データを流用したファイルでは特に、
ガイドがバラバラのレイヤーに存在していて、確認や編集のたびにストレスになります。

そんなときに便利なのが、
ガイドを1つのレイヤーにまとめるスクリプトです。

ワンクリックで、ドキュメント内のガイドをすべて1箇所に集約できるため、
レイヤー構造が一気にスッキリします。

このスクリプトでできること

  • 複数レイヤーに分散したガイドを一括で集約
  • ガイド専用レイヤーを作成して整理
  • 通常オブジェクトには一切影響なし
  • データの見通しが大幅に改善

👉 特に「入稿前チェック」や「他人データの整理」に効果絶大です。

こんな人におすすめ

  • ガイドが散らばっていて探すのが大変
  • レイヤー構造を整理したい
  • 他人が作ったデータを触ることが多い
  • 入稿前にデータをきれいに整えたい

使用イメージ

Before

・各レイヤーにガイドがバラバラに存在
・どこに何のガイドがあるか分かりにくい

After

・ガイドが1つのレイヤーに集約
・表示・非表示・ロック管理が一発

👉 作業効率がかなり変わります。

使い方

  1. Illustratorでファイルを開く
  2. スクリプトを実行
  3. ガイドが自動で1つのレイヤーにまとめられる

操作はこれだけです。

スクリプトの導入方法(コピペ版)

ダウンロードは不要です。

以下のコードをコピーしてテキストファイルとして保存してください。

スポンサーリンク

Windowsの場合

  1. メモ帳を開く
  2. 下のコードを貼り付け
  3. 名前を付けて保存
  4. ファイル名を
guide_merge.jsx
にする
  1. 文字コードはUTF-8
  2. 保存

Macの場合

  1. テキストエディットを開く
  2. 「標準テキスト」に変更
  3. 下のコードを貼り付け
  4. 名前を付けて保存
  5. ファイル名を
guide_merge.jsx
にする

スクリプトコード

#target illustrator
(function () {

if (app.documents.length === 0) {
    alert("ドキュメントがありません");
    return;
}

var doc = app.activeDocument;
var TARGET_LAYER_NAME = "guide";

function getLayerByName(name) {
    for (var i = 0; i < doc.layers.length; i++) {
        if (doc.layers[i].name === name) return doc.layers[i];
    }
    return null;
}

function createGuideLayer() {
    var layer = getLayerByName(TARGET_LAYER_NAME);
    if (!layer) {
        layer = doc.layers.add();
        layer.name = TARGET_LAYER_NAME;
    }
    layer.locked = false;
    layer.visible = true;
    return layer;
}

function collectGuides(container, arr) {

    for (var i = 0; i < container.pathItems.length; i++) {
        try {
            if (container.pathItems[i].guides) {
                arr.push(container.pathItems[i]);
            }
        } catch(e){}
    }

    for (var g = 0; g < container.groupItems.length; g++) {
        collectGuides(container.groupItems[g], arr);
    }

    for (var c = 0; c < container.compoundPathItems.length; c++) {
        var cp = container.compoundPathItems[c];
        for (var k = 0; k < cp.pathItems.length; k++) {
            try {
                if (cp.pathItems[k].guides) {
                    arr.push(cp.pathItems[k]);
                }
            } catch(e){}
        }
    }
}

var guides = [];
var lockedLayersWithGuides = [];

for (var i = 0; i < doc.layers.length; i++) {

    var layer = doc.layers[i];
    var temp = [];

    collectGuides(layer, temp);

    if (temp.length > 0) {

        if (layer.locked) {
            lockedLayersWithGuides.push(layer);
        }

        for (var j = 0; j < temp.length; j++) {
            guides.push(temp[j]);
        }
    }
}

if (guides.length === 0) {
    alert("ガイドが見つかりませんでした");
    return;
}

if (lockedLayersWithGuides.length > 0) {

    var names = [];
    for (var i = 0; i < lockedLayersWithGuides.length; i++) {
        names.push(lockedLayersWithGuides[i].name);
    }

    var msg =
        "ロックされているレイヤーにガイドがあります\n\n" +
        names.join("\n") +
        "\n\nロックを解除して続行しますか?";

    if (!confirm(msg)) {
        // Cancelなら完全終了(レイヤーも作らない)
        return;
    }

    for (var i = 0; i < lockedLayersWithGuides.length; i++) {
        lockedLayersWithGuides[i].locked = false;
    }
}

// ここで初めて guide レイヤーを作る
var guideLayer = createGuideLayer();

var moved = 0;

for (var i = 0; i < guides.length; i++) {
    try {
        guides[i].move(guideLayer, ElementPlacement.PLACEATEND);
        moved++;
    } catch(e){}
}

guideLayer.zOrder(ZOrderMethod.BRINGTOFRONT);
guideLayer.locked = true;

alert("ガイドを " + moved + " 個、guide レイヤーにまとめました");

})(); 

まとめ

ガイドは便利な反面、
増えてくると「見えないゴミ」になりがちです。

このスクリプトを使えば、
ワンクリックで整理された状態を作れるので、

  • 作業効率アップ
  • ミス防止
  • データの可読性向上

すべてに効いてきます。

「ガイドが散らかってるな…」と思ったら、
ぜひ一度使ってみてください。

スポンサーリンク

コメント