Google formで体温入力システムの構築


# はじめに
現在、学校では生徒が登校前に体温を測定し、それを記録してくるように指導されている。
そのやり方はアナログ方式で、紙に記入している学校がほとんどだと思う。
しかし、このやり方だと、記入用紙を忘れてきてしまう生徒が出てくる。そのため、学校で記入するように指導しているところもあるようだが、学校に来るまでに体温を忘れてしまうという生徒もいる。

このような課題から私は、Google formを活用した体温入力システムを作成した。

# 完成品
![FireShot Capture 001 - 体温・体調チェック - docs.google.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394143/41afecf5-2b6c-1514-5d11-1bcc13e076b2.png)

# 1.生徒氏名の読み込み

まず、生徒の氏名を作成するにあたって、すでに生徒氏名のエクセルファイルがあったので、それを活用できないかを考え、スプレッドシートに変換し、GoogleAppsScriptを用いて、読み込みできるようにした。

```js:google_appｓ_script
function students_list(){
  //フォームIDからGoogleフォームを開き、質問事項を配列へ格納する
  var form_id = "フォームのid";
  var form = FormApp.openById(form_id);
  var question_items = form.getItems();

  //question_items[0]が1番目の質問事項アイテムということに気を付ける
  var item = question_items[1];

  //シートIDからスプレッドシートを開き、最終行を取得する
  var sheet_id = "スプレッドシートのid";
  var ss = SpreadsheetApp.openById(sheet_id);
  var sheet = ss.getSheetByName("シート名");
  var last_row = sheet.getLastRow();

  //スプレッドシートの先頭行から最終行までデータを読み込み、student_list配列に入れる
  var student_list = sheet.getRange(1,1,last_row,1).getValues();

  //student_list配列の中身をitem(=question_items[])に反映
  item.asListItem().setChoiceValues(student_list);
}

```
生徒氏名の読み込みをするにあたって、並び替えることを考え、氏名の前に出席番号を入れた。
また、注意点として、出席番号が1桁の生徒に関しては、1桁で登録すると、うまく並び替えができないため、2桁にするようにした。（例　出席番号が1番の生徒なら01）


# 2.検温日の作成
検温日も、生徒氏名の読み込みと同様の操作を行う。

```js:google_appｓ_script
function day_list(){
  //フォームIDからGoogleフォームを開き、質問事項を配列へ格納する
  var form_id = "フォームのid";
  var form = FormApp.openById(form_id);
  var question_items = form.getItems();

  //question_items[0]が1番目の質問事項アイテムということに気を付ける
  var item = question_items[1];

  //シートIDからスプレッドシートを開き、最終行を取得する
  var sheet_id = "スプレッドシートのid";
  var ss = SpreadsheetApp.openById(sheet_id);
  var sheet = ss.getSheetByName("シート名");
  var last_row = sheet.getLastRow();

  //スプレッドシートの先頭行から最終行までデータを読み込み、day_list配列に入れる
  var day_list = sheet.getRange(1,1,last_row,1).getValues();

  //day_list配列の中身をitem(=question_items[])に反映
  item.asListItem().setChoiceValues(day_list);
}
```

そして、最初に運用していた際には、検温日を月が変わるたびに、読み込みを行っていた。
しかし、この方法だと運営者が毎月、更新を行わなければならず、忘れてしまう可能性もある。

### 【スプレッドシートの工夫】
そのため、この更新作業を省くために、読み込むスプレッドシートを工夫した。
具体的には、スプレッドシートの月の部分を以下の図のように関数に置き換えた。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394143/698992b7-7a8c-f045-5a7c-7a11af99487a.png" width=300px>

###　【Google Apps Scriptでの操作】

トリガーで次のように設定し、保存をする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394143/2016ebee-9be3-863a-1aa2-f3adf0e018a7.png)


このようにすることによって、自動的に月が更新されるため、手作業による更新を行う必要がなくなる。

# 3.スプレッドシートでの操作
実際にフォームに入力してもらい、その回答をスプレッドシートに表示させると、次のように表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394143/ca07c785-29e8-6f8b-2917-6640ee20dd77.png)

この状況だと、入力していない生徒が把握することができない。そのため、まず氏名を昇順に並び替え、その後に検温日を降順に並び替えることによって、その日の入力状況を出席番号順に確認することができる。
また、応用として、その逆の操作を行うことによって、その生徒がいつから体調を崩し始めたのかを把握することもできる。

![並び替え（使用）.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394143/97deea75-1822-3c96-0459-93d29633ee47.gif)

### Google form で検温することによるメリット
このシステムにして、体調を管理したことによって、いくつかのメリットがあったので、最後にそれを紹介する。
・スマホで手軽に入力することができるため、入力率が上がった。
　→ 紙で実施していた場合は、紙に書くという作業を面倒くさがる生徒が多く、記入率が65％程度にとどまっていたが、このシステムにしてからは入力率が100％まで上げることができた。

・登校前に担任が生徒の体調を把握することができる。
　→ 生徒が登校する前に入力することにより、担任がその日の体調をすぐに把握することができるため、体調が悪い生徒がいた際には、その家庭にすぐ連絡し、保護者との連携を図りやすくなった。

・万が一、体調が悪化した場合、いつから予兆があったのかを即座に把握することができる。
　→ 生徒順に並べると、その生徒の日付ごとの変化を見ることができるので、医療機関にかかる際にも、必要に応じて、資料を提供することができる。


もし、使用する際には、コメントにて一声かけていただけると幸いです。