appleScriptで定期的に休憩行けと怒ってくれるダイアログを作った話


背景

私は休憩の取り方が下手です。タスクから離れて頭を冷やしたほうが全体的な効率が上がるの知っているのに、
没頭してしまうのと、タスク終わしたいという逸る気持ちからモニターから離れられません。

そこで、少し触りたいなと思っていたappleScriptで「休憩して頭冷やしなさいよ」と一定時間おきに言ってくれるダイアログを作ることにしました。

ダイアログ出すまでは一瞬でできました。

用意するもの

  • 既存のScript Editor (スクリプトを書くだけなら好きなエディタでもOK)
  • 今回はcrontabで定期実行を登録したのでTerminal

以上

フロー

1. Script Editorを起動

こいつを起動する。

New document にするとブランクファイルが作成できます。

2. ダイアログを出すフローを書く

コードを書いていきます。
今回、一定時間おきにアラートを出すという目標はterminalcronを設定することで達成します。
ので、以下コードはそれを前提としています。
時間指定、OKボタンタップ時のイベントなどスクリプトにかけると思いますが、それはこれからカスタムしていこうと思ってます。

コード

tell application "System Events"
    activate
    display dialog "一回休憩しろ、休め、冷やせ、風に当たれ"
end tell

以上

少ないですね。解説は以下。

tell application "System Events" ~ end tell
""にはアプリケーション名が入る。そのアプリケーションに対して命令しますよ、という命令文。
end tell の間に処理を書く。
これがないと、cron設定をした時“No User Interaction Allowed”というエラーが出て起動しない。
参考: https://forum.keyboardmaestro.com/t/no-user-interaction-allowed-in-execute-an-applescript/5728

activate
上記で指定したアプリケーションが最前面に来ることを指定する。今回はダイアログが最前面に来るようになる。

display dialog "foo"
ダイアログを出す記述。””にはダイアログ内テキストを入れる。

編集が終わったら保存したい場所に保存してください。拡張子は.applescriptです。
.scptでも起動しますが、再編集した際に上書き保存できないと怒られます。

3. 定期起動する設定をする

今回は、上記の通りcronとして定期実行を行うように設定します。

1. terminalでexport EDITOR=/usr/bin/vimを入力して使用エディタをvimに設定する

export EDITOR=/usr/bin/vim

これをやらないと以下でcrontabに記載しても管理者権限で入れるcronを格納している大元に記載されないらしく、コピーに記載されてしまうようです。なので最初に設定しておきます。
これで一応大元に記載されているか確認できます。

2. crontab -eでcrontabを編集する

crontab -e

-e で編集モードを開けます。

3. */1 * * * * cd /fileまでのpath/ && osascript Alert.applescriptを記入、保存して閉じる

*/1 * * * * cd /fileまでのpath/ && osascript Alert.applescript

上記では1分毎にと設定してます。
書式はこちらが参考になります:https://www.server-memo.net/tips/crontab.html

コマンドで.applescriptを起動させるためにはosascriptコマンドを使用します。

しっかり大元に記載されているかは以下で確認できます。
sudo cat /usr/lib/cron/tabs/USER_NAME
or
crontab -l

4. ダイアログがでる

指定時間後、ダイアログが出ます。

終わりに

今回はただダイアログを出すまでしかappleScriptには記述していませんが、一定時間経つまで他の動作させないとか、休憩時間終了したら送られてくるパスワード入れないと操作できないとかルナティックモードにしても良さそうです。

色々カスタムできそうなので、現状の実装でもダイアログ無視し始めたら対応を厳しくしていこうと思います。