GmailApp.getThreadでGmail成績管理を効率化!教育現場での活用事例

GmailApp.getThreadでGmail成績管理を効率化!教育現場での活用事例

教育現場では、学生の成績管理、出席管理、課題配布など、Gmailを使ったコミュニケーションが不可欠です。しかし、Gmailのメールを一つ一つ確認し、手作業で情報を整理するのは時間と労力がかかります。そこで、Google Apps Script (GAS) の GmailApp.getThread を活用することで、これらの業務を大幅に効率化できます。

GmailApp.getThreadとは?

GmailApp.getThread は、GASでGmailの特定のスレッド(メールのやり取り)を取得するための関数です。この関数を使うことで、スレッド内のすべてのメールにアクセスし、必要な情報をプログラムで抽出できます。

基本的な使い方

GmailApp.getThread は、スレッドIDを引数として指定します。スレッドIDは、GmailのURLから取得できます。

// スレッドIDを指定してスレッドを取得する
const thread = GmailApp.getThread("スレッドID");

教育現場での活用例:Gmail成績管理

ここでは、GmailApp.getThread を使って、学生からの課題提出メールを自動的に処理し、成績を管理する例を紹介します。学生が課題を提出する際、特定の件名(例:[課題提出] レポート課題)でメールを送信するように指示します。GASは、この件名のメールスレッドを検索し、添付ファイルをGoogleドライブに保存し、スプレッドシートに学生の名前と課題の提出状況を記録します。

実装例1:課題の自動収集とスプレッドシートへの記録

このスクリプトは、特定のラベルが付いたスレッドを検索し、そのスレッド内のすべてのメッセージから添付ファイルをダウンロードしてGoogleドライブに保存し、スプレッドシートに記録します。

function collectAssignments() {
// スプレッドシートのIDとシート名
const spreadsheetId = "スプレッドシートID";
const sheetName = "課題提出状況";
// 課題提出用のラベル名
const labelName = "課題提出";
// Googleドライブの保存フォルダID
const folderId = "GoogleドライブのフォルダID";

// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);

// 課題提出用のラベルを取得
const label = GmailApp.getUserLabelByName(labelName);

// ラベルが付いたスレッドを取得
const threads = label.getThreads();

// スレッドをループ処理
for (let i = 0; i < threads.length; i++) {
const thread = threads[i];
const messages = thread.getMessages();

// メッセージをループ処理
for (let j = 0; j < messages.length; j++) {
const message = messages[j];
const attachments = message.getAttachments();

// 添付ファイルをループ処理
for (let k = 0; k < attachments.length; k++) {
const attachment = attachments[k];
const fileName = attachment.getName();

// Googleドライブに保存
const folder = DriveApp.getFolderById(folderId);
folder.createFile(attachment);

// スプレッドシートに記録
const studentName = message.getFrom().split(" ")[0]; // 送信者の名前を取得(簡易版)
const lastRow = sheet.getLastRow();
sheet.getRange(lastRow + 1, 1).setValue(studentName);
sheet.getRange(lastRow + 1, 2).setValue(fileName);
sheet.getRange(lastRow + 1, 3).setValue(new Date()); // 提出日時
}
}
// 処理済みのスレッドからラベルを削除(オプション)
thread.removeLabel(label);
}
}

実装例2:特定のキーワードを含むメールの処理

特定のキーワード(例:再提出)を含むメールを検索し、学生にリマインダーメールを送信するスクリプトです。

function remindResubmission() {
// 検索キーワード
const keyword = "再提出";
// リマインダーメールの件名と本文
const subject = "【再提出のお願い】レポート課題";
const body = "レポート課題の再提出をお願いします。締め切りは明日までです。";

// 検索条件
const query = "subject:" + keyword;

// スレッドを検索
const threads = GmailApp.search(query);

// スレッドをループ処理
for (let i = 0; i < threads.length; i++) {
const thread = threads[i];
const messages = thread.getMessages();

// 最新のメッセージが自分からのメールでない場合のみリマインダーを送信
const lastMessage = messages[messages.length - 1];
if (lastMessage.getFrom() !== Session.getActiveUser().getEmail()) {
// スレッドの送信者にリマインダーメールを送信
GmailApp.sendEmail(thread.getFirstMessageSubject().replace("[再提出]", ""), subject, body);
}
}
}

よくある問題とトラブルシューティング

  • 権限エラー: GASの実行には、Gmailへのアクセス権が必要です。スクリプト実行時に権限を許可してください。
  • スレッドIDの取得ミス: スレッドIDが正しいことを確認してください。
  • 添付ファイルが見つからない: 添付ファイルが存在するか、ファイル名が正しいかを確認してください。

カスタマイズ方法と応用例

  • スプレッドシートの自動作成: スクリプトでスプレッドシートを自動的に作成し、データを記録できます。
  • Googleカレンダーとの連携: 課題の締め切りをGoogleカレンダーに自動的に登録できます。
  • ChatworkやSlackへの通知: 課題提出があった際に、ChatworkやSlackに通知を送ることができます。

まとめ

GmailApp.getThread を活用することで、教育現場におけるGmailを使った成績管理業務を大幅に効率化できます。ぜひ、この記事で紹介したコード例を参考に、GASを使った業務改善に挑戦してみてください。