▲Stream Deck本を発売しました! 新刊「elgato STREAM DECK 徹底活用Mac+STREAM DECKで時短+作業効率化!!」
友人から実機を借りて、Stream DeckからAppleScriptを実行する方法について一通り確認しました。この場をお借りして、Sutohさんにお礼を申し上げます。
また、初期公開時の記事に対してコメントいただいたTechnocraft様に感謝申し上げます。このお二方の尽力なしには評価できなかったことでしょう。
本記事はフィードバックを取り入れ、初回掲載時からは大幅に書き換えてあります。
▲Stream Deckの「システム」>「開く」アクションに登録して、macOSのGUIアプリケーションのメニュー操作を簡単に行うツール「Piyo Menu Clicker」ベータ版の配布を開始しました
Stream Deckとは?
Elgatoが製造・販売している、キートップ画面つきの小型サブキーボードです。Mac本体とはUSB端子で接続します。キートップの内容をカラー液晶ディスプレイで表示しており、キータッチ時の実行内容やキートップ表示内容の差し替えがソフトウェアにより柔軟に行えるようになっています。
メカニカルキーで、キーストロークはありますが、キーボードというよりもゲームコントローラのような操作感です。ゲームに使えるかと言われれば、不可能ではないものの快適とも言い難い感じです。キーストロークが深めなので、連打が不可能とは言いませんが、格子状のキー配置がゲーム向きというよりも業務系コントローラ的な印象を受けます(ゲーム用にハードな利用をしたときの耐久性は未知数)。ゲームコントローラには専用のデバイスやフットスイッチを使った方がよいでしょう。そんなにお安くはありません。
また、キー自体がテンキーのような格子状に配置されており、本体にずいぶん厚みもあるため、これで高速に文章を打つのは(キー数も足りないですし)無理だと思います。専用の日本語入力プログラムを用意すれば、15キー程度でもメールの返信ぐらいは不可能ではなさそうです(そういう野望は別途持っています。評価期間中には完成しないぐらいの壮大な野望が、、、、)。
はるかかなた昔(2000年代前半)、すべてのキートップの内容をカスタマイズできるよう、各キートップに有機EL(OLED)を搭載した「Optimus Maximus」が発表され、長い年月を経たのちに19万円(当時)という価格で発売されたことを覚えている人もいるでしょう。Optimus Maximusのコンセプト自体は広く支持されたものの、実現方法に無理があったために、ひじょうに高価で巨大なものとなってしまいました(そして、スマートフォンやタブレットの登場により魅力と需要は減ってしまいました)。
Stream DeckはOptimus Maximusの基本コンセプトを踏襲しつつ、その欠点(複雑すぎるハードウェア)を見直し、現実的な価格に収めたものと見ることができます。同機では1枚ものの液晶画面の上に透明なキートップのハードウェアキーボードを並べることで同様の操作系を実現しています。
また、フルキーボードではなく、LCDボタン6個、15個、32個といった限定されたキー数の製品をラインナップし、業務現場における簡単ワンキー操作ソリューションといった市場をねらっているようです。「ライブコンテンツ作成コントローラ」といった少し不思議な名前がついていますが、それは映像中継の現場などで使って便利なようにソフトウェアの標準機能が整備されているためで、本来そのように用途が限定されるものではありません。
そのような現場では、照明が暗く、キーボードが発光すること自体に意義があります。また、スマートな操作系を少ない設置の手間で実現でき、有線接続で確実に動作する本製品は競合に対しての牽制を行う「見栄アイテム」として有効でしょう(意外と重要)。自動車の運転席にコンピュータのインタフェースを設置するとしたら、ベストな形態かもしれません。車載コンピュータインタフェースとしては、おすすめできそうです(自分、運転しないので具体的な使用例を紹介できませんけれども)。
アクションはStream Deckの複数のキーボードに対して別々の内容で設定することができ、Stream DeckのすべてのキーにAppleScriptを呼び出すアクションを(別々のScriptを呼び出すものを)登録しておくこともできます。各Profileは最前面のアプリケーションごとに自動変更させられるために「物理キーボード版のScript Menu」のような運用ができます。
アプリケーション起動アクションを割り振っておくと、「物理ボタンのあるアプリケーションランチャー」として利用でき、この使い方もけっこう便利です(外では使えないけど)。
機能固定のStream Deckと最前面のアプリケーションごとに機能を自動変更させるStream Deckの2台を並べておくと便利そうな気がします。
AppleScriptを呼び出してこそ魅力を引き出せるStream Deck
Stream Deckで呼び出せる機能は、Elgatoが用意しているソフトウェア上で、デフォルトのアクションを選択してStream Deck上の各キーに指定することで使えるようになります。このソフトウェアキーボード設定(Profile)は複数持つことができ、macOSのメニュー上から随時切り替えられます(このProfileの切り替え自体をStream Deckのキーから行う「Switch Profile」アクションもあります)。キー数が少ないとProfileをこまめに切り替える必要があるわけで、15キーモデルが実用最低レベルでしょう(6キーモデルは何のために?)。
純粋に文字入力キーとして割り当てることも可能ですが、複数の動作をワンキーで行ってくれることが望ましいところです。
複数のアクションを連続して実行する「Multi Action」アクションが存在するものの、やはりまとまった処理についてはAppleScriptで記述して実行できたほうが便利に思います。
AppleScriptをこのようなソリューションに利用する意義は、条件を考慮して処理を変更できることでしょうか。
ネットワーク上にいるマシンがSleepしているか稼働しているかをチェックして、稼働していたらYouTubeの再生を別マシンに引き継がせるといった処理は、AppleScriptならではのものです。
時間や日付から処理を変える(休日は実行しないなど)こともできてしまうわけです(曜日によっては定休日のため「出前注文アクション」を実行しないなど)。
標準装備のAppleScript実行アクション。「System > Open」
Elgatoが標準で用意しているStream Deckソフトウェアに、指定のAppleScriptを実行するアクションはとくに用意されているように見えません。
見えませんが、さんざん確認してみたところ、アクションのうち「System > Open」でAppleScript書類のうち「.scpt」形式(非バンドルAppleScript書類)と「.applescript」形式(テキスト形式のAppleScript)については関連づけたアプリケーション(デフォルトではスクリプトエディタ)ではなく、osascriptコマンドを使って実行されます。
アクション名:Open(標準装備) ランタイム名:osascript 指定可能要素:アイコン画像、Title、AppleScript File Script File Format:.scpt / .applescript インターネット接続:不可 ダイアログ系の命令実行:可 "facetime-audio" URL event発行:OK GUI Scripting利用許可:OK
唯一、「.scptd」形式のAppleScript書類のみ、関連づけたアプリケーション(デフォルトではスクリプトエディタ)でオープンされ、実行されることはありません(自分が普段使っているAppleScriptって.scptd形式ばっかりなんでひっかかりました)。
▲AppleScript書類の形式が「.scpt」と「.applescript」の場合は実行、「.scptd」の場合にはエディタでオープンされる「System > Open」アクション
この「System > Open」アクションで実行されるAppleScriptでは、Cocoaの機能やGUI Scriptingを呼び出せますし、GUI Scriptingの認証も取得できます(2回目以降の実行で認証ダイアログが表示されることはありません)。display dialogやdisplay notification、choose from listなどのダイアログ系のUIの表示も問題ありません。
オープンソースのAppleScript実行アクション。scptd形式が実行できる「RunAppleScript」
このStream Deckソフトウェアデフォルトの「System > Open」アクションとは別に、Github上でオープンソースの「streamdeck-applescript」プロジェクトが配布されており、これを簡単に導入できました。
streamdeck-applescript-masterフォルダ中の「Release」フォルダに、「com.mushoo.RunAppleScript.streamDeckPlugin」が入っているので(ビルド不要)、これをダブルクリックすると、streamdeck-applescriptプラグインがSTREAM DECK管理ソフトウェアに読み込まれます。
バンドル形式のScriptおよびフラットなscptファイル、あるいは単なるテキストで書かれたAppleScript(inline script)を指定できます。
アクション名:RunAppleScript(Githubからダウンロード) ランタイム名:RunApplescript 指定可能要素:アイコン画像、Title、Script File / AppleScript(Inline) Script File Format:scpt / scptd / text (Inline) インターネット接続:不可 ダイアログ系の命令実行:不可 "facetime-audio" URL event発行:OK GUI Scripting利用許可:OK
Elgatoが自社Webから提供しているStream Deckソフトウェア自体は、Sandbox化されているわけではないようですが、いろいろ(長大な)AppleScriptを突っ込んで実行してみたところ、一定の制限が存在していることがわかりました。
すぐに気がつく点は、display dialog、display alert、display notification、choose from listなどのダイアログ表示系のコマンドが効かないということ。Standard scripting additionsの利用が禁止されているのではなく、「LSUIElement=true」の設定による影響を受けているように見えます。この点、標準装備のOpenアクションのほうが気楽に使える感じです。
Stream Deckアプリケーションはアプリケーション形式のドライバ/設定ソフトウェアであり、Dockにアイコンを表示しない状態で動作します。そのため、ダイアログ系の通知を行えない状態であると推測されます。とはいえ、Cocoaの機能を呼び出してAlert Dialogを表示させるとあっさり表示するという「裏技」があります。
Stream Deckから「streamdeck-applescript」アクション経由で呼び出したAppleScriptでは、インターネットへのアクセスが許可されておらず、これが最大の制約項目でしょう(Openアクションも同様)。
Stream Deckアプリケーション自体はSandbox化されていないため、「streamdeck-applescript」自体の制約に見えます。同アクションの開発者がAppleScriptから直接インターネット接続してWeb APIを呼び出すような処理を考慮していなかったためにこのようになっているのか、あるいはStream Deckソフトウェア自体の制限であるかは不明ですが、現状ではそうした(よくある)処理が行えません。
確認してみたところ、Stream DeckソフトウェアのInfo.plistに「Allow Arbitrary Loads=true」のエントリがないために、プラグインおよびそこから呼び出されるAppleScriptではネットワークへのアクセスが行えないようです。これを配慮不足と受け止めるか、セキュリティ上の面倒ごとに巻き込まれたくないものと受け止めるか、そこまで考えていないものと取るかは個人の受け止め方次第でしょう。
Stream Deckの各ボタンにRunAppleScriptアクションを割り振って、Stream Deckのボタンを乱打すると、アクション呼び出しがバッファリングして実行されるため、(挙動としては正しいものの)やや扱いに困る印象を受けました。
つまり、コンピュータに関して知識の少ないユーザーがStream Deck上のキーを押して、すぐに反応がない状態だとキーを連打する可能性があり、連打された内容はバッファリングされ、キャンセルが効きません。
このあたり、呼び出すScriptですぐに何らかの視覚的なフィードバックをしつつ処理に入るなどのケアを行う必要性を感じました。コンピュータに関する知識の少ないユーザーに使わせるには注意が必要でしょう。AppleScriptを割り当てて実行させる場合でも、「ちょっとかじった」ぐらいのScripterでは、十分な配慮を行えないため、Stream Deckの「streamdeck-applescript」アクション経由で動くAppleScriptを書くのにはけっこうなスキルが必要とされるように感じられました。
活用例
facetime-audioで所定の相手に通話を行うAppleScriptを、相手の顔写真入りで登録すると、まるで内線電話感覚でオーディオ通話をかけられて便利でした。
実際に作ってはいませんが、Web経由で出前の注文を行うScript(そんなに難しくないもの)を書いておいて実行すると、「パエリア注文、1時間後に」といった運用ができて便利です。定休日には注文を実施せず、配達時間もシステムクロックから拾ってきた値をもとに指定できるため、とても実用的なものとなるでしょう。
よく行う、LAN上のファイルサーバーのマウントや特定のフォルダのオープンを行わせるのも便利でした。TimeMachineドライブのアンマウントなども便利でしょう。
フローティングパレット上からAppleScriptを実行できる、macOS標準搭載の「Switch Control」も便利ですが、それらのScriptをStream Deckに登録すれば、画面上の場所を占有されることなく同様にAppleScriptを(最前面のアプリケーションごとにProfile表示を切り替えて)実行できるので、道具としてコンピュータを便利に使いこなすという方向で、キートップの表示内容を変更できるハードウェアキーのソリューションは実用的であり、さまざまな作業の苦痛を緩和してくれるものであると感じます。
総合評価
こうしたAppleScriptを自分はいつもScript Menuから実行していますが、アイコンつきの物理ボタンから呼び出せるのは本当に便利です。
Stream Deck標準搭載アクションでは、メールの未読本数の表示などStream Deck上のボタン表示に対してカスタム内容をフィードバック表示させることが可能です。一方で、RunAppleScriptアクションでその機能は利用できないため、不満がないわけではありません。Scriptからネットワーク接続できないのも、REST APIやCDN上のJavaScript Libraryを呼び出しまくっている今日のAppleScriptの利用レベルからすると、世界観が狭すぎて不満が残ります。
活用は行えるものの、Stream Deck自体が価格相応かと言われると「見栄用途」に使わないかぎり疑問が残ります。
そんな向きには、iOS用のElgato Stream Deck Mobileアプリが用意されており、とりあえずiPhoneやiPadにインストールしてこれらのデバイスをStream Deckに見立て、Macの操作を試すことができます(よくできている、、、)。
ちなみに、iOSデバイスとMacの間の接続は無線で行われ(WiFi?)Stream Deck実機のように有線接続する必要はありません。1月あたり350円(無料で1か月のお試しあり)なので手軽に試せるでしょう。また、iOSデバイスとStream Deck実機は同時使用できるため、iOSデバイスを臨時の追加Stream Deckとして運用することも可能です。
Stream Deckのドライバはアプリケーションとして動作するため、Intel版ではありますがM1 Mac上でも問題なく動作することでしょう。
冒頭に「友人から借りた」と書いてあるとおり、本製品には自分に購入させるだけの何かがあるわけではありません。身の回りのさまざまな用途に活用できるものの、たいていは代替手段が存在します。
一方で、リアルなハードウェアキーによる操作が欠かせない用途も存在することでしょう。多忙な現場、つねにオーディオチャットを内線電話のように利用している現場、あまりコンピュータに詳しくないユーザーに対して定型作業を行わせるような用途には、ハードウェアキーによる操作はわかりやすく、導入しやすいことでしょう。
再来週あたり友人に返却する必要があるのですが、少し「惜しい」と思える程度の魅力はあります。使うかどうかはその人次第でしょう。
(注:本記事の転載やまとめを禁じます)
Technocraft says:
バンクというのがプロファイルの事を言っているのであれば、stream deck上からもきれ変えられます。さらにフォルダで階層も作れるので(どこまで深くいけるかは試した事ないですが)、15キーでもかなり多くの機能が設定できます。プロファイルの事ではないのでしたらすみません。
Takaaki Naganoya says:
コメントありがとうございます。ここでは、バンクはProfileのことを指しています。たしかに、Stream Deckアプリケーションの「Streeam Deck」アクション内の「フォルダを作成」とか「プロファイルを切り替え」を使うことで、Stream Deckのキーボード上からProfileの切り替えができますね!
こーれーは、ちょっと触ったぐらいではわからない。「マルチアクション」とか「マルチアクションのスイッチ」も、これだけで相当の機能が実現できる感じですね。うわ、ヤバいものを見てしまった感がある。
technocraft says:
Githubの「streamdeck-applescript」は知らなかったのですが、
普通に開くから.scptを選択してスクリプトを実行しておりました。
キーボードマエストとの連携やアイコン画像にgifアニメーションも利用できたり、いろいろ出来そうと思い、
15キー1台から2台になり、結局32キーを購入してしまいました。
MacBookProのタッチバーの様に状況によって内容をガラッと変えられないかなと考えているのですが、
私の知識では解りませんでした。
いつも非常にありがたくブログ拝見しております。内容が高度すぎてわかない事だらけですが、
スクリプトも利用させて頂いております。
Takaaki Naganoya says:
>キーボードマエストとの連携
ああ、Keyboard Maestroに.Scptファイルを登録しておいて、Stream Deckでその登録しておいた「キーを押す」アクションを実行するように設定すれば、間接的に.Scptファイルを実行できますね。これは頭がいい、、、、
Takaaki Naganoya says:
>普通に開くから.scptを選択してスクリプトを実行しておりました。
については、たぶんアプレット形式(.app)に書き出して実行されていたものと思われます。
>15キー1台から2台になり、結局32キーを購入してしまいました。
すごいですね!
>MacBookProのタッチバーの様に状況によって内容をガラッと変えられないかなと考えているのですが
最前面のアプリケーションによってProfileを切り替えられるので、Touch Barに近い運用はできると思います。
複数キーを1つのキーとして扱うような(Touch Barのような物理キーのさいずの制約がない)運用はできませんが、アプリケーションごとにProfile変更ができるので、記事でも書きましたが複数あると格段に使い勝手が向上しそうです。
technocraft says:
自分でも若干不思議に感じているのですが、アプレット形式ではなく、スクリプト形式ままで実行できています。
スクリプト自体も、スクリプトエディタやスクリプトデバッガーで作った物以外で、
単純にテキストとして書き出し、拡張子も.scptに変えた物も動作しております。
Takaaki Naganoya says:
???? STREAM DECKのアクションを再度調査してみました。アクションで「System」>「Open」のファイルオープンのアクションがあることを確認し、ここにscpt形式、scptd形式のAppleScript書類を指定しても、スクリプトエディタでオープンされるだけです。
なので、Keyboard MestroでファンクションキーにもAppleScriptの実行が割り振ってあって(ここはscptでもOK)、そのキー割り当てをStream Deck経由でキー入力しているんだと思っています。
technocraft says:
確かに最初試した時はスクリプトエディタで開いた様な・・・。アプレット形式にしたり
いろいろ試していた所、なぜか.scpt形式でもOKになっていました。
別のmacでも試してみましたが、動作しました。
それこそテキストエディタで
display dialog “テスト”
とだけ入力して、.scptを付けて保存した物を登録してもきちんと動作します。
一応OSは10.14.6 STREAM DECKのソフトウェアは4.9.1 ファームは1.00.007
別のmacは 10.14.6 4.9.0 1.0.191203 でした。
気になるので
今まで一度もSTREAM DECK関連をインストールしていないmacでも試してみたいと思います。
Takaaki Naganoya says:
ほとんど環境は同じですね。ソフトウェアのバージョンが若干違いますが、誤差程度です。
もしかしたら、AppleScript書類とひもづけしているアプリケーションが「スクリプトエディタ」ではなく、AppleScriptを実行する専用の別のプログラムになっているのかもしれないですね(Finder上でAppleScript書類を選んでCommand-iで「情報を見る」ウィンドウを表示して、関連づけているアプリケーション名を確認してみてください)。
その環境であれば、Stream Deck側でファイルをオープンする(だけの)アクションを割り振ってScript実行してくれるかもしれませんが、Stream Deck側の機能ではありません。
technocraft says:
修理より初期化されて戻ってきた機種がありましたので、それで試してみた所、
開く、に直接スクリプト指定で動きました。
os 10.15.7です。STREAM DECKのみしか入れていない状態です。
スクリプトの関連付けアプリケーションも変更していません。
試したスクリプトは
display dialog “test”
SIPの無効/有効が影響あるのかなと思いましたが(今までの機種は全て無効)
もどってきた機種は初期化されていますが、一応調べた所有効になっていました。
Takaaki Naganoya says:
……実行するようになっていますね(汗) 確認しました。
これまで、streamdeck-applescriptプラグインを経由してAppleScriptを実行していたものが、Openアクションでそのまま実行していますね。
Runtime名(AppleScriptを実行しているプログラムの名称)を取得してみたところ、osascriptと出ました。Terminalから実行するosascript、Script Menuから実行する際のプログラムなどと同じです。この結果、dialogを表示するようになりました。
この記事、まるごと書き直しの必要があるぐらいの変更です。どうしましょう?(^ー^;;;;;
Takaaki Naganoya says:
.scptdはスクリプトエディタでオープンし、.scptおよび.applescriptは実行するようです。
手元のAppleScript書類の多くが.scptd形式なので、これで「動作が違う!」という話になっていたようです。
Takaaki Naganoya says:
http://piyocast.com/as/wp-content/uploads/2020/11/sdbook1.png
の本を本当に作り始めているのですが、Technocraftさまもご自分のStream Deckの画面を写真で紹介されませんか?
宣伝になるかどうかはわかりませんが、本件でいろいろお世話になっているので、ご紹介できればと考えております。
どういう傾向のユーザーの方がどのように活用されているかを、マンションポエムみたいないい感じの文章+写真で紹介するという
巻頭部分の紹介写真記事部分です。