iPhoneショートカットアプリによる門限管理

# はじめに
私には彼女がいる。彼女は私とは違い外交的であり飲み会へも積極的に参加するタイプの人間だ。同棲はしていないため、飲み会の夜遅く家に着いているのか、まだ飲んでいるのか、はたまた飲み過ぎて帰れず他の男に...といったことを把握することができず、心配で眠れない。そこで門限(23時)にどこにいるのか、もしまだ家に居ないのであれば何時に家に到着したのか、それらを管理したいと考えた。恋人の安否を管理する、それは亭主の役目なのである。そして偶然見つけたのがiPhoneショートカットアプリだ。iPhoneの複数アプリのI/Oを連結させることができるこちらのアプリを上手く実装すれば、私の要求を実現することができると考え、アプリ開発を開始した。
# 実行結果イメージ
![無題736_20240807210558.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/3c207692-ea74-ee42-c6db-1ccc1cab6e0a.jpeg)

# さっさと使いたい方向け設定方法
※こちらのショートカットを使用することで投稿主に居住地やLINE情報などの個人情報が抜き取られるといったことは決してありませんのでご安心ください。
① 以下2つのショートカットを位置情報を管理したい対象の端末(私であれば彼女の端末)に追加する(デフォルトでは「すべてのショートカット」配下に追加される)
[安否確認 share](https://www.icloud.com/shortcuts/26c71978c03c42a395d6cdea2bea4216)
[到着連絡 share](https://www.icloud.com/shortcuts/35e2ebcbdc824416baf26d4c473fd05b)

② 追加した「安否確認 share」を開き(右上の…をタップ)、現在"皇居"となっている箇所を対象の居住地に設定する。
※設定した地点は半径100mで判定されるため、居住地の近くに線路や大通りなど帰宅していなくても通過として通りそうな場所は含まないよう上手く設定する。
![無題728_20240714225450.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/6e911a0e-cbff-d55b-b264-be04dceb863c.jpeg)

![無題732_20240714230429.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/9bc2f3bf-0661-e847-1ea5-8a8b58b7cb99.jpeg)

③ LINE送信先は、直近にラインを送った人しか設定できないため、事前に送りたいチャット(グループも可)に何かしらメッセージを送信しておく。

④  「安否確認 share」、「到着連絡 share」実装内のLINE送信先を変更する。「安否確認 share」、「到着連絡 share」の実装を開き、下部の「アプリおよびアクションを検索」で"LINE"と検索し、送りたい先を指定する。
![無題733_20240714232200.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/bcda775d-cdef-ef89-51b3-c1c1523e63b2.jpeg)


⑤ ④で追加したLINE送信のアクションに対し以下作業を行う。
1. LINE送信部がサンプルの位置と異なる場合はドラックし正しい位置に配置する。
2. "メッセージ"部をタップしサンプルと同じ値を選択する。
3. 実行時に表示はオフにする。
4. サンプルのLINE送信部は × により削除する。
![無題734_20240714232830.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/94f1d11e-3fa5-5881-0fd9-e5bf2382416d.jpeg)

⑥ショートカットアプリからオートメーションを選択し、「安否確認 share」は時刻で、「到着連絡 share」は到着で、それぞれオートメーションを新規作成する。
※なおこの際も皇居となっている箇所は居住地を指定し、線路や大通りを避けるよう設定する。
　安否確認 share
![無題731_20240714230119.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/a06af34d-0a2e-de38-8552-4bdec125492a.jpeg)

![IMG_1166.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/88bdae2d-cc81-e716-9ade-01817aebd88a.png)

　到着連絡 share
![無題729_20240714230014.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/cb79cbdb-9cf0-0086-e8b5-a1baa69bc0ba.jpeg)

![IMG_1169.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/2a56a826-7d2d-e370-72ae-bb3f62b322e6.png)

⑦ iPhoneメモ帳アプリに、「判定」という名前のフォルダを作成しておく。フォルダの新規作成は、以下から。
![無題727_20240714230838.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/ae1084ce-2013-f103-20dd-1724bf9d58a4.jpeg)

⑧ 以上で設定は完了。ショートカットアプリから「安否確認 share」、「到着連絡 share」をタップし正常に動作することを確認する。
 
# 実装・ロジック説明
見れば大体わかるかもしれないが、念のため実装内部のロジックを簡単に記述する。
## 安否確認 share
フローチャートは以下である。
GPSの誤差を考慮し、居住地に到着しているか否かの判定は0.3mとしている。また、現在地から居住地までの時間算出としては終電を逃すととてつもない時間になるため、車での時間とした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/6f3080f5-5fd3-80de-55a9-45a1691065bc.png)


## 到着連絡 share
フローチャートは以下である。
1. 未到着フラグが立っている場合
→ 門限を過ぎ到着したということのため、到着した旨のLINEメッセージを送信。未到着フラグを削除。過去の到着済フラグが立っている場合はそれも削除(前日に門限までに帰宅していると、23時に到着済フラグが立ったままのため)。
2. 未到着フラグは立っていない場合
→ 到着フラグが立っているか確認。立っている場合は削除。立っていない場合は何もせず処理を終了(このショートカットは居住地に到着するたびに実行されるため、何もフラグが立っていない場合の逃げ道も作成しておく必要がある)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3837975/5f7b9347-1c54-d0f3-49ef-9aeea98af5ed.png)


# さいごに
かれこれこの安否確認を半年ほど毎日実施しているが、彼女の安否を把握することができているため、半年前と比較し私のメンタルは正常に保てていると感じている。彼女は女子会でこのシステムの話題を出すと『相手を心配させることがなくなりそう』、『飲み会中にいちいち連絡する手間が省けて良さそう』などと結構ウケが良いらしい。しかし使用方法を尋ねられても彼女は理解せず使っているため、今回このように記事として共有することを決定した。
恋人の安否確認だけでなく、子供にiPhoneを持たせている家庭や、友達と海外旅行に行く際などでも活躍するのでは？と個人的には思っている。