cronとAppleScriptでブラウザからリンクアクセスするダイアログを定期的に表示する

はじめに

今回は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初心者なのでもっと勉強してみようと思います。日本語書籍少ないけど。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA