背景
私は休憩の取り方が下手です。タスクから離れて頭を冷やしたほうが全体的な効率が上がるの知っているのに、
没頭してしまうのと、タスク終わしたいという逸る気持ちからモニターから離れられません。
そこで、少し触りたいなと思っていたappleScriptで「休憩して頭冷やしなさいよ」と一定時間おきに言ってくれるダイアログを作ることにしました。
ダイアログ出すまでは一瞬でできました。
用意するもの
- 既存のScript Editor (スクリプトを書くだけなら好きなエディタでもOK)
- 今回は
crontabで定期実行を登録したのでTerminal
以上
フロー
1. Script Editorを起動
こいつを起動する。
New document にするとブランクファイルが作成できます。
2. ダイアログを出すフローを書く
コードを書いていきます。
今回、一定時間おきにアラートを出すという目標はterminalでcronを設定することで達成します。
ので、以下コードはそれを前提としています。
時間指定、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には記述していませんが、一定時間経つまで他の動作させないとか、休憩時間終了したら送られてくるパスワード入れないと操作できないとかルナティックモードにしても良さそうです。
色々カスタムできそうなので、現状の実装でもダイアログ無視し始めたら対応を厳しくしていこうと思います。
