テクニカルライターやスクリプト開発者は、Illustratorのバージョンごとの更新を常に追跡していることでしょう。新機能の追加でメニューが増えたり、ローカライズの都合でメニューの文言が変わったら、それを成果物に反映する必要があるからです。
特にIllustrator 2023以降は、バージョンが0.1進むだけのマイナーアップデートでも、機能の追加や機能名の変更が頻繁に起こっています。変化を見つけるのもひと苦労ですね。
そこで今回は、Illustratorの全メニューのタイトル(テキスト)を取得し、ダイアログに出すIllustrator用スクリプト を紹介します。バージョンごとに取得したテキストを保存しておけば、diffコマンドなどのテキスト比較ツールで機械的に違いを検出できる、という作戦です。
目次
あらましを教えて
Illustrator用AppleScript「sttk3_menu_titles.scpt」です。Illustratorのスクリプトメニューに入れて実行すると、全メニュー項目のタイトル文言をテキスト化してダイアログに出します。できるテキストは次のようなものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Apple Apple>Illustrator について... Apple>環境設定 Apple>環境設定>一般... Apple>環境設定>選択範囲・アンカー表示... Apple>環境設定>テキスト... Apple>環境設定>単位... Apple>環境設定>ガイド・グリッド... Apple>環境設定>スマートガイド... Apple>環境設定>スライス... Apple>環境設定>ハイフネーション... Apple>環境設定>プラグイン・仮想記憶ディスク... Apple>環境設定>ユーザーインターフェイス... Apple>環境設定>パフォーマンス... Apple>環境設定>ファイル管理... Apple>環境設定>クリップボードの処理... Apple>環境設定>ブラックのアピアランス... Apple>環境設定>デバイス... Apple>サービス Apple>Illustrator を隠す Apple>ほかを隠す Apple>すべてを表示 Apple>Illustrator を終了 ファイル ファイル>新規... ファイル>テンプレートから新規... 以下省略 |
実行開始から終了まで数秒かかりますが、Objective-Cを利用しているため、単純なAppleScriptと比べ大幅に速くなっています。
きっとAppleScriptだけで書いたスクリプトを実行してフリーズするというのは多くのかたが通った道でしょう。今回からは楽ができます!
AppleScriptなので、macOSのIllustratorのみに対応しています。こちらからダウンロードしてください。
sttk3-menu-titles.zip
使いかたは?
1 sttk3_menu_titles.scptを、Illustratorのスクリプトフォルダに入れる
残念ながら、このスクリプトはKeyboard MaestroやSPAi経由で実行しても正しく動きません。必ずスクリプトフォルダに入れてください。フォルダの位置は次の通りです。
/Applications/Adobe Illustrator [バージョン]/Presets/ja_JP/スクリプト
もうすでにIllustratorが起動している場合は再起動してください。スクリプトはそのタイミングでメニューに出てきます。
2 ファイル > スクリプト > sttk3_menu_titles のメニューを選ぶ
数秒するとダイアログにテキストが表示されます。
3 表示されたテキストを自力でクリップボードにコピーし、テキストエディタで保存する
あとは、diffなどのプログラムでバージョンごとに比較するだけです。BBEditの Serach > Find Differences… を使うのが手軽でおすすめ。
応用
スクリプトを書き換えることで、階層の区切り文字「>」を別の文字に変更できます。ソースコードの separator を参照してください。
また、初期状態では Apple > サービス や 書式 > フォント などの下層のメニュー項目を無視する設定になっています。これもスクリプトを書き換えて、下層を無視する項目を増やしたり減らしたりできます。ソースコードの exclude_descendants を参照してください。
これでまた少し仕事が速くなりました。今日もさっさと仕事を切り上げて好きなことをしましょう!
作者に感謝を伝えたい!
Buy me a coffeeは、クレジットカード払いなどでクリエイターにコーヒーをおごれるサービスです。ツール・情報が役に立った! 感謝の気持ちを表現したい! というかた、おごっていただけましたら嬉しいです☕️
コードはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
(** * @file Adobe Illustratorのメニュー名をすべてテキストにして、ダイアログに表示する。 * [注意]: 正しく動かすには、Illustratorのスクリプトメニューに登録してから実行してください * @version 1.0.0 * @author sttk3.com * @copyright © 2024 sttk3.com *) use scripting additions use framework "AppKit" property ObjC : current application -- パス区切り文字。変更可能 property separator : ">" -- 子孫メニューまでは探索しない項目。変更可能。パス区切り文字を変更したらここも合わせて変える必要がある property exclude_descendants : {"Apple>Services", "File>Open Recent Files", "File>Scripts", "Type>Font", "Type>Recent Fonts", "Type>Size", "Type>Insert Special Character", "Type>Insert WhiteSpace Character", "Type>Insert Break Character", "View>Rotate View", "Window>Extensions", "Window>Graphic Style Libraries", "Window>Symbol Libraries", "Window>Swatch Libraries", "Window>Brush Libraries", "Apple>サービス", "ファイル>最近使用したファイルを開く", "ファイル>スクリプト", "書式>フォント", "書式>最近使用したフォント", "書式>サイズ", "書式>特殊文字を挿入", "書式>空白文字を挿入", "書式>分割文字を挿入", "表示>ビューを回転", "ウィンドウ>エクステンション", "ウィンドウ>グラフィックスタイルライブラリ", "ウィンドウ>シンボルライブラリ", "ウィンドウ>スウォッチライブラリ", "ウィンドウ>ブラシライブラリ"} on run set main_menu to ObjC's NSApp's mainMenu() set menu_list to my get_menu_titles(main_menu, "", exclude_descendants) set res to my do_join(menu_list, return) display dialog "メニュー文字列 (コピーして使用)" default answer res with title "sttk3_menu_titles" return res end run (** * Array.join * @param {list} array 対象の配列 * @param {text} dst_delim 区切り文字 * @returns {text} *) on do_join(array, dst_delim) try set original_delim to AppleScript's text item delimiters set AppleScript's text item delimiters to dst_delim set res to array as text set AppleScript's text item delimiters to original_delim on error error_message number error_number set AppleScript's text item delimiters to original_delim error error_message number error_number error end try return res end do_join (** * String.split * @param {text} src_text 対象の文字列 * @param {text} dst_delim 区切り文字 * @returns {list} *) on do_split(src_text, dst_delim) try set original_delim to AppleScript's text item delimiters set AppleScript's text item delimiters to dst_delim set res to every text item of src_text set AppleScript's text item delimiters to original_delim on error error_message number error_number set AppleScript's text item delimiters to original_delim error error_message number error_number end try return res end do_split (** * 指定したメニュー項目の子孫のパス文字列を生成する * @param {NSMenu / NSMenuItem} menu_object 探索開始するメニュー * @param {text} path_text 探索開始位置までのパス。例:"Apple>Preferences" * @param {list<text>} exclude_descendants_list 子孫を探索しないメニューのパス文字列の配列 * @returns {list<text>} *) on get_menu_titles(menu_object, path_text, exclude_descendants_list) set menu_items to menu_object's itemArray() set menu_titles to {} repeat with a_menu_item in menu_items if (a_menu_item's separatorItem) then -- メニュー項目がseparatorItemだったらskip (* set a_menu_item_title to "---" as text set end of menu_titles to a_menu_item_title *) else -- メニュー項目のタイトルを取得する set a_menu_item_title to (a_menu_item's title()) as text if (path_text is "") then set push_text to a_menu_item_title else set push_text to path_text & separator & a_menu_item_title end if -- 特例:個人情報(メールアドレス)を削除する if ((push_text contains "ログアウト") or (push_text contains "Sign Out")) then set push_text to item 1 of (my do_split(push_text, " ")) end if -- メニュー項目のタイトルを記録する set end of menu_titles to push_text -- 除外項目(exclude_descendants_list) に含まれていなければ、子孫項目を探索する if (push_text is not in exclude_descendants_list) then if (a_menu_item's hasSubmenu()) then set submenu to a_menu_item's submenu() set submenu_titles to get_menu_titles(submenu, push_text, exclude_descendants_list) set menu_titles to menu_titles & submenu_titles end if end if end if end repeat set res to menu_titles return res end get_menu_titles |
このサイトで配布しているスクリプトやその他のファイルを,無断で転載・配布・販売することを禁じます。
それらの使用により生じたあらゆる損害について,私どもは責任を負いません。
スクリプトやファイルのダウンロードを行った時点で,上記の規定に同意したとみなします。