Blow Up by Black Swan

GAS(Google Apps Script)ー会社でGAS+Googleフォーム+スプレッドシートを使ってメール通知機能を備えた健康確認アンケートを無料で作成した話

新型コロナウィルスに感染された方々の早期のご快復と日本、ひいては世界中の被害が最小限となるよう祈念しています。

今、世界の関心は新型コロナウィルスにあります。今まで経験したことのない、まさに未曾有の事態に私たちは直面しています。幸い私の暮らす街はまだ感染者数が急増する状態になく、都内に比べると日常に近い生活が送れています。今回、新型コロナウィルスの感染拡大防止のために会社で社員全員が出社前に回答するメール通知機能付きの健康確認アンケートを会社で作成したので、その内容についてまとめようと思います。記事の題名にもある通り、GAS(Google Apps Script)、Googleフォーム、スプレッドシートを使用して無料で作成しました。

この記事が1人でも多くの方の参考になりましたら幸いです。

1. 健康管理アンケートの概要

まずは今回作成する健康管理アンケートの使用イメージや動作の流れについて説明します。

1-1. 健康管理アンケートの使用イメージ

今回、Googleフォームで作成した健康管理アンケートの使用イメージは次の動画のようになります。いたってシンプルな構造になっています。ページ遷移しているのはセクション分けのためですが、これは部署ごとに選択できる社員名を制限することで記入誤りを防ぐためです。

1-2. 健康管理アンケートの動作流れ

健康管理アンケートは毎朝、社員が出社前に回答することで健康状態を把握した上で出社してもらうこと、そして万が一体調が悪い場合は上司に連絡がいき、体調不良をおして出社するような状況を避けるためのものです。そのため、体調不良が発覚した場合は上司にメールで通知される機能が備わっています。動作の流れは次のようになります。

  1. 社員が健康管理アンケートに回答(Googleフォームの送信)
  2. 条件に該当する場合(微熱または体調不良)、上司にメール通知
  3. 回答内容は全てスプレッドシートに自動保存

2. 作成方法

それではここから健康管理アンケートの作成方法について説明していきます。

2-1. 作成の流れ

健康管理アンケートの作成の流れは次のようになります。Googleフォームはデータ保存するスプレッドシートの作成やGASの紐づけが簡単にできるようになっており、カスタマイズしやすい仕様になっています。

  1. Googleフォームの作成
  2. スプレッドシートの作成
  3. GASでメール通知機能を実装

2-2. Googleフォームの作成

まずは健康管理アンケートのGoogleフォームを作成します。質問項目は次の5項目です。

  1. 日付
  2. 部署
  3. 氏名
  4. 体温
  5. 体調

なお、人数が多い会社で社員名の記入誤りを防ぐためにセクション分割で制限付き選択リストのような形を取っており、Googleフォームの構造は次のようになっています。

  1. 基本項目セクション(日付・部署)
  2. 氏名項目セクション(それぞれの部署ごとにセクションを作成)
  3. 健康項目セクション

各質問項目は次のように設定しています。

・日付

日付項目

・部署項目

部署項目

・氏名 ※経理部署のスクリーンショットになっていますが、他の部署も同様の設定をしています。

社員名項目

・体温項目

体温項目

・体調項目

体調項目

2-3. スプレッドシートの作成

次は健康確認アンケートの回答を保存するスプレッドシートの作成です。これは非常に簡単です。Googleフォームの編集欄で「回答」タブを設定します。初期設定ではスプレッドシートマークを選択するだけでよく、保存先のスプレッドシートを改めて作成する場合はスプレッドマークシートの横の点が縦に3つ並んだ記号をクリックし「回答先を選択」を選びます。

スプレッドシート作成1

ここで「新しいスプレッドシートを作成」、または「既存のスプレッドシートを選択」をクリックすることでスプレッドシートとGoogleフォームの紐づけが完了します。

スプレッドシート作成2

2-4. GASでメール通知機能の実装

最後にGASを使用して特定の条件を満たす場合にメールを送るプログラムです。プログラムは次のようになっています。

function mailing(e) {
  // Googleフォームの回答を変数に格納
  const responses = e.response.getItemResponses();

  const date = responses[0].getResponse();
  const department = responses[1].getResponse();
  const name = responses[2].getResponse();
  const bodyTemp = responses[3].getResponse();
  const phyCon = responses[4].getResponse();
  
  // メール用変数
  let to = "";
  const subject = "(要確認)健康確認アンケート"
  let body = "健康確認アンケートで確認対象社員が出ました。社員に連絡を取り、状況を確認して下さい。\n\n";
  
  if (bodyTemp==="微熱(37.5°)以上" || phyCon==="はい") {
    if (department==="経理") {
      to = "<経理部上司の連絡先>"
    } else if (department==="営業") {
      to = "<営業部上司の連絡先>"
    } else if (department==="生産") {
      to = "<生産部上司の連絡先>"
    }
    body += "日付: "+date+"\n";
    body += "部署: "+department+"\n";
    body += "名前: "+name+"\n";
    body += "体温: "+bodyTemp+"\n";
    body += "体調: "+phyCon+"\n";
    MailApp.sendEmail({
      to: to,
      subject: subject,
      body: body
    });
  }
}

極めてシンプルなプログラムであることがわかるかと思います。ポイントは次の点になります。

  • メイン関数のmailingの引数でGoogleフォームの回答を収納したイベントオブジェクトを受けている
  • e.response.getItemResponses()でGoogleフォームの回答をもつItemResponseオブジェクトを格納した配列を取得
  • ItemResponseオブジェクト.getResponse()関数で回答を抽出
  • MailApp.sendEmail()でメールを送信

Googleフォームの回答を受けるイベントオブジェクトについては公式ドキュメント(Event Objects – Apps Script)が参考になります。なお、送信メールアドレスは作成者になるようです。

最後にこのプログラムがGoogleフォーム送信時に発動するようトリガーを設定します。トリガー設定はGASのエディター画面から設定できます。まずファイル名の上にある時計マークをクリックします。

トリガー設定1

新しい画面が開くので右下のプラスマークを押します。

トリガー設定2

そして次のように設定し保存することでトリガー設定は完了となります。

トリガー設定3

3. 実行

これで健康管理アンケートが作成できました。Googleフォームの質問画面から体温が高いか、体調が悪いという回答をします。すると指定したメールアドレスに次のようなメールが送信されます。

メール1

このように指定した条件を満たす場合にメールが自動で送信されます。

4. 最後に

以上が健康管理アンケートのプログラムです。GAS、Googleフォーム、スプレッドシートと3つのアプリを利用しますが、構造も設定も至って簡単です。出社時にシートに記入させたり、体温測定を義務化しても実際には守られなかったり、形骸化してしまうことがあると思います。今回のような仕組みはそういった形骸化や事務手間を減らすにはうってつけの方法だと思うので、利用してみて頂ければと思います。

最後までお読み頂きありがとうございます。この記事が参考になりましたら幸いです。