まいにち体調管理アプリのデータを Google スプレッドシートに保存しよう

# はじめに

本記事は、[まいにち体調管理](https://apps.apple.com/jp/app/id1520936281?mt=8&uo=4)アプリの JSON データ出力機能を使って、
Google スプレッドシートに体調データを保存する手順を記載している。
Google スプレッドシートへの保存は、Google App Script を利用している。

# Google スプレッドシートと App Script

Google スプレッドシートを使うには、Google アカウントが必要である。
アカウントが無い場合は予め取得しておこう。
Gmail を利用しているなら、そのアカウントが Google アカウントである。

## Goolge スプレッドシートの作成

まずは、[Google Drive](https://drive.google.com/) にアクセスする。
左上の新規ボタンをクリックして、「Google スプレッドシート」を選択する。
スプレッドシート画面が表示されるので、「ツール」の「スクリプトエディタ」をクリックする。
![スプレッドシート](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62583/4c557802-25a2-c8ed-8cb5-f07967dc96f5.png "スクリプトエディタ起動")
なお、スプレッドシート名は「まいにち体調管理」に変更しておく。[^1]
[^1]: 好きなスプレッドシート名にしても問題ないよ。

## Google App Script プログラムの作成

Google App Script の画面に切り替わるので、スクリプトの名前を変更する。
ここでは便宜上、「HealthCare」と変更した。
![Google App Script](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62583/ccbdf81f-39c5-4f01-8098-babc1050d30b.png "スクリプト名の変更")

HealthCare.gs のプログラムは、[Gist](https://gist.github.com/magickworx/7d4fed0728ef591bc491d96e8341a507) のソースコードをそのままコピーして貼り付けるだけ。

```javascript:HealthCare.gs
function doPost(e) {
  var status = 0
  let jsonString = e.postData.getDataAsString()
  let json = JSON.parse(jsonString)
  if (json.date) {
    let year = json.date.year
    let month = ('00' + json.date.month).slice(-2)
    let day = ('00' + json.date.day).slice(-2)
    let sheetName = year + month
    
    let spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
    var sheet = spreadsheet.getSheetByName(sheetName)
    if (!sheet) {
      spreadsheet.insertSheet(sheetName)
      sheet = spreadsheet.getActiveSheet()
      sheet.appendRow([
        "日付","時間帯","体温",
        "咳","鼻水","痰","息切れ","喉の痛み","眼の痛み","筋肉痛","頭痛",
        "下痢","嘔吐","倦怠感","におい","味","解熱剤の服用"
      ])
    }
    let dateString = year + '/' + month + '/' + day
    for (const condition of json.conditions) {
      sheet.appendRow([ 
        dateString, condition.time_zones, condition.body_temperature,
        condition.cough, condition.runny_nose, condition.phlegm, condition.breathless,
        condition.sore_throat, condition.eye_pain, condition.muscle_pain, condition.headache,
        condition.diarrhea, condition.vomiting, condition.malaise, condition.smell, condition.taste,
        condition.antipyretic
      ])
    }
  }
  else {
    status = 500
  }
  const result = {
    "status": status
  }
  const response = JSON.stringify(result)
  return ContentService.createTextOutput(response).setMimeType(ContentService.MimeType.JSON)
}
```
プロジェクト名も「まいにち体調管理」に変更した。[^2]
[^2]: 好きなプロジェクト名にしても問題ないよ。
手順通りに進んでいれば、以下のような画面になる。
![GAS完成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62583/6b816b89-954a-2a05-25ae-91f2b551fcd8.png "HealthCare.gs")

このスクリプトは、自動的に``年月のシート``を作成するので、月が変わってもスプレッドシート側で操作をする必要は無い。

## Google App Script を公開

メニューの「公開」をクリックして「ウェブアプリケーションとして導入」を選択する。
![gas_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62583/d3de8c85-bedf-5dcd-996a-fa1e4f754cc6.png)
公開用の設定画面が表示されるので、次の画面のように設定する。
![gas_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62583/428a2b6b-7834-64c5-3d3e-389b71ca5f62.png)
``Who has access to the app`` の項目を ``Anyone, even anonymous`` に設定したので、URL を知っているユーザは誰でもアクセス可能になるので注意が必要である。[^3]
[^3]: ``only myself`` を指定するとトークン関係の説明が必要となり、面倒なので簡単な方法を紹介した。

必要な設定が完了したら、「更新」ボタンをクリックする。
![gas_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62583/2fc77548-a72b-78cc-43e9-56881c5a2997.png)
``「Current web app URL」の内容をコピーしておく。``

# まいにち体調管理アプリの設定

コピーした URL をアプリに設定する。
![サーバ情報](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62583/3dfbbaf9-a49b-f1aa-1e30-40b4f12b3240.png "サーバ情報の編集")
URL の ``script.google.com`` を ``ホスト名`` に設定する。
``/macros/s/...`` 以降を ``API のパス名`` に設定する。
``SSL通信`` は ``オン`` にする。
アプリに貼り付ける際は、メモアプリなどを使ってホスト名とパス名に分離してから作業すると、比較的楽にできると思う。

## アップロードの動作確認

アプリの体調管理画面の日にちをタップして、右上のアイコンをタップする。
``全データを JSON 形式で送信``をタップ。
![ss003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62583/129c80e7-4c3a-e407-dac5-101a03e35253.png)

作成した Google スプレッドシートに送信した年月日のデータが記録されていれば成功。
![ss004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62583/a037cb86-ef69-91c8-f4b6-3c766a27aa04.png)

Google スプレッドシートにデータが記録されるので、あとは自由に加工すれば良い。

# おわりに

[まいにち体調管理](https://apps.apple.com/jp/app/id1520936281?mt=8&uo=4)アプリのデータを Google App Script を使って Google スプレッドシートに保存する方法を記した。
ここで紹介した Google App Script は、ちょっと修正するだけで他の用途にも応用できると思う。
Google App Script を初めて利用したけど、データ記録系のアプリのバックエンドとしても利用できそうだなと感じた。

また、[まいにち体調管理](https://apps.apple.com/jp/app/id1520936281?mt=8&uo=4)アプリの JSON データを自作サーバで受信したい場合は、[GitHub](https://github.com/magickworx/HealthCareServer)にサンプルコードがあるので参照してね。node.js と express を使ったコードだよ。