はじめに
今回はAppleScriptとcronを使い、定期的にあるサイトへのリンクへのアクセスを促すダイアログを表示させるスクリプトを作成したいと思います。
イメージとしては時間になると下の画像のようなダイアログが自動で表示されて、ボタンを押すと設定しておいたサイトへアクセスさせるという仕様です。
AppleScript作成
AppleScriptとはMac OSを自動操作するスクリプト言語です。最近知りました。
下記のスクリプトファイルを作成して実行権限を付与して下さい。
#!/bin/sh
osascript <<'END'
set theAlertText to "タイトル"
set theAlertMessage to "次のリンクからシステムに入り操作可能です。 https://example.com"
display alert theAlertText message theAlertMessage as critical buttons {"閉じる", "リンクを開く"} default button "リンクを開く" cancel button "閉じる" giving up after 60
set the button_pressed to the button returned of the result
if the button_pressed is "リンクを開く" then
open location "https://example.com"
end if
END
osascript
コマンドはターミナルからAppleScriptを実行するコマンドです。
ファイルを作成したらsh notice.sh
と実行してみて、最初にお見せした画像が表示され「リンクを開く」ボタンを押したら指定したリンクへアクセス出来るかと思います。AppleScriptの作成は以上です。
※ダイアログと言いつつアラートとして表示していることに後から気が付きましたが、これはこれで良いかなと思います。
cronで定期実行
cronとX Window System
Macでは普通にcronを記述するだけではブラウザ操作出来ません。理由はcronがX Window System(以降X)アプリケーションを実行することを想定していないからです。XアプリとはブラウザなどのGUIを伴うアプリのことです。
そこでcronでブラウザ(Xアプリ)を起動したい場合は引数でDISPLAY=:0
を渡して、描画するウィンドウがローカルホストであることを明示する必要があります。するとXクライアントがどのディスプレイに描画するかを決定出来ます。
また新しいMac OSではXサーバシステムがそもそもインストールされていないかもしれません。必要ならXQuartzというMac版のX Window Systemをインストールして下さい。xeyes
コマンドなどでXクライアントからのリクエストが正常に処理されているかを確認出来ます。
$ brew install xquartz --cask
cron設定
平日の09:20と14:00に定期実行する設定は下記の通りです。ログファイルは権限を変更しないとPerrmission Error
になるかと思いますので権限を変更しましょう。
20 09 * * 1-5 export DISPLAY=:0 && sh -l -c "/Users/user/notice.sh" > /var/log/cron.log 2>&1
0 14 * * 1-5 export DISPLAY=:0 && sh -l -c "/Users/user/notice.sh" > /var/log/cron.log 2>&1
これで実装は完了です。適当な時刻でテストしてみてきちんとcronからAppleScriptを定期実行出来ていれば成功です。
終わりに
このスクリプトの用途と言いますか、これを作った理由は会社の勤怠入力を忘れないようにするためでした。自分の会社では勤怠管理をWebサービスで行っているのですが、原則手入力しなくてはならず定期的に忘れてしまうことがありました。
そのため入力を促す仕組みが欲しかったところ、AppleScriptという丁度良さそうなものがあることを知って今回挑戦してみました。まだまだAppleScript初心者なのでもっと勉強してみようと思います。日本語書籍少ないけど。