macOS 12で新規搭載された「ショートカット.app」、このアプリケーション上で記述するワークフローを「ショートカット」、ショートカットを構成する各コマンドを「アクション」と呼びます。
ショートカット.appは日本語ローカライズされた名称であって、実際には「Shortcuts.app」という名前です。
AppleScript用のショートカット実行GUIなしアプリケーション「Shortcuts Events.app」が別途(ショートカット.appのバンドル内に)存在しており、こちらもAppleScript用語辞書を備えています。
Shortcuts.appに対してコマンドを実行すると、同アプリケーションが起動します。Shortcuts Events.appに対してコマンドを実行すると、Shortcuts.appは起動しません。
両者とも辞書内容は一緒であり、バージョン番号と名前以外に差異はありません。
AppleScript名:ショートカットのプロパティを取得.scpt |
tell application "Shortcuts" properties –> {frontmost:false, class:application, name:"Shortcuts", version:"5.0"} end tell |
AppleScript名:Shortcuts Eventsのプロパティを取得.scpt |
tell application "Shortcuts Events" properties –> {frontmost:false, class:application, name:"Shortcuts Events", version:"1.0"} end tell |
ショートカット.appを起動するとこのようなウィンドウが表示されます。
あるいは、このようなウィンドウです。
ショートカット一覧が並んだ表示状態で実行することもできますし、ダブルクリックして個別ウィンドウ表示した状態で実行することも可能です。
また、メニューから実行することも可能です。
環境設定では、以下のような設定が行えます。「詳細」に「スクリプトの実行を許可」の項目があり、デフォルトではオフになっています。当然、ここはオンにします。他の項目についても適宜、自己責任でオンにすることになります。
ショートカット(ワークフロー)はローカルに保存されません。iCloud上に保存されます。
ショートカット(ワークフロー)の共有はコンテクストメニューから行います。このさい、iCloud上のURLが直接表示されないため、少々面倒な感じです。
「リーディングリスト」で共有すると、WebブラウザのURL欄に詳細なURLが表示されるため、これを用いるとよさそうです。
https://www.icloud.com/shortcuts/e788482535704922aaa9f617491353b2
新規ショートカットの作成には、メニューから「ファイル」>「新規ショートカット」(Command-n)を実行するか、ショートカット.appのウィンドウでツールバーの「+」をクリックします(すべてのショートカット、My Shortcutなど選択中のフォルダによって表示/非表示状態が変わります)。
初期状態はこんな(↑)感じです。アクションを選択してダブルクリックするか、ビュー上にドラッグ&ドロップするとアクションが置かれます。
最初なので、ダイアログでも出しておきましょう。
ツールバー上の「▶︎」ボタンをクリックするか、Command-rでショートカット(ワークフロー)を実行します。
ショートカットは名前で識別することになります。ツールバー上の名称を変更すると名前を付けられます。
AppleScript側からはこの名前「AS TEST2」を指定して呼び出すことになります。
AppleScript名:ショートカット.appでショートカット実行.scpt |
tell application "Shortcuts" run shortcut "AS TEST2" end tell |
AppleScript名:Shortcuts Eventsでショートカット実行.scpt |
tell application "Shortcuts Events" run shortcut "AS TEST2" end tell |
現在のところ、Shortcuts.appならびにShortcuts Events.appのrunコマンドでパラメータを指定すると実行時にエラーになるので、パラメータをAS側からショートカット側に指定できていません。クリップボード経由で指定するとかいってアクロバット技を使えばできないことはありませんが、パラメータを指定できないのは明らかな「バグ」です。
あとは、他のプログラムとの相互運用性を高めるためには、ショートカット側の実行結果をAS側に返してくれることが望ましいです。オブジェクトによっては、sdefを通じてやりとりできないCocoa Object(CLLocationなど)もありますが、結果は得られるべきでしょう。
ショートカット.appについては、ヘルプにけっこうな内容の説明が書かれているので、まずはそちらを読むとよいでしょう。ただ、日本語訳がよくないのか「お前は何を言ってるんだ?」という表現が散見され、説明文というよりも広告みたいな内容の箇所もあります。
ささき says:
Shortcuts.appやShortcuts Events.appもやっぱりセキュリティー設定で許可にしてやる必要があるのですか?
Takaaki Naganoya says:
システム環境設定の「セキュリティとプライバシー>プライバシー>オートメーション」
の設定については、とくに「Finderをコントロールするなら許可しろ」とか「FileMaker Proをコントロールするなら許可しろ」と聞いてくることはありません。
Dirk says:
You can even share parameters between shortcuts and AS, if belly something buggy. I have written something about this:
Dirk says:
See: Late Night Software -> Forum -> AppleScript much faster on Monterey?
Takaaki Naganoya says:
Hi Dirk,
I read the thread on LateNightSW and found Shortcuts’s parameter function works partly.
I wrote simple parameter receiving Shortcut to receive parameters.
https://www.icloud.com/shortcuts/b9d99ea21804455ba765c972b115603d
“accepts” word have to be re-written as “with” word in every compilation as Dirk wrote.
set aList to “AAAA”
tell application “Shortcuts”
set theResult to run shortcut named “Test” accepts input aList
end tell
–> string parameter is OK.
set aList to {1, 2, 3}
tell application “Shortcuts”
set theResult to run shortcut named “Test” accepts input aList
end tell
–> list parameter is OK.
set aList to {myLabel:11111}
tell application “Shortcuts”
set theResult to run shortcut named “Test” accepts input aList
end tell
–> record is ignored…..hmmmmm
Though we can’t pass through Cocoa Objects via AppleScript’s sdef interface, clipboard may be able to pass some Cocoa objects such as NSImage, PDFDocument and so on….
Dirk says:
Hi Takaaki,
You are right. Records are currently simply ignored. But I found that you can used the output from the AppleScript action directly (e.g. with the List action “Object for index”).
on run {input, parameters}
return input as list
end run
List action: “Object for index 1 of AppleScript-Result”
Therefore I assume that the handling of records is a bug, because dictionaries are also available in shortcuts.
Since I don’t know how to post links here, I posted my example shortcut again in the LateNightSW forum: “Example of passing parameters to a Shotcuts and getting the return”.
Greetings
Dirk
Takaaki Naganoya says:
We can share Shortcuts workflow by adding it to Safari Reading List.
Shortcuts’ URL is displayed in Safari URL bar.
https://youtu.be/g8QC0tuMMic
Dirk says:
Records works with passing as JSON string.
(See forum)
Takaaki Naganoya says:
http://piyocast.com/as/wp-content/uploads/2021/10/8b628de8b019be8c80d6368616acd4f0.jpeg
This Shortcuts & AppleScript causes crash. Shortcuts seems very unstable for me….
Dirk says:
You must set the destination to a Japanese place. Otherwise it can’t work, because there is no route from your place to Germany. It can also be due to the language.
Takaaki Naganoya says:
I confirmed that this Shortcuts workflow works with Japanese address.
Dirk says:
Thanks for the feedback!
The sample was only meant to show that the parameter passing with a JSON string makes the whole thing quite comfortable, even though accessing the values may be a bit unusual.
Greetings
Dirk
PS: You are right! The shortcut app currently still contains many bugs and is very unstable. It’s shameful that Apple releases an app with so many bugs.