iOSのオートメーションで時報を作る

在宅で雇われ仕事をするようになると、昼休みに入る時刻と終業の時刻を知らせてくれる何かが欲しくなった。作業をしているとつい忘れてしまうので。つまりチャイムや時報っぽい何か。

で、指定時刻になるとiPhoneで音が鳴るようなものを探した。時報アプリもいくつかあるが、機能的にちょい微妙。要求仕様としては以下を満たして欲しい。

  • 好みの音を鳴らせる
  • 自動で音が止まる(すぐ鳴り終わる)
  • 特定の曜日だけ鳴らせる(雇われ仕事のない曜日には鳴らないで欲しい)

iOSの時計に付いているアラームは、鳴った音をいちいち手で止めなければならないのでダメである。

調べてみると、iOSの「ショートカット」を使えば実現できるらしいことが分かった。ショートカットって、ある時点のiOSから急に出現したけど、何に使うものだろうとずっと思っていた。要は、iOSで発生する様々なイベントを捕まえて、そのときに実行したい動作を指定することである種のジョブを実現できる、スクリプトやマクロのようなものらしい。面白い。

ショートカットは複数ステップの動作(アクション)を登録してバッチ実行できるものだが、イベントを捕捉して何かをさせるのは「ショートカット」アプリの中にある「オートメーション」で実現できる。そこで、「指定時刻になったら特定の mp3 を再生させる」というオートメーションを作ってみたのが以下。

鳴らしたい mp3 ファイルはあらかじめ「ミュージック」アプリのライブラリに追加しておいて呼び出す。最初、mp3 の再生というアクションだけでやってみたら、すごく小さな音でしか鳴らなかった。いつも iPhone の音量設定をフル音量の10%くらいにしているので、そのままの状態でスピーカーから鳴らしても全然聞こえない。

なので、最初のアクションで「現在の音量値」を取得して保存しておいてから音量を上げ、時報 mp3 を鳴らした後に元の音量値に戻すことにした。「現在の音量」みたいにさまざまな設定値が変数として用意されており、簡単に使える。

ちょっとダサいのは、「「ミュージック」アプリで mp3 ファイルの再生が終わった」というイベントの発生を捕捉できないこと。仕方ないので、mp3 ファイルの再生時間より少し長い秒数だけ処理を待たせる「待機」アクションを使った。なんかもっと冴えたやり方があるのかも。

思い通りの動作をさせるのに苦労したが、これは面白い。作る喜びがある。オートメーションではループやif文による分岐などの制御構造や変数も用意されていて、かなり凝ったことができるっぽい。まさに、指で作るプログラミング。トリガーとなるイベントも、「指定時刻になった」だけでなく、メールが到着したとか部屋が暗くなったとか、いろいろ使える。仕事机や玄関にNFCタグを貼っておき、「NFCタグからの電波を受信した」というイベントを捕捉することで、「自分が玄関に立ったらこれを実行する」みたいなこともできるらしい。未来じゃん。