Keyboard MaestroでのIllustratorスクリプト実行を解説した記事としては,三階ラボさんの記事が有名です。私もお世話になりました。
3flab inc. | Keyboard Maestro で Illustrator のスクリプトをサクっと実行
記事の要点は,スクリプトのjsxファイルをIllustratorで開くように設定すると,呼び出したとき実行できるということです。シンプルでわかりやすいですね。
ところが慣れてくると,次の項目が気になってきました。
- スクリプトを開くIllustratorのバージョンが固定されているので,別のバージョンを併用するときどうすればいいのかよくわからない
- バージョンが増えるたびにいちいち全バージョン登録するのは面倒くさい
- JavaScript(ExtendScript)のみ対応で,AppleScriptやJXAはそれぞれ別の方法を用意しなければいけない
一方スクリプト起動アプリとして有名なSPAiでは,ExtendScript/AppleScript/JXA の違いを気にすることなく実行できます。あまり気にしていないかもしれませんが,Illustratorのバージョンについても管理してくれています。
具体的には,スクリプトの種類によって
- 目の前に出ているバージョンで実行する
- 複数バージョン起動中は実行を中止する
といった判断をしています。Keyboard Maestroでもこういうのをやってほしいですね。
そこで今回はKeyboard MaestroにSPAi風スクリプト起動ヘルパーを組み合わせ,適切な方法やバージョンでスクリプトを実行してもらう方法を紹介します。
2022/03/15追記:
こちらはもう情報が古くなっています。新しいツールに引き継いだので,スクリプトファイルを実行する Keyboard Maestro 用アクション|note をご覧ください。
下準備
ちょっと最初のセッティングが面倒なのですが,最初だけなので頑張ってついてきてくださいね。
では,こちらのファイルをダウンロードしてください。
sttk3-Yatakagami.zip
Yatakagami.scptというAppleScriptが,スクリプト起動ヘルパー本体です。まずはこのファイルを,そう簡単に移動・改名しない場所に置いてください。この次に説明するKeyboard Maestroマクロでこの場所のパス文字列を使います。
[sttk3] Function.kmmacrosというのがKeyboard Maestroマクロです。ダブルクリックするなどして開くとインストールされますので,そうしてください。中には2つのマクロが入っています。そのうちexecute_script(exec_path, exec_args)のほうには,Yatakagami.scptのパスを入力する必要があります。
osascript という文字の隣にある””の間に,Yatakagami.scptのファイルをドロップしてください。パスが入ります。
このマクロは他のマクロから呼び出すためだけに存在します。なぜそういう作りかたをするかと言うと,あとでパスなどを変更したくなったとき,ここだけ直せば済むからです。コピーしてしまうとコピーした分全部変えなければいけないですよね。
さて下準備の最後は,Keyboard MaestroでIllustratorのみで有効なマクログループを作ることです。実はこのYatakagami.scpt,PhotoshopとInDesignでもスクリプトが呼び出せます。なのでIllustratorで使う場合は,目の前のアプリがIllustratorのときだけ反応するようにしておくのが便利です。
マクログループを作って選択し,Avilable in these applicationsの中に使いたいIllustratorバージョンを全部追加してください。PhotoshopやInDesignの場合でもやることは同じです。そのアプリの全バージョンを追加します。
試してみたところどうやら,他のマシンからインポートしてきたマクログループに,直接Avilable in these applicationsを指定すると動かないようです。自分で作ったグループに設定してください。
ここまでできたら下準備は完了です。
スクリプト登録のしかた
[sttk3] Function.kmmacrosのもう片方macro_templateは,その名の通りスクリプト実行マクロの雛形です。このマクロを下準備のとき作ったIllustrator用グループに複製し,自分が管理しやすい名前をつけてください。複製したマクロの中に「Set Vatiable “exec_path” to Text」というアクションがあります。次は,そのアクションのto: という文字の右にある大きめのテキスト入力欄に,実行したいスクリプトのパスを入力します。下準備でやったのと同じように,ファイルをドロップすればパスが入ります。
あとはNew Triggerで,キーボードショートカットなどお好きな起動方法をセットすれば登録完了です。もうその方法で呼び出せるようになっています。
その下のexec_argsって何?
Adobeのスクリプトでは,実行時に引数を渡せます。引数(ひきすう)とはスクリプトに渡す文字や数字などのデータのことです。スクリプトはそのデータを見てふるまいを変えることができます。そのため,ちょっとだけ内容の違う似たような処理を1つのファイルで管理できて便利です。
今まではその引数を管理するインフラが整っていなかったので,ファイル名で代用していました(【解決】スタイルにショートカットを割り当てたい!を参照)。こういうのがもっと使いやすくなります。ただし,引数受け取りに対応したスクリプトを書けばの話ですが……
引数の設定方法は,単に「Set Vatiable “exec_args” to Text」のto: に文字を入力するだけです。特に引数が必要ない場合は入力欄を空にしておいてください。このアクションや変数を削除してしまうとIllustratorが落ちるので,消してはいけません。
サンプルスクリプトalert.jsx,alert.scptでそれぞれ動作をお試しできます。引数を受け取ってダイアログに出すというものです。開発者の方はそれをベースに書いてみてください。
このスクリプトを開発するにあたって,GOROLIB DESIGN(@gorolib)さん,三階ラボ 長藤寛和(@kanwa)さん,ものかの(@monokano)さんにテストなどご協力いただきました。ありがとうございます。
これでまた少し仕事が速くなりました。今日もさっさと仕事を切り上げて好きなことをしましょう!
コードは長くなったのでダウンロードして見てください。
このサイトで配布しているスクリプトやその他のファイルを,無断で転載・配布・販売することを禁じます。
それらの使用により生じたあらゆる損害について,私どもは責任を負いません。
スクリプトやファイルのダウンロードを行った時点で,上記の規定に同意したとみなします。
はじめまして。
いつも記事を参考にさせていただいております。
今回、記事通りに設定してもKMからマクロキャンセルのメッセージが出てしまいます。
KMは8.2 IllustratorCC2017 CS6 MacOS10.10.5
何か解決のヒントがあれば教えてください。
よろしくお願いします。
はじめまして。コメントありがとうございます。
まだそれだけだとどこに原因があるのか絞りきれないので,
・何をしたときに
・何というメッセージが出る
などの情報をいただけますでしょうか。
実行したマクロのスクリーンショットがあるともっと助かります。
よろしくお願いいたします。
返信ありがとうございます。
①ここに掲載してあるサンプルの「alert.scpt」をIllustratorCC2017で実行した時
②KMから「Macro Cancelled」/ 「~/~/Yatakagami.scpt」のメッセージが出ます。
SSを送りますが、どこへ送ればよいですか?
何となくYatakagami.scptのパスを指定する部分が違って行方不明になっている気がします。
execute_script(exec_path, exec_args)のosascriptのあたりですね。
SSはTwitterのDMや,オンラインストレージに置いて連絡フォームにリンクを載せるなどしてください。
こちらはTwitterで解決。最終的に効果があったのは
・マクログループを作り直す
・Yatakagami.scptをスクリプトエディタで保存し直す
のいずれか,または両方(絞りきれなかった)。
はじめまして。
Yatakagami.scptいつも使わせていただいています。ありがとうございます。
IllustratorCC2019までは大丈夫ですが、今回Illustrator2020でも使わせていただいたところKMから Macro Cancelled
~/~/Yatakagami.scpt: execution error: Illustratorでエラーが起きました: JavaScript code was missin…
と返されてしましいました。
環境は KM:9.0.4 MacOS 10.14.6 Illustrator2020 24.0
実行したのはここに掲載のサンプル「alert.jsx」
解決策などありましたらば、教えていただきますようよろしくお願いいたします。
わざわざコメントありがとうございます。ご利用していただいて嬉しいです。
Yatakagami.scptはAppleScriptのdo javascriptという命令を経由してスクリプトを実行しているのですが,Illustrator 2020はそこにバグがあってjsxファイルを受け付けない状態になっています。プログラムの仕様を変更しないと動かないので,応急処置としてこちらのマクロをお勧めしています。
https://twitter.com/sttk3com/status/1197284303593299968?s=20
画像で表示しているだけなんですが,再現できそうでしょうか。
ご対応ありがとうございます。
紹介いただいた方法で再現できました!
快適なDTP環境が構築できそうです。感謝です!
よくあれだけでわかりましたね! とりあえず解決してよかったです。