iOSデバイスからMacのAppleScriptを呼び出そう
# 本記事は、2015/9/20に投稿した内容を再掲載したものです(一部修正)
以前、Otto’s Antennaという名前で紹介したアプリケーションがバージョンアップして、「Entangler」という名前になっていました。
これは、iOSデバイスからMac上のAppleScriptをMac上で実行させて、結果をiOSデバイス側で取得/確認するためのアプリケーションです(ハリウッド映画だと、リモート自爆スイッチとかに使いそう)。
主な用途は、仕事場で時間のかかる処理を行うAppleScript(膨大なデータを処理してPDF出力してサーバーにアップロードするとか、とにかく時間のかかる内容)を帰宅後に実行するなど、「職場の資源を使わないと実行できないプログラムを外出先から実行する」ためのトリガーに使うといったところです。
営業から「こういう資料を至急ほしい」と言われて、職場のマシンのファイルを送ればいいだけの処理のために職場に戻りたく…ないですよね。わざわざ帰社したくないとか、時間のかかる処理を夜間に行わせて結果だけ返してほしいとか、Macをそういう使い方をするためのツールとして使うようなケースに役立ちます。
また、大きな会場でKeynoteによるプレゼンを行いつつ、iPhoneでスライドをめくる(Mac上のKeynote書類をすすめるAppleScriptを実行する)とか。あるいは、プリンタに入れておける最大枚数を超えるような超大量のプリントアウトを行いたいんだけど、プリンターの場所まで行かないと他部署からのプリントアウト状況とか用紙補給状況がわからず、プリンターの前から自席のMacのプリントアウトを開始させる必要があるケースとか。
iOS/watchOS側に呼び出しアプリケーションをインストールし、同じApple IDでペアリングされているMac側に実行用のアプリケーションをインストールします。
離れた場所のFAXの前まで行って、自宅のMacからFAX送信させよう
ちょうど、奥方様の実家のFAXの動作確認をする必要があったので、MacにFAXモデムをつないで、指定の電話番号にFAX出力するAppleScriptを書いて、iPhone上のEntanglerから呼び出してみました。
# macOSのFAX出力機能(eFAX)はmacOS 10.13で廃止になりました(執筆時はmacOS 10.10.5でテスト)。LAN上のmacOS 10.12以下のマシンにFAXモデムをつないで運用することになります
EntanglerというアプリケーションのMac版をMacにインストールし、iOS版をiPhoneにインストールして、iOS側からMac側の機能を呼び出すというのが、基本的な運用スタイルです(Apple Watch版もあるとは知りませんでした)。
前バージョンであるOtto’s Antennaよりもデザインがよくなって、iOSデバイスから操作してからの反応が速くなっていました。EntanglerはAppleScriptのほかにもAutomatorアクションやshell scriptなども実行できるそうです(AppleScriptしかテストする気がないですけれども)。
Scriptを実行するMacはSleepせずに、ネットワーク(LAN/WiFi)に接続した状態にしておく必要があります(要注意)。
▲MacBook ProにUSRoboticsのUSB FAX Modem(OS X 10.10.5でも使える)をつなぎ、Sleepしないようにしてスタンバイ
▲Mac上のEntanglerにFAX送信するAppleScriptを登録
実行するAppleScriptは、~/Library/Application Scripts/com.amolloy.ottosantenna/ に入れておく必要があります。実行可能なAppleScriptは、通常形式、バンドル形式、テキスト形式です。
Mac上のEntanglerはMac App Store上で配布されているアプリケーションであるため、当然のことながらSandbox化されています。このため、このEntanglerで呼び出すAppleScriptは「Sandbox内で動く」ことを考慮してある必要があります(OSのバージョンによって制限のきつさ/ゆるさは変わってきますが、アクセス可能なファイル/フォルダが大幅に制限され、OS側から取得できる情報が制限されます)。
AppleScript名:ダイアログてすと |
on run anArg display dialog (anArg as string) end run |
▲iOSデバイス側からの実行時にMac側に受け渡されるパラメータを確認
▲iPhone上のEntanglerを起動して、「print_a_fax」Scriptを実行
▲FAX受信中(「ps-ax」と通知が出ている)
▲確認のためにFAXで印刷したYahoo!のトップページ。印刷が途切れているのは、本来A4用紙が必要なところに無理やり別のサイズ(たぶんB5)の紙を突っ込んだため
Otto’s Antenna→Entanglerのアップデートで解消された不具合
前バージョンである「Otto’s Antenna」ではいくつか問題があったわけですが、それがバージョン2.0(2018/10/29再掲載時 バージョン2.3)であるEntanglerではどうなっているでしょうか?
(1)日本語のファイル名のScriptを登録するとおかしくなるバグ
Otto’s Antennaでは、日本語のファイル名のAppleScriptを登録すると、「こんにちは」と「こんにちは~」の2つのファイルが登録されたように見え、「こんにちは~」のほうは実行できないゴーストでした。
実際に日本語のファイル名のAppleScriptを登録してみたところ、この前バージョンで発生していたバグは再発しませんでした。
(2)AppleScriptに引数を渡せない
Otto’s Antennaでは、Shell ScriptなどにArgumentsを渡せるのに、AppleScriptにはArgumentsを渡せない仕様になっていました。
Entanglerで実験してみたところ、iOSデバイス上のEntanglerでScriptボタンを長押しすると、Argumentsの入力ダイアログが表示されます。ダイアログにArgumentsを入力すると、たしかにAppleScript側でArgumentsを受信できました。
AppleScript名:ダイアログてすと |
on run anArg display dialog (anArg as string) end run |
今回のFAX送信実験でいえば、送信先のFAX番号を引数に渡せるようにすることも可能です。
(3)Scriptが実行されるまでの時間が長い
Otto’s AntennaのときにはKeynoteのスライドをめくるような用途にはちょっと使えないぐらい応答に時間がかかっていました。iPhone上で操作してからMac上でAppleScriptが実行されるまで、だいたい10秒ぐらいかかっていました。
Entanglerでは、ずいぶん早くなりました。1〜2秒といったところでしょうか。Keynoteのスライドめくりには依然としてちょっと物足りないかもしれませんが、応答速度の向上は歓迎できます。
Otto’s Antennaのときにダメだと感じた点が、ずいぶん改善されています。まだEntanglerのすべての機能を試せていませんが、現時点でも満足できています。
Siriショートカットより65535倍役立つ
iOS 12上の「ショートカット」(Siriショートカット)アプリでも、LAN内でIPアドレス固定で指定できれば、「SSH経由でスクリプトを実行」ショートカットからLAN内のMac上の指定アカウントの指定AppleScriptを実行することができます。
ただし、「ショートカット」アプリはあくまでLAN内という制限がつくため、インターネットごしに(iCloudごしに)AppleScriptを実行できるEntanglerの方がはるかに自由がきいて強力です。