GmailMessage.getFromで勤怠管理を効率化!GASで実現するメール出退勤システム
GmailMessage.getFrom()とGoogle Apps Script(GAS)を組み合わせることで、メールを使った勤怠管理システムを構築し、業務効率を大幅に向上させることができます。本記事では、GmailMessage.getFrom()の基本的な使い方から、勤怠管理システムの実装例、よくある問題とその解決策、カスタマイズ方法までを詳しく解説します。
GmailMessage.getFrom()とは?
GmailMessage.getFrom()は、GASのGmailサービスで利用できる関数の一つで、Gmailメッセージの送信者のメールアドレスを取得するために使用されます。
この関数を使うことで、受信したメールが誰から送信されたものなのかをプログラムで判別することができます。
GmailMessage.getFrom()の基本
GmailMessageオブジェクトに対してgetFrom()メソッドを使用することで、送信者のメールアドレスを文字列として取得できます。
function getSenderAddress(message) {
const sender = message.getFrom();
return sender;
}
メールを使った勤怠管理システム
メールを使った勤怠管理システムは、従業員が出勤時と退勤時に特定のメールアドレスにメールを送信することで、出退勤時刻を記録・管理するシステムです。GASを使うことで、このプロセスを自動化し、手動での集計作業を削減できます。
勤怠管理システムの実装例
以下の手順で勤怠管理システムを実装します。
- Gmailの受信トリガーを設定し、特定のメールアドレスからのメールを受信する。
- 受信したメールから送信者のメールアドレスと受信日時を取得する。
- 取得した情報をGoogleスプレッドシートに記録する。
実用的なコード例
例1:出勤・退勤メールを判別してスプレッドシートに記録する
function recordAttendance() {
// 設定
const ATTENDANCE_SHEET_ID = "スプレッドシートID"; // スプレッドシートIDを設定
const ATTENDANCE_SHEET_NAME = "勤怠記録"; // シート名を設定
const TARGET_EMAIL = "attendance@example.com"; // 勤怠メール送信先アドレス
// スプレッドシートを開く
const sheet = SpreadsheetApp.openById(ATTENDANCE_SHEET_ID).getSheetByName(ATTENDANCE_SHEET_NAME);
// 新着メールを取得
const threads = GmailApp.search('to:' + TARGET_EMAIL + ' is:unread');
// スレッドを処理
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
if (message.isUnread()) {
const sender = message.getFrom();
const subject = message.getSubject();
const date = message.getDate();
// 出勤・退勤を判別
let status = "";
if (subject.includes("出勤")) {
status = "出勤";
} else if (subject.includes("退勤")) {
status = "退勤";
} else {
// 出勤・退勤の判別ができない場合は処理をスキップ
return;
}
// スプレッドシートに記録
sheet.appendRow([date, sender, status]);
// メールを既読にする
message.markRead();
}
});
});
}
例2:特定のメールアドレスからのメールのみ処理する
function processAttendanceEmail() {
// 設定
const ATTENDANCE_SHEET_ID = "スプレッドシートID"; // スプレッドシートIDを設定
const ATTENDANCE_SHEET_NAME = "勤怠記録"; // シート名を設定
const TARGET_EMAIL = "attendance@example.com"; // 勤怠メール送信先アドレス
const ALLOWED_SENDERS = ["user1@example.com", "user2@example.com"]; // 許可する送信者リスト
// スプレッドシートを開く
const sheet = SpreadsheetApp.openById(ATTENDANCE_SHEET_ID).getSheetByName(ATTENDANCE_SHEET_NAME);
// 新着メールを取得
const threads = GmailApp.search('to:' + TARGET_EMAIL + ' is:unread');
// スレッドを処理
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
if (message.isUnread()) {
const sender = message.getFrom();
const subject = message.getSubject();
const date = message.getDate();
// 送信者が許可リストに含まれているか確認
if (ALLOWED_SENDERS.includes(sender)) {
// 出勤・退勤を判別
let status = "";
if (subject.includes("出勤")) {
status = "出勤";
} else if (subject.includes("退勤")) {
status = "退勤";
} else {
// 出勤・退勤の判別ができない場合は処理をスキップ
return;
}
// スプレッドシートに記録
sheet.appendRow([date, sender, status]);
// メールを既読にする
message.markRead();
} else {
Logger.log("許可されていない送信者: " + sender);
}
}
});
});
}
よくある問題とトラブルシューティング
- メールが正しく処理されない: Gmailのトリガーが正しく設定されているか確認してください。また、メールの件名や本文が期待どおりの内容になっているか確認してください。
- スプレッドシートへの記録がされない: スプレッドシートIDやシート名が正しいか確認してください。また、GASの実行権限が付与されているか確認してください。
- 送信者のメールアドレスが正しく取得できない:
GmailMessage.getFrom()が返すメールアドレスの形式が、期待するものと一致しているか確認してください。
カスタマイズ方法と応用例
- 出退勤時刻の自動計算: スプレッドシート上で、出勤時刻と退勤時刻から労働時間を自動的に計算する。
- 休暇申請の自動処理: 休暇申請メールを受信し、承認/否認の結果を自動的にスプレッドシートに反映する。
- Slackへの通知: 出退勤時にSlackに通知を送信する。
まとめ
GmailMessage.getFrom()とGASを組み合わせることで、メールを使った勤怠管理システムを効率的に構築できます。本記事で紹介したコード例やトラブルシューティングを参考に、ぜひ独自の勤怠管理システムを開発し、業務効率化を実現してください。
PR

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう