ギルド開発
ギルド開発
2016.09.21
#19
それいけ!フロントエンド

MACにオリジナルの通知アラートを設定!遊びながらcrontabの使い方を習得しよう

ハル

おはこんばんにちは、ハルです。

最近はフロントエンドでもガンガン黒い画面を使うようになったので、こちらの記事に引き続き、黒い画面を好きになるため、遊びながら勉強をしていきたいと思います。

今回は、MACの通知を表示させて遊びながら、crontabの基本的な使い方も勉強できる方法を紹介したいと思います。

crontabとは

定期的に処理を実行するコマンドで、日時・曜日で繰り返し実行するタスクをスケジュール管理できます。つまり、定期的に実行したい処理の管理ができます。

「平日の朝7時に、RSSの情報を取得する」などのスクリプトを実行するために使ったりできちゃいます。

crontabの基本的な使い方

MacPCを使って、コマンドを使っていきたいと思います。基本的には、crontabに関してはLinuxなら同じように使えます。
実行しているコマンドの読み上げ・音楽再生やアラートは、Mac特有の命令になります。Mac以外は置き換えて試してください。

crontab編集前にチェック

crontabのエディターについて

gitの初期エディターなどでも出てくるデフォルトでは、nanoというエディターで編集をします。
必要最低限として下記を覚えておけば、今回は問題ないかと思います。

キー 説明
保存 Control + o キー入力後、保存するファイル名を決めてEnterを押すことで保存ができます。
終了 Control + x 保存後、変更がなければ終了できます。

crontabの編集

さっそく編集していきます。
下記コマンドでcrontabを編集することができます(デフォルトでnanoエディターが開くかと思います)。

crontab -e

スケジュールの記述方法

分⇒時⇒日⇒月⇒曜日 と、一般的な日時表記と逆の順番に指定していきます。その後、実行させたいコマンドを指定します。

[分] [時] [日] [月] [曜日] [実行したいコマンド]

補足
[ ]は記述しません。今回まとまりを意味させました。実際にやるときは、空白で区切ってください。

分・時・日・月・曜日の指定

下記の様に分・時・日・月・曜日のそれぞれを数字で指定していきます。

指定 説明
時間の分を0〜59で指定。*で毎分指定。
時間の時を0〜23で指定。*で毎時指定。
月日の日を1〜31で指定。*で毎日指定。
月日の月を1〜12で指定。*で毎月指定。
曜日 曜日を0〜6で指定。日曜日始まりで0が日曜日、1が月曜日となる。*ですべての曜日指定。

さらに細かい指定

A,B 数字を「,」で区切ることで、複数指定することができる。
A-B 数字を「-」でつなげることで、「AからBの間」のように範囲を指定できる。
*/A たとえば「*/10」で「10分ごと」を指定できる。
例1)毎日の毎時間30分に処理を実行します。

30 * * * * say ‘起動テストです。’

  • `*`はすべてを意味します。時間の時で`*`をした場合、0時〜23時の毎時ごとを意味します。
  • say はMac特有のコマンドで、文字列を読み上げてくれます。
例2)平日の朝7時と、7時10分、7時15分、7時20分に処理を実行します。

0,10,15,20 7 * 1-5 say ‘おはようございます。’

  • 「,」で区切ると複数指定できます。
  • 「-」で範囲を指定できます。
  • say はMac特有のコマンドで、文字列を読み上げてくれます。
例3)10時から19時の間15分おきに処理を実行します。

*/15 10-19 * * * say ’15分が経ちました’

  • 分の指定にある「*/15」で15分おきという指定になります。
  • say はMac特有のコマンドで、文字列を読み上げてくれます。

指定の仕方は、例を見ながらだとかなり理解ができるかと思います。

crontabのリスト表示

下記コマンドでcrountab -eで編集し保存したものが表示されます。

crontab -l

楽しく実践練習

Mac向けにはなりますが、シェルスクリプトを用意し、好きな時間に音(mp4)を鳴らし、好きな通知メッセージを表示させてみます。

シェルスクリプトで音楽再生と通知を出してみる。

シェルスクリプトの用意

適当な場所でシェルスクリプトを用意してみます。
例で /Users/username/Documents/crontest/ にotukare.shシェルスクリプトファイルを用意してみます(usernameは、使っているMacのユーザ名です)。

#!/bin/sh
afplay /Users/username/Documents/crontest/voice/otukare.mp3
osascript -e ‘display notification “あともう少しファイト♫” with title “今日もお疲れ様です。” sound name “Submarine”‘

  • 一行目の!/bin/shは、シェルスクリプトを記述することを宣言しています。
  • afplay コマンドは音楽再生コマンドです。今回は、可愛い女の子が『お疲れ様です♫』と言ってくれるものをフリー素材から用意してみました(各自用意してみてくださいね)。
  • ファイル場所は /Users/username/Documents/crontest/voice/ という場所に置いたので参考に……。(前述した通り、「username」はMacのユーザ名です)
  • osascript -e 〜 のコマンドは、MACで横から通知をしてくれるスクリプトです。日本語文字列の部分をうまく編集してみてください。

実際に、crontabを設定してみる。

19時が定時として、その時間に通知が出るように、crontabで設定していきたいと思います。
記述は下記のようになります。

0 19 * * 1-5 sh /Users/username/Documents/crontest/otukare.sh > /dev/null 2>&1

  • /dev/null 2>&1は、エラー処理などでも止まらずに動くようにするおまじないだと思ってください。

動作確認

alert0720
うまくいけば、音楽が鳴ったあとに画像のような通知アラートが出ると思います。

さいごに

数個自分で遊びながら書けば、かなり使いこなせるようになると思います。

今回は遊びでシェルスクリプトを実行しましたが、もちろんPHPなどの言語も使用できるので、どこかのサイトを解析し、情報を定期的に収集するなどの使い方もできます。

これでまた、黒い画面が好きになれた気がします。