Adobeの審査を通過したXDプラグインなら,自動でプラグインマネージャーのインストール画面を開くリンクを用意できます。ユーザーは情報を見つけたその場で簡単にインストールでき,作者にとっては宣伝しやすくなるというお得な機能です。感謝!
1 |
https://adobe.com/go/xd_plugins_discover_plugin?pluginId=e46fe5a4 |
リンクのパスは上のように,https://adobe.com/go/xd_plugins…?name=に続いてe46fe5a4などプラグインIDをつけます。IDはFinderでプラグインのデータがあるフォルダを開き,manifest.json内のnameとid項目を確認するとわかります。しかしそういう手間がかかることはなるべくしたくないですよね。
そこで今回は,XDにインストールされているプラグインの名前とインストールリンクをクリップボードにコピーするAutomatorサービス(クイックアクション)を紹介します。Automator用なのでmac専用です。windowsのかたはすみません。
こちらのファイルをダウンロードしてください。
Copy plugin link for XD.workflow
インストール方法
ダウンロードした Copy plugin link for XD.workflow をダブルクリックするなどして開くとインストールするか聞かれるので,インストールを選んでください。完了したらダイアログでお知らせが出てきます。
使いかた
- アプリケーションメニューに[サービス]項目があります。その中の[Copy plugin link for XD]を選んでください。
- XDにインストールされているプラグイン一覧がダイアログで出るので,リンクを作りたいものを選びます。複数選択可能です。
- OKを選ぶと,リンク文字列がクリップボードにコピーされます。
コピーされるテキストはこんな感じです。
1 2 |
SelectMenu | https://adobe.com/go/xd_plugins_discover_plugin?pluginId=e46fe5a4 Singari | https://adobe.com/go/xd_plugins_discover_plugin?pluginId=6a37e6e3 |
これでまた少し仕事が速くなりました。今日もさっさと仕事を切り上げて好きなことをしましょう!
コードはこちら
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 |
function run() { const stdApp = Application.currentApplication() ; stdApp.includeStandardAdditions = true ; // XDの各プラグインのフォルダを取得する const appSupport = stdApp.pathTo('application support').toString() ; const pluginPaths = [ `~${appSupport}/Adobe/Adobe XD/plugins/`, `~${appSupport}/Adobe/UXP/Plugins/External/` ] ; let pluginArray = [] ; pluginPaths.forEach((aPath) => { const plugins = folderChildren(aPath) ; if(plugins.length) {pluginArray = pluginArray.concat(plugins) ;} }) ; if(pluginArray.length <= 0) {return ;} // 各プラグインの情報を取得する const infoObj = {} ; let manifestPath, manifest ; for(let aDir of pluginArray) { manifestPath = aDir + '/manifest.json' ; if(!($.NSFileManager.defaultManager.fileExistsAtPath(manifestPath))) {continue ;} manifest = parseJSONFromFile(manifestPath) ; infoObj[manifest['name']] = manifest['id'] ; } if(infoObj == {}) {return ;} // リンクを作りたいプラグインを選択する stdApp.activate() ; const names = Object.keys(infoObj).sort() ; const retval = stdApp.chooseFromList(names, { withPrompt: 'リンクを作りたいプラグインを選択(複数可)', defaultItems: names[0], multipleSelectionsAllowed: true, emptySelectionAllowed: false }) ; if(!retval) {return ;} // リンクを作ってクリップボードに収める const arr = retval.map((aItem) => { return `${aItem} | https://adobe.com/go/xd_plugins_discover_plugin?pluginId=${infoObj[aItem]}` ; }) ; const res = arr.join('\r') ; stdApp.setTheClipboardTo(res) ; // 通知する stdApp.displayNotification(res, {withTitle: 'リンクコピー済'}) ; return res ; } /** * 対象のフォルダに含まれるファイル・フォルダを取得する * @param {String} pathStr 対象のフォルダのパス * @param {Boolean} [includeInvisibles] 非表示ファイルを含む。初期設定はfalse * @return {Array} */ function folderChildren(pathStr, includeInvisibles = false) { let res = [] ; const path = $(pathStr).stringByExpandingTildeInPath.js ; const fm = $.NSFileManager.defaultManager ; const contents = fm.contentsOfDirectoryAtPathError(path, $()).js ; if(contents == null) {return res ;} let currentItem ; for(let aItem of contents) { currentItem = aItem.js ; if(!includeInvisibles && currentItem[0] == '.') {continue ;} res.push(`${path}/${currentItem}`) ; } return res ; } /** * JSONファイルをパースする * @param {String} pathStr 対象のファイルのパス * @return {Object} */ function parseJSONFromFile(pathStr) { const data = $.NSData.dataWithContentsOfFile(pathStr) ; const res = ObjC.deepUnwrap($.NSJSONSerialization.JSONObjectWithDataOptionsError(data, $.kNilOptions, $())) ; return res ; } |
このサイトで配布しているスクリプトやその他のファイルを,無断で転載・配布・販売することを禁じます。
それらの使用により生じたあらゆる損害について,私どもは責任を負いません。
スクリプトやファイルのダウンロードを行った時点で,上記の規定に同意したとみなします。