0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

スクショ1枚からPhotoshop・Illustratorのワイヤーフレームをスクリプトで組み立てる

0
Posted at

スクショ1枚からIllustratorのワイヤーフレームをスクリプトで組み立てる

既存サイトを参考にワイヤーフレームを引き直す作業が、たまに発生します。四角とテキストを並べるだけなのに地味に時間がかかる。そこでスクリーンショットをClaudeに渡して、ExtendScriptを書かせてみました。

結論から言うと、1回目は必ずズレます。ただしズレるのは数値だけなので、直すのは速い。手で四角を並べるより早く終わりました。

環境はIllustrator 2026とPhotoshop 2026です。下記はPhotoshopの作成

image.png

image.png

なぜスクリプトなのか

画像生成AIにワイヤーフレームを描かせる手もありますが、出てくるのは画像なので、後から動かせません。Figmaのプラグインを書く方法もある。ただし環境構築が必要で、今回のような単発の作業には重すぎました。

ExtendScriptなら.jsxファイル1枚です。ファイル > スクリプト から流すだけで、編集可能なパスが出てきます。

自分にとって一番大きかったのは、レイアウトの数値が全部テキストで残ることでした。ズレたときにAIに直させる必要がなく、CONFIGの数字を書き換えれば済みます。会話を往復しなくていいぶん、結果的に速い。

全体の流れ

  1. 元になるスクリーンショットを用意する
  2. Claudeに画像とプロンプトを投げる
  3. 出てきたコードを.jsxで保存する
  4. Illustratorで ファイル > スクリプト > その他のスクリプト(Ctrl/Cmd + F12)
  5. 実行結果を見て数値を詰める

投げたプロンプトはこんな感じです。

このスクリーンショットのワイヤーフレームを作成するExtendScriptを書いてください。

- Illustrator用(.jsx)
- 1920x1000のアートボード
- グレースケール。写真部分はダミー画像(枠+×)で表現
- レイアウトの数値はすべてファイル冒頭のCONFIGにまとめる
- レイヤーはヘッダー、ヒーロー、カルーセルのように分ける

3つ目と4つ目が効きます。特にCONFIGへの集約を指定しないと、数値が関数の中に散らばって、あとで自分で直せなくなります。

文字サイズが4.2倍になった話

いきなり本番のワイヤーフレームではなく、まずロゴで小さく試しました。出てきたのがこれです。

原因は単位でした。textItem.sizeはポイント指定です。そこにpxのつもりで115を渡していた。ドキュメントは300dpiで作っていたので、115pt は 479px として描画されます。300 ÷ 72 = 4.166、ぴったり4.2倍です。

修正は3行でした。

function pxToPt(px) {
    return px * 72 / CONFIG.resolution;
}

ワイヤーフレームを72dpiで作る場合はptとpxが一致するので、この問題は起きません。ロゴのように高いdpiで作るときだけ踏みます。

もうひとつ、中央揃えにトラッキングをかけると、最後の文字の後ろにも字間の空きが入って、見た目の中心が左にズレます。実際の描画範囲を見て置き直す関数を1つ用意しておくと、フォントが変わっても崩れません。

var vb = tf.visibleBounds;   // [left, top, right, bottom]
var w = vb[2] - vb[0], h = vb[1] - vb[3];
tf.translate(ax(x) - w / 2 - vb[0], (ay(y) + h / 2) - vb[1]);

PhotoshopとIllustratorの違い

同じExtendScriptですが、オブジェクトモデルは別物です。Photoshop用に書いたものはIllustratorでは動きません。

Photoshop Illustrator
図形 選択範囲を作ってfill / stroke pathItems.rectangle()でパスを置く
多角形で近似する ellipse()で真円
文字 artLayers.add() + LayerKind.TEXT textFrames.add()
Y軸 下向き 上向き(上端が0、下がマイナス)

Y軸の向きが毎回こんがらがるので、画面座標のまま計算して、描画の直前に変換する関数を2つ置きました。

function ax(x) { return X0 + x; }
function ay(y) { return Y0 - y; }

X0Y0はアートボードの原点で、artboards[0].artboardRectから読みます。0で決め打ちにすると環境によってズレるので、実測したほうが安全です。

これでレイアウト定義の部分がPhotoshop版とそのまま共通になりました。片方の数値を直したら、もう片方にコピーするだけで済みます。

なお、UXPで書けないかも試しました。Photoshopは.psjsという拡張子で単体スクリプトが動きます(Photoshop 23.5以降)。ES6が使えるので書き味は良い。ただしIllustratorのUXPは2026年5月時点で公開APIもドキュメントも出ておらず、Adobe社内でしか使われていないそうです。コミュニティの質問は2020年から続いているらしい。当面は.jsxで問題なさそうです。

AIに書かせるときに効いたこと

曲面のような形もパラメータにさせる。 今回のスクショにはカルーセルが円錐っぽく歪んだ状態で入っていました。これは上辺と下辺を別々の楕円弧として定義してもらいました。

carousel: {
    top:    { cx: 1780, cy: 410, rx: 1150, ry: 265, a0: 180,   a1: 278.7 },
    bottom: { cx: 1415, cy: 700, rx:  840, ry: 250, a0: 141.7, a1:  53.1 },
    panels: 3
}

カーブが浅ければryを増やす。曲がり始めを変えたければa0をいじる。ここまで数値に落ちていれば、会話に戻らずに自分で寄せられます。

崩れたら実行結果のスクショを投げ返す。 ロゴが壊れたときは「デザインがずれるよ」の一言と画像だけ送りました。それで単位の取り違えを当ててきます。エラーが出ない種類のバグなので、文章で説明するより速い。

フォントはPostScript名の候補を並べさせる。 環境に入っていない名前を指定すると落ちます。上から順に試して見つかったものを使う関数を書かせておくと、MacとWindowsで使い回せます。

Codexでやる場合

まとめ

完全自動にはなりません。1回目のスクリプトは必ずどこか崩れます。

ただ、崩れ方が数値の問題に閉じているので、CONFIGを見て直せば終わります。手で四角を並べ直すより速い、というのが今のところの感触です。

微妙だったのは曲面です。スクショから楕円の角度を逆算するのは無理があって、結局は目視で寄せました。まっすぐな要素しかないワイヤーフレームなら、もっと素直に出てきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?