GASでgoogleフォームと連携しよう 〜先生の悩みを減らす方法(教師編)〜

縁あって、週に一度教壇に立つことになった。自分が中学生、高校生だった頃には想像だにしなかった、教員のおかれている授業以外の様々な状況に振り回されている。そう、教員とは、意味もなく増え続ける書類やなぜか上から目線の保護者への対応に翻弄され、時に授業という本来の仕事を忘れがちな職業なのだ。それでもやってくる毎日の授業、宿題の確認、アンケートの集計…。

おっと、つい愚痴をもらしてしまった。しかし、今やそのいくつかはGoogleフォームを使うことで解決する。「え?そうなの?本当に?」と疑いたくなるかもしれない。しかし教員だってIT化の恩恵に与りたいと思うのはアタリマエのことなのだ。まあなんだ、今後も教員を続けるつもりなら、せめて保護者への対応に頭を悩ませる十分な時間を確保しないことにはどうにもなるまい。


目的

今回の目的は、Googleフォームから得た生徒のデータを自動的に処理し、提出状況の確認や、面倒な集計作業を簡素化することだ。要するに、これで少しでも仕事が楽になるのなら万々歳だ、ということだ。


準備

  1. Googleフォーム:生徒が宿題を提出するための質問を作成し、提出された回答をスプレッドシートに保存する。
  2. スプレッドシート:フォームの回答を保存する場所で、ここにGASで少し小細工を加えることになる。
  3. GASエディタ:スプレッドシートの拡張機能 > Apps Scriptから、GASエディタを開く。これから書くコードが、あなたの作業を一部救ってくれる…はず。

コードの説明

宿題の提出状況をリアルタイムで確認する方法

フォームを使えば、生徒たちは宿題を提出しやすくなる…はずだが、実際に全員が期限通りに提出することは稀である。そこで、GASを使って未提出者をすぐに捕捉し、通知する仕組みを作ろう。

function onFormSubmit(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const responses = e.values;

  // 新しい回答
  const timestamp = responses[0];  // 提出時刻
  const studentName = responses[1];  // 生徒の名前
  const homeworkStatus = responses[2];  // 宿題の提出状況

  // 未提出の場合に通知
  if (homeworkStatus === '未提出') {
    const emailAddress = 'teacher@example.com';  // 先生のメールアドレス
    const subject = `【宿題未提出】${studentName}さんからの通知`;
    const message = `${studentName}さんが宿題を未提出としました。\n提出時刻: ${timestamp}\n状況: ${homeworkStatus}`;
    MailApp.sendEmail(emailAddress, subject, message);
    Logger.log('宿題未提出の通知を送信しました。');
  }

  // ログに記録
  Logger.log('新しい回答: ' + responses.join(', '));
}

ポイント解説

  1. リアルタイム通知:宿題を「未提出」とした生徒に対して、即座に通知が送られるように設定。これでいちいちスプレッドシートをチェックする手間が減る(はず)。
  2. Logger.log():デバッグやログ出力のための関数。何かうまく動かないときに役立つが、しばしば「何も悪くないのに、動かない」ケースもあることはお忘れなく。

未提出の宿題を自動集計し、先生の悩みを減らす方法

全生徒の宿題提出状況を手動で追いかけることは、まるでアリの大行進を目で数えるようなもの。GASを使えば、宿題の進捗を一括で集計し、特定のシートにまとめて報告できる。

function generateHomeworkReport() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  let notSubmittedCount = 0;

  // 回答データをループ処理して未提出の数を集計
  for (let i = 1; i < data.length; i++) {
    const status = data[i][2];  // 宿題の提出状況
    if (status === '未提出') {
      notSubmittedCount++;
    }
  }

  // レポートシートに出力
  let reportSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('宿題レポート');
  if (!reportSheet) {
    reportSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('宿題レポート');
  }

  reportSheet.clear();
  reportSheet.getRange(1, 1).setValue('宿題レポート');
  reportSheet.getRange(2, 1).setValue('未提出の数:');
  reportSheet.getRange(2, 2).setValue(notSubmittedCount);

  Logger.log('宿題レポートを生成しました。');
}

ポイント解説

  • 集計自動化:すべての回答をスプレッドシートから取得し、宿題未提出者の数を自動でカウント。この結果に驚くか、げんなりするかはあなた次第だ。
  • レポートシート:この自動集計結果を新しいシートに出力。これで、生徒の提出状況を確認するたびにため息をつく必要が減るだろう。

フォーム提出後の通知とフィルタリング

フォームからの回答を細かく管理し、生徒が期限内に提出したかを自動で追跡することも可能だ。この部分はスクリプトが得意とするところ。手動でやるよりもずっと速いし、正確である。ただし、たまに気まぐれでエラーが発生することもあるので、注意が必要だ。

function sendHomeworkReminder() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();

  for (let i = 1; i < data.length; i++) {
    const studentName = data[i][1];
    const homeworkStatus = data[i][2];

    if (homeworkStatus === '未提出') {
      const emailAddress = data[i][3];  // 生徒のメールアドレス
      const subject = `【宿題提出のお願い】${studentName}さんへ`;
      const message = `${studentName}さん、宿題がまだ提出されていません。早めに提出してください。`;

      MailApp.sendEmail(emailAddress, subject, message);
      Logger.log(`${studentName}さんへリマインダーメールを送信しました。`);
    }
  }
}

ポイント解説

  • フィルタリングと通知:未提出者を自動でチェックし、該当する生徒にリマインダーメールを送信する。これは生徒にも教員にも優しいシステムだが、受け取った生徒たちはどう感じるだろうか?それは別の問題だ。
  • 効果的な自動化:生徒の宿題提出状況を手動で追跡し、メールを送信する煩雑な作業から解放される。このコードが正しく動けば、だが。

注意点

  • Googleフォームのリミット:Googleフォームには、1日に処理できる送信数やスクリプトの実行数に上限がある。生徒全員が一斉に提出した場合、フォームが息切れすることもあるので、その際は教員ではなくフォームを叱ってほしい。
  • プライバシーの問題:生徒の個人情報を扱う際には、適切な管理をし、アクセス権限をしっかりと制御する必要がある。学校のIT担当者に頼りすぎるのも危険だ。

まとめ

GoogleフォームとGASを使えば、授業での煩雑な作業をいくらか自動化できる。宿題の提出状況をリアルタイムで把握し、未提出者には自動でリマインドメールを送る。

コメント

このブログの人気の投稿

桃太郎電鉄ワールド、初の大型アップデート。その名も『ムー大陸浮上!』

GASのさらに高度なテクニック:非同期処理、プロパティサービス、Webhookチェーン

GASでスクレイピング 〜天才ア○バ様の教え〜