AppleScript ・cron・pmsetで毎日のルーティーンを自動化しよう！

<h1>指定したURLやアプリを決まった時間に起動させる</h1>
こんにちは！
皆さんは毎日見るサイトって決めてますか？
自分は毎日日経新聞や自分のfeedを読んでいるます。Trelloを使ってTodo管理もしています。
でも自分の手でURLを開いているとついつい忘れてしまうことってありますよね？

そこでURLやアプリを決まった時間に自動で開いてもらうスクリプトを書いてみました。
これでURLやアプリを開くことに頭を割くことなく自動で行ってくれるので、新聞を読んだりTodoを朝設定することを習慣にすることができました。

AppleScriptを使ってURLとアプリを開くスクリプトを作成
↓
cronで決まった時間にスクリプトを実行
↓
スリープしてるとcronが実行してくれないのでpmsetでcron起動直前にスリープ解除をする設定

という流れで行きます。

##目次
1.AppleScriptの作成
2.cronの設定
3.pmsetの設定
4.まとめ

##1.AppleScriptの作成
URLとアプリを起動するAppleScriptを書きます。

```AppleScript:url_app_open_script.scpt

set hour to (hours of (current date))

if hour ≥ 0 and hour ≤ 8 then
	tell application "Trello" to activate
	delay 2
	tell application "Mail" to activate
	
	set urlList to {"https://www.nikkei.com/paper/", "https://feedly.com/i/my",  "https://sekai-kabuka.com/"}
	
	repeat with urlItem in urlList
		open location urlItem
		delay 2
	end repeat
	
else if hour > 8 and hour < 20 then
	tell application "Mail" to activate
	
	set urlList to {"https://feedly.com/i/my", "https://sekai-kabuka.com/"}
	
	repeat with urlItem in urlList
		open location urlItem
		delay 2
	end repeat
	
else
	tell application "Mail" to activate
	 
	set urlList to {"https://www.nikkei.com/paper/", "https://feedly.com/i/my"}
	
	repeat with urlItem in urlList
		open location urlItem
		delay 5
	end repeat
	
end if
```

まず最初に

```AppleScript
set hour to (hours of (current date))
```
を使ってhourという変数に今何時かを入れます。
自分の場合は0~8時、8~20時、20~24時までで場合分けして起動するようにしています。

それをif文とfor文で回します。

```AppleScript
tell application "アプリの名前" to activate
```
tellでアプリを起動することができ。

```AppleScript
open location "URL"
```
openでブラウザでURLを開くことができます。

##2.cronの設定
自分の環境ではcronから直接AppleScriptを実行することができず、一回pythonを挟んでいます。

```Python:open_python.py
import os

flag = 1

if flag:
	os.system('osascript ".scptまでのフルパス"')

```

osascript ~.scptでAppleScriptを起動することができます。

このpythonファイルを実行するようにcronを設定します。


```
crontab -e
```

cronはターミナルで"crontab -e"と打ち込めばcronを設定する画面に入ります。
iを押すとinsertになりcronを設定して、escを押した後:wqでcrontabから抜けることができます。

cronは
###分 時間 日 月 曜日 コマンド
という順番で設定でき、今回は7,18,22時の0分に毎日実行する設定にします。
*はワイルドカードで毎回という設定です。

([こちらの記事](https://qiita.com/skinnydawg/items/a0fc812db427030c6d33)がcronの時間設定について簡潔にまとまっており大変参考になります。)

```
00 7,18,22 * * * cd /Users/user_name/Codes/url_opens/; zsh -c 'python3 /Users/user_name/Codes/url_opens/url_open_python.py'
```

このように設定すると7,18,22時にurl_open_python.pyが自動で実行してくれます。

##3.pmsetの設定
ただしcronはスリープ状態だと起動してくれません。

そこで6:59分,17:59分,21:59分にスリープを解除するように設定します。

(ちなみに一日一回でいい場合はMacのsetting → バッテリー →スケジュールで指定した時間にスリープを解除するGUIがあります。)
![screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454168/44b90168-d285-0d5f-783d-0fd0859a9299.png)

ではpmsetでスリープ解除時間を設定します。
sudoでcronを開いてpmsetを設定します。(sudo権限で実行しないと上手く行かない。)

```
sudo crontab -e
```

でcronを開いたら

```
1 7 * * * pmset repeat wakeorpoweron MTWRFSU 17:59:00
1 18 * * * pmset repeat wakeorpoweron MTWRFSU 21:59:00
1 22 * * * pmset repeat wakeorpoweron MTWRFSU 6:59:00
```
このように設定します。

3つ設定しているのは理由があります。
Macはスリープ解除設定を一つしか持つことができないからです。

なので
07:01で17:59にスリープ解除
18:01で21:59にスリープ解除
22:01で06:59にスリープ解除

するという設定をすることでぐるぐる回せるようになります。

##まとめ
これによって決まった時間にアプリとURLを開くことができるようになりました！
自分の場合は起きたら日経や株価がチェックできるようになっているので、情報収集のルーティーンを習慣化することができました。
日中や夜も自動で開いてくれるので常に情報をキャッチアップすることができます。