【iOS14】起床時間と睡眠時間を完全自動でツイートするショートカットを作ってみた

## はじめに
どうも、自動化大好き人間です。

少し前ですがiOS14がリリースされましたね。
iOS14では、ホーム画面のウィジェットや、Appライブラリ、空間オーディオ、睡眠機能などなど、盛り沢山のアップデートで個人的には神アプデでした。 また、Apple Watch Series6では血中酸素濃度が測定できるなど、ヘルスケア系にかなり力を入れているアップデートだと感じました。

さてさて、自動化が大好きな私ですが、このiOS14のアップデートで最も注目した機能の一つが、**睡眠のオートメーション**です。起床のタイミングでオートメーションを走らせられると色々できるんじゃないかなぁと思います。
そこで、今回は新しく追加された睡眠のオートメーションを使って、「**起床したタイミングで、起床時間と睡眠時間を自動的にツイートする**」ことを実現してみました。
これを使えばみなさんも睡眠に対するモチベーションが爆上がりすること間違いなし（？）です[^1] [^2]

行った手順はこんな感じです。

1. ショートカット「睡眠時間を計算」を作成する(ヘルスケアから睡眠のログを取得、計算)
2. ショートカット「起床時間と睡眠時間をツイート」を作成する(IFTTT連携、ショートカット作成)
3. オートメーションに組み込む

## 忙しい方へ
ショートカット内で別のショートカットを参照しています。上から順にダウンロードしてください。(IFTTTで作成したアプレットのwebhook URLが必要です。)
#### 🤖 完成品
* [ショートカット「日付をタイムスタンプに変換」をダウンロード](https://www.icloud.com/shortcuts/43be2a1370854efdb6fbee4c486b5155)
* [ショートカット「睡眠時間を計算」をダウンロード](https://www.icloud.com/shortcuts/5a4ce252c0344fe4ad7c2284546cb804)
* [ショートカット「ショートカットの入力をツイート」をダウンロード](https://www.icloud.com/shortcuts/df3d2cb9c84942aa8218e8bbf5fe6fe4)
* [ショートカット「起床時間と睡眠時間をツイート」をダウンロード](https://www.icloud.com/shortcuts/59f11ccf8cfe44ef88b5c6061586b2fc)

## 実装

### 1. ショートカット「睡眠時間を計算」を作成する
#### ヘルスケアから睡眠のログを取得
実際に睡眠のログを見てみると、ログが複数あることが分かるかと思います。これを知らずに実装してしまうと、最新の睡眠ログのみを取得して誤った睡眠時間を計算することになってしまいます。
そこで、睡眠ログを「ログの日付が過去１日以内」かつ「ログの終了時間が今日」という条件でログの抽出を行います。こうすることで対象の睡眠ログをすべて取得できるかと思います。

![iOSショートカット ヘルスケア 睡眠ログ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/ec18fb88-7dff-19da-7229-fc037517a50c.png)


#### 睡眠のログから睡眠時間を計算する
次に、睡眠時間の計算を行います。
ショートカットアプリでは、for文のような繰り返しのアクションが用意されています。繰り返しの中で、睡眠ログの終了時間と開始時間を取得し、差分を取ることで睡眠ログから睡眠時間を計算することができます。

![iOSショートカット 繰り返し](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/f23ed0da-e75b-22fd-734e-7e2b9de5966f.png)


ちなみに、ショートカットアプリの計算アクションでは日付の演算ができないので、終了時間および開始時間をタイムスタンプに変換して計算を行っています。なお、日付からタイムスタンプに変換する処理は関数のように別のショートカットとして切り出して、そのショートカットを呼び出す形で変換を行いました。

繰り返しの中であらかじめ用意した変数に睡眠時間を足していくことで、合計の睡眠時間を計算することができます。あとは、睡眠時間を時間に変換するなどすれば準備完了です。

#### 🤖 完成品

* [ショートカット「日付をタイムスタンプに変換」をダウンロード](https://www.icloud.com/shortcuts/43be2a1370854efdb6fbee4c486b5155)
* [ショートカット「睡眠時間を計算」をダウンロード](https://www.icloud.com/shortcuts/5a4ce252c0344fe4ad7c2284546cb804)

> 注意: ショートカット「睡眠時間を計算」は、ショートカット「日付をタイムスタンプに変換」を参照しています。「睡眠時間を計算」追加時にショートカット「日付をタイムスタンプに変換」を選択する必要があります。

### 2. ショートカット「起床時間と睡眠時間をツイート」を作成する
#### 睡眠時間をツイートするアプレットを作成する
計算された睡眠時間を変数として、最後に結果をツイートします。
ショートカットアプリ内には公式Twitterのツイートするアクションが用意されていますが、この場合、手動でツイートボタンを押してツイートする必要があります。
そこで、IFTTTと連携してIncoming Webhookを叩くことで完全な自動化を目指します。(IFTTTとTwitterアカウントの連携は省略します。)
最近IFTTTが有料プランを発表されましたが、アプレット3つ以内であれば無料で使うことができます。

IF 「Webhooks (Receive a web request)」, Then 「Twitter(Post a tweet)」の形でアプレットを作成します。このとき、Webhooksを追加するときに設定するEvent Nameはメモしておきましょう。

webhooksを選択(このときのEvent Nameをメモっておく)
![IFTTT webhooks](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/c2c6ebd4-ad37-d3ef-67c9-70ba7335a526.png)

Twitterのアクションを設定
![IFTTT twitter](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/4780c6b0-d464-112e-799b-45a86df849a9.png)

ワークフロー全体図。[Continue] > [Finish]でアプレットを作成します。
![IFTTT ワークフロー全体図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/7ebe60b9-c583-8e07-5ff9-d0cff7aa0083.png)

アプレットを作成したら、[https://ifttt.com/maker_webhooks/settings](https://ifttt.com/maker_webhooks/settings) から、webhookのURLを取得し、そのURLにアクセスします。Editを押すとURL(Key)がリフレッシュされるようなので注意が必要です。(紛らわしすぎ...)
![IFTTT_webhooks_settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/0c4afb10-fc08-11b6-5041-d37f0d9329e8.png)

メモっておいたURLにアクセスすると、Webhookのテスト画面が表示されます。
![IFTTT_webhooks_settings_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/cc00e839-7f89-28ee-2eb0-afc5c131137a.png)

POSTで`value1`にツイートするテキストを設定して、以下のURLを叩けば任意のテキストをツイートすることができます。

```bash
curl -X POST https://maker.ifttt.com/trigger/{Event Name}/with/key/{Your KEY}
```

#### ショートカット「ショートカットの入力をツイート」を作成する
IFTTT上でアプレットが作成できたので、ショートカットアプリで任意のテキストをツイートするショートカットを作成します。
「URLの内容を取得」アクションでwebhookを叩くことができます。IFTTTのIncoming webhookは、POSTのパラメータに`value1`、`value2`、`value3`が設定可能です。アプレット作成時に`value1`をツイートするように設定したので、パラメータ`value1`に`ショートカットの入力`を設定しています。

![iOSショートカット URLの内容を取得](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/906d6e83-717e-9127-89d1-9dde787332bd.png)


#### 🤖 完成品

* [ショートカット「ショートカットの入力をツイート」をダウンロード](https://www.icloud.com/shortcuts/df3d2cb9c84942aa8218e8bbf5fe6fe4)

> 注意: ショートカット追加時に、IFTTTのwebhook URLが尋ねられるので、あらかじめwebhook URLを用意しておきましょう。

### ショートカット「起床時間と睡眠時間をツイート」を作成する
上記の「ショートカットの入力をツイート」するショートカットににテキストを渡す形でショートカットを作成します。

#### 🤖 完成品

* [ショートカット「起床時間と睡眠時間をツイート」をダウンロード](https://www.icloud.com/shortcuts/59f11ccf8cfe44ef88b5c6061586b2fc)

 
> 注意: ショートカット「起床時間と睡眠時間をツイート」をは、ショートカット「ショートカットの入力をツイート」を参照しています。「起床時間と睡眠時間をツイート」追加時にショートカット「ショートカットの入力をツイート」を選択する必要があります。

### 3. オートメーションに組み込む
今までに作成したショートカットをオートメーションに組み込みます。「睡眠」のオートメーションは、iOS14から新しく追加された機能です。

[新規オートメーション] > [個人用オートメーションを作成] > [睡眠] > [起床]にチェック > [次へ]
と選択していき、アクション設定画面からアクションを追加していきます。
「睡眠時間を計算」 > [起床時間と睡眠時間をツイート]とアクションを設定すれば作業は完了です。

![アクションの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/ed772567-ef31-f92d-81d9-0848dbc337a8.png)

![オートメーションの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236175/15a1276b-ad89-427a-1ca4-31ed0bb9f2b3.png)

## おわりに
ショートカットをたくさんつくりました。
処理を切り分けて作ったので、ツイートではなくLINE Notifyで通知がしたいなどの応用が効きやすいかと思います。
ショートカットを作る過程の記事は調べてもあまり出こなかったので、この記事が誰かの助けになれば幸いです。

それでは、おやすみなさい〜😴
(動かなかったらごめんなさい)

[^1]: パブリックコミットメントのテクニックとして、SNSを使って周囲の人に宣言することは目標達成率を上げるために効果的であると言われています。
[^2]: 最近のAppleのCMのように個人情報 (睡眠時間) が筒抜けになります(笑)