GmailMessage.getId()で勤怠管理を効率化!GASで実現するメールID勤怠システム
GmailMessage.getId()とGAS(Google Apps Script)を組み合わせることで、メールIDを基にした勤怠管理システムを構築し、大幅な業務効率化を実現できます。本記事では、勤怠管理における課題を解決し、具体的なコード例とカスタマイズ方法を詳しく解説します。
GmailMessage.getId()とは
GmailMessage.getId()は、Gmailのメッセージを一意に識別するためのIDを取得するGASの関数です。このIDを利用することで、特定のメールを追跡したり、メールの内容に基づいて処理を実行したりできます。勤怠管理においては、出退勤メールのIDを記録することで、正確な勤怠データを収集できます。
勤怠管理における課題
手動での勤怠管理は、集計ミスや不正申告のリスクが高く、担当者の負担も大きいです。また、タイムカードなどの物理的な記録媒体は、紛失や破損の可能性があります。これらの課題を解決するために、GmailMessage.getId()を活用した自動勤怠管理システムが有効です。
GmailMessage.getId()を活用した勤怠管理システムの実装
以下の手順で、GmailMessage.getId()を活用した勤怠管理システムを実装します。
- 出退勤メールの受信をトリガーにGASを実行
- 受信したメールのIDを
GmailMessage.getId()で取得 - 取得したメールIDと受信日時をスプレッドシートに記録
- スプレッドシートのデータを分析し、勤怠レポートを作成
実装例1:出勤時間の記録
件名に「出勤」と記載されたメールを受信した際に、メールIDと受信時間をスプレッドシートに記録するコード例です。
// 出勤時間を記録する関数
function recordAttendance() {
// スプレッドシートのID
const spreadsheetId = "YOUR_SPREADSHEET_ID";
// シート名
const sheetName = "出勤記録";
// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
// シートを取得
const sheet = ss.getSheetByName(sheetName);
// Gmailから未読の出勤メールを検索
const threads = GmailApp.search("is:unread subject:'出勤'");
// スレッド内のメールを処理
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
// メールが未読の場合のみ処理
if (message.isUnread()) {
// メールIDを取得
const messageId = message.getId();
// 受信日時を取得
const date = message.getDate();
// スプレッドシートに記録
sheet.appendRow([messageId, date]);
// メールを既読にする
message.markRead();
}
});
});
}
実装例2:退勤時間の記録
件名に「退勤」と記載されたメールを受信した際に、メールIDと受信時間をスプレッドシートに記録するコード例です。
// 退勤時間を記録する関数
function recordDeparture() {
// スプレッドシートのID
const spreadsheetId = "YOUR_SPREADSHEET_ID";
// シート名
const sheetName = "退勤記録";
// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
// シートを取得
const sheet = ss.getSheetByName(sheetName);
// Gmailから未読の退勤メールを検索
const threads = GmailApp.search("is:unread subject:'退勤'");
// スレッド内のメールを処理
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
// メールが未読の場合のみ処理
if (message.isUnread()) {
// メールIDを取得
const messageId = message.getId();
// 受信日時を取得
const date = message.getDate();
// スプレッドシートに記録
sheet.appendRow([messageId, date]);
// メールを既読にする
message.markRead();
}
});
});
}
実装例3:出退勤時間の自動計算
出勤時間と退勤時間を基に、労働時間を自動計算するコード例です。この例では、出勤・退勤のメールIDをキーにして、スプレッドシート上でVLOOKUP関数を使用し、対応する時間を検索して計算します。
// 労働時間を計算する関数(スプレッドシート上で実行)
function calculateWorkingHours(attendanceId, departureId) {
// スプレッドシートのID
const spreadsheetId = "YOUR_SPREADSHEET_ID";
// 出勤記録シート名
const attendanceSheetName = "出勤記録";
// 退勤記録シート名
const departureSheetName = "退勤記録";
// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
// 出勤記録シートを取得
const attendanceSheet = ss.getSheetByName(attendanceSheetName);
// 退勤記録シートを取得
const departureSheet = ss.getSheetByName(departureSheetName);
// 出勤時間を検索
const attendanceRange = attendanceSheet.getDataRange();
const attendanceValues = attendanceRange.getValues();
let attendanceTime = null;
for (let i = 0; i < attendanceValues.length; i++) {
if (attendanceValues[i][0] === attendanceId) {
attendanceTime = attendanceValues[i][1];
break;
}
}
// 退勤時間を検索
const departureRange = departureSheet.getDataRange();
const departureValues = departureRange.getValues();
let departureTime = null;
for (let i = 0; i < departureValues.length; i++) {
if (departureValues[i][0] === departureId) {
departureTime = departureValues[i][1];
break;
}
}
// 労働時間を計算
if (attendanceTime && departureTime) {
const workingHours = (departureTime.getTime() - attendanceTime.getTime()) / (1000 * 60 * 60);
return workingHours;
} else {
return ""; // データが見つからない場合は空白を返す
}
}
よくある問題とトラブルシューティング
- メールが正しく記録されない:Gmailの検索条件やスプレッドシートのIDが正しいか確認してください。また、GASの実行権限が付与されているか確認してください。
- タイムゾーンの問題:GASのタイムゾーン設定が日本時間になっているか確認してください。
- スクリプトの実行制限:GASには1日の実行制限があります。大規模なシステムの場合は、トリガーの頻度を調整してください。
カスタマイズ方法と応用例
- 休暇申請:件名に「休暇」と記載されたメールを受信した際に、休暇の種類と期間をスプレッドシートに記録する。
- 残業申請:件名に「残業」と記載されたメールを受信した際に、残業時間と理由をスプレッドシートに記録する。
- Slack連携:出退勤情報をSlackに通知する。
まとめ
GmailMessage.getId()とGASを活用することで、低コストで効率的な勤怠管理システムを構築できます。本記事で紹介したコード例を参考に、自社のニーズに合わせてカスタマイズし、業務効率化を実現してください。

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