iOS ショートカットと Power AutomateでヘルスケアデータをSharePointに保存する

# 「iOSに入っているヘルスケアデータで、Office 365使ってなにか遊びたい！」
例えばBIしたり、アプリ作ったり、そういうことがOffice 365、もといPower Platformでは可能なのですが、いかんせん、iOSのヘルスケアデータってほかのネイティブアプリくらいからしか取得できないんです。

しかし、iOSには、**ショートカット**というクライアントで動作するワークフローアプリが用意されています。
これを利用すると、写真の加工だったり、端末の情報、インストール済みのアプリの持っている情報を利用して、自動的にアクションを実行させることができます。もちろんヘルスケアデータにもアクセスできます。

ということで、今回は **「iOSショートカットとPower Automateを利用してヘルスケアデータをSharePointのリストに保存する」**ところまでを紹介します。

全体の概要はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/483e3c27-9eb5-bcb9-df49-119d5f24d578.png)

ショートカットに不慣れな場合に備えて、最後にリンクを用意していますので、そこからダウンロードしてください。

※iOSショートカットの詳細については[公式のユーザーガイド](https://support.apple.com/ja-jp/guide/shortcuts/welcome/ios)を参照してください。

# ショートカット側

まずはデータを取得するためのショートカットです。
ここでは例として、歩数の情報を、1時間ごとにまとめて、1日分(実行の前の日分)を送信するパターンを考えます。

## やっていること
ステップが長いですが、やっているのは・・・

1. 前の日の日付を計算
2. ヘルスケアデータから、歩数を、前の日～今日の区間で取得
3. 2の取得結果でForループ
  - 開始日をループの対象から取得
  - 変数にいったん格納
  - 値(歩数)をループの対象から取得
  - JSON風に、テキストを生成
4. ループの結果をカンマ区切りで結合
5. 一回確認
6. HTTPのPOSTで、Power AutomateのURLに向かってデータを送信

という流れです。
全体のスクリーンショットを参考にしていただければと思うのですが、はまりポイントは、ループ内の**開始日**です。
これは何もフォーマットしないと、yyyy/MM/dd HH:mm みたいな形式なのですが、時間単位でまとめているのにも関わらず、mmの部分が00ではないデータがあります。
ヘルスケア側が保存したタイミングだと思うので、この仕様はあきらめて、フォーマットで回避します。
<img width="375" alt="20200118_141549000_iOS.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/09b0cf72-12bf-0dff-6497-4abed6b728b9.jpeg">

実際に結合済みのテキストをQuickLookで確認してみると、
<img width="375" alt="20200118_151240000_iOS.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/6a920025-0642-e806-03c3-a42e6cc448e9.jpeg">
このように、期待どおりの結合結果になっていました。
あとはPOSTするときに[]でくくって、Array形式の**文字列**にします。

## 長い全体のスクショ
このような感じです。iPhoneでこれを作るのは結構大変ですが、入力は候補が出てくるので、ほとんどタイピングせずに済みます。
最後のネットワークのURLはPower Automate側で紹介します。

<img width="375" alt="EntireFlow.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/ddb0b285-50be-5a65-750c-e54fb0d59ed0.jpeg">

# Power Automate側
Power Automate側は非常にシンプルです。
HTTPリクエストの受信をトリガーとして、受け取ったsamplesを文字列からjson配列に変換。
変換結果のjsonをパースして、あとはすべてのアイテムをSharePointに格納すれば終わりです。
![Automate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/7a6b7e42-e0c9-a768-5005-5eec13c29cc9.png)
iOSショートカットで最後にPOSTする先のURLは、Power Automate側のトリガーにあるURLを指定しています。
パースしている部分のスキーマも単純で、この場合、日付と歩数しかないので、以下のようになります。

```parse.json
{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "date": {
                "type": "string"
            },
            "value": {
                "type": "string"
            }
        },
        "required": [
            "date",
            "value"
        ]
    }
}
```

# おわり
無事iOSショートカットとPower Automateという2つの異なるワークフロー製品(?)を連動させて、端末内の取り出しにくいデータをクラウドに持ってこれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/e52ad5d3-898f-1cc8-1987-60c56730fc67.png)

このようにそれぞれの特徴をいかせればもっと面白い使い方ができるかもしれません。

ショートカットは[こちらからどうぞ](https://www.icloud.com/shortcuts/be1396c674fd42789b90c5e229b412db)

※公式のギャラリー以外からショートカットを取り込む場合には、設定から、ショートカットの設定を変更してください。
<img width="375" alt="20200118_152540000_iOS.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202779/5c3fc4c9-16f6-a765-6bcb-2b5e740f74ed.jpeg">