CalendarApp.getCalendarByIdで勤怠管理を効率化!GASで実現するシフト自動集計

CalendarApp.getCalendarByIdで勤怠管理を効率化!GASで実現するシフト自動集計

勤怠管理は、企業にとって重要な業務ですが、手作業で行うと時間と手間がかかります。特に、シフト制の勤務体系の場合、従業員の勤務時間や休憩時間を正確に集計するのは困難です。そこで、Google Apps Script(GAS)のCalendarApp.getCalendarByIdを利用して、Googleカレンダーに登録されたシフト情報を自動的に集計し、勤怠管理を効率化する方法をご紹介します。

CalendarApp.getCalendarByIdとは?

CalendarApp.getCalendarByIdは、指定されたIDを持つGoogleカレンダーを取得するためのGASの関数です。この関数を使うことで、特定のカレンダーに登録されたイベント(シフト情報など)にプログラムからアクセスし、データを取得することができます。

CalendarApp.getCalendarByIdの基本的な使い方

CalendarApp.getCalendarByIdを使用するには、まずカレンダーのIDが必要です。カレンダーIDは、Googleカレンダーの設定画面から確認できます。

// カレンダーIDを指定してカレンダーを取得する
function getCalendarByIdExample() {
const calendarId = "your_calendar_id@group.calendar.google.com";
const calendar = CalendarApp.getCalendarById(calendarId);

Logger.log(calendar.getName()); // カレンダー名を表示
}

GASを使った勤怠管理システムの実装

ここでは、CalendarApp.getCalendarByIdを使って、Googleカレンダーのシフト情報を読み取り、勤務時間と休憩時間を自動集計するGASの実装例を紹介します。このシステムは、シフト制の従業員の勤怠管理を効率化し、集計ミスのリスクを軽減します。

1. シフト情報の登録

まず、従業員のシフト情報をGoogleカレンダーに登録します。イベントのタイトルに従業員名、開始時刻と終了時刻を勤務時間、詳細欄に休憩時間を記述します。例えば、「田中:9:00-18:00(休憩1時間)」のように登録します。

2. GASコードによるシフト情報抽出と集計

以下のGASコードは、指定された期間のシフト情報をカレンダーから抽出し、従業員ごとの勤務時間と休憩時間を集計します。

// 勤怠管理システム(シフト自動集計)
function aggregateAttendanceData(calendarId, startDate, endDate) {
const calendar = CalendarApp.getCalendarById(calendarId);
const events = calendar.getEvents(startDate, endDate);

let attendanceData = {};

for (let i = 0; i < events.length; i++) {
const event = events[i];
const title = event.getTitle();
const startTime = event.getStartTime();
const endTime = event.getEndTime();
const description = event.getDescription();

// タイトルから従業員名を抽出(例: 田中:9:00-18:00)
const employeeName = title.split(":")[0];

// 勤務時間を計算(時間単位)
const workHours = (endTime.getTime() - startTime.getTime()) / (1000 * 60 * 60);

// 休憩時間を抽出(例: 休憩1時間 → 1)
const breakTimeMatch = description.match(/休憩(\d+)時間/);
const breakTime = breakTimeMatch ? parseInt(breakTimeMatch[1]) : 0;

// 従業員ごとのデータを集計
if (!attendanceData[employeeName]) {
attendanceData[employeeName] = {
totalWorkHours: 0,
totalBreakTime: 0
};
}

attendanceData[employeeName].totalWorkHours += workHours;
attendanceData[employeeName].totalBreakTime += breakTime;
}

return attendanceData;
}

// 実行例
function testAggregateAttendanceData() {
const calendarId = "your_calendar_id@group.calendar.google.com"; // カレンダーIDを設定
const startDate = new Date("2024-01-01"); // 集計開始日
const endDate = new Date("2024-01-31"); // 集計終了日

const result = aggregateAttendanceData(calendarId, startDate, endDate);
Logger.log(result);
}

3. 集計結果の出力

集計されたデータは、Logger.log()で確認できるほか、スプレッドシートに出力することで、より詳細な分析や管理が可能になります。以下のコードは、集計結果をスプレッドシートに出力する例です。

// 集計結果をスプレッドシートに出力
function outputToSpreadsheet(attendanceData, spreadsheetId, sheetName) {
const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
let sheet = spreadsheet.getSheetByName(sheetName);

// シートが存在しない場合は作成
if (!sheet) {
sheet = spreadsheet.insertSheet(sheetName);
}

// ヘッダー行を作成
sheet.appendRow(["従業員名", "合計勤務時間", "合計休憩時間"]);

// データを書き込み
for (const employeeName in attendanceData) {
const data = attendanceData[employeeName];
sheet.appendRow([employeeName, data.totalWorkHours, data.totalBreakTime]);
}
}

// 実行例
function testOutputToSpreadsheet() {
const calendarId = "your_calendar_id@group.calendar.google.com"; // カレンダーIDを設定
const startDate = new Date("2024-01-01"); // 集計開始日
const endDate = new Date("2024-01-31"); // 集計終了日

const attendanceData = aggregateAttendanceData(calendarId, startDate, endDate);

const spreadsheetId = "your_spreadsheet_id"; // スプレッドシートIDを設定
const sheetName = "勤怠データ";

outputToSpreadsheet(attendanceData, spreadsheetId, sheetName);
}

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

  • カレンダーIDが間違っている: カレンダーIDが正しいか確認してください。
  • 権限がない: GASからカレンダーにアクセスする権限があるか確認してください。
  • 日付の形式が間違っている: new Date()で作成する日付の形式が正しいか確認してください。
  • タイムゾーンの問題: GASとカレンダーのタイムゾーンが一致しているか確認してください。

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

  • 休憩時間の自動計算: イベントの詳細欄に休憩時間を記載する代わりに、イベント時間から自動的に休憩時間を計算するように変更できます。
  • 複数カレンダーの集計: 複数のカレンダーからシフト情報を集計するように拡張できます。
  • エラー処理の追加: エラーが発生した場合に、エラーログを出力したり、通知を送信するように改善できます。

まとめ

CalendarApp.getCalendarByIdとGASを組み合わせることで、Googleカレンダーのシフト情報を利用した勤怠管理システムを簡単に構築できます。このシステムは、手作業による集計の手間を省き、人的ミスを減らすことで、業務効率化に大きく貢献します。ぜひ、本記事を参考に、自社の勤怠管理システムを構築してみてください。