見出し画像

【Photoshop JavaScript】外部ExtendScriptファイルを読み込む【Illustratorjavascript】

スクリプトが長々としてきた場合、保守をしやすくするために、ファイルを分割したいものです。

でも、HTMLからJSを読み込む時と違って、PSスクリプトを分割するとなると、フォルダごと配布しないといけないし管理めんどくさいねーーーと、思って、分割せずに使っていたんですが限界でした。

というわけで、フォルダごと配布する面倒の方をとることにしました。

やり方

//@include "folder_name\\servece_hoge.jsx";

※コメントアウトして使うので、最初の//も含めて記述します。

ファイル名は絶対パスでも相対パスでも。今回は人に配布して使う前提なので相対パスです。

ファイル名の区切りは、windowsの場合「/」ではなくて「\」を使うので、地味にエスケープ(「\」を「\\」にする)が必要です。

コメントアウト内なのでVScodeのエラーが出てくれなくて、しばらくの間

Syntax Error:
ファイルまたはフォルダーが存在しません。 <= line:27 column:1 file:(略)

エラーに苦しみました……

ファイル名の区切り文字がOSによって変わるので、windows・Mac両方で使われる可能性がある場合何らかの対応が必要になります。注意。

Illustratorでも同様に読み込みできるようです。

階層化する

Controller(FileA)>Service(FileB)>Domain(FileC)と階層化したい時には、FileAからFileBを呼び、FileBからFileCを呼ぶ、というやり方ができます。

絶対参照を使うか、相対参照でも「..\\」を使えば、自分より上の階層に一度戻ってからその下のフォルダを呼ぶことができる(が、まあ、自分より上の階層への相対参照はどうしても不安定になるので、使いどころは選んで……)ので、ServiceとDomainをどちらもルートフォルダに作ってもそう面倒な事にはなりません。

上の階層への相対参照を使わずにやるなら、不格好だけどServiceの中にDomainフォルダ作る様にする感じかな……

//fileA.jsx

//@include "service\\fileB.jsx"
main();

function main(){
    service_test();
};
//service/fileB.jsx

//@include "..\\domain\\fileC.jsx"
function service_test(){
    $.writeln("service_test_dayo!");
    domain_test();
}
//domain/fileC.jsx

function domain_test(){
    $.writeln("domain_test_dayo!!");
}

出力

service_test_dayo!
domain_test_dayo!!

参考

やり方はこちらの記事を参考にしました。

こちらの記事で紹介されている

#include '外部JSXの保存先';

の方法については、VScodeのエクステンションであるExtendScriptDebuggerでは正しいコードとして認識されませんでした。

この記事が気に入ったらサポートをしてみませんか?