Calendar.getEventsForDayで勤怠管理を効率化!GASで実現するシフト自動集計
本記事では、Google Apps Script(GAS)のCalendar.getEventsForDay
関数を用いて、勤怠管理を効率化する方法を解説します。特に、シフト勤務における従業員の出勤状況を自動で集計し、業務効率を改善するテクニックを、具体的なコード例とともにご紹介します。
勤怠管理における課題とGASによる解決
多くの企業では、従業員の勤怠管理を手作業で行っており、時間と労力がかかっています。特にシフト勤務の場合、各従業員の出勤状況を正確に把握し、集計するのは非常に煩雑な作業です。
GASのCalendar.getEventsForDay
関数を活用することで、Googleカレンダーに登録されたシフト情報を自動的に取得し、勤怠管理を大幅に効率化できます。
Calendar.getEventsForDay関数の基本
Calendar.getEventsForDay(date)
は、指定された日付のイベントをGoogleカレンダーから取得する関数です。
この関数を使用するには、まずカレンダーIDを取得し、カレンダーオブジェクトを取得する必要があります。
// カレンダーIDを設定
const calendarId = "your_calendar_id@group.calendar.google.com";
// カレンダーオブジェクトを取得
const calendar = CalendarApp.getCalendarById(calendarId);
次に、getEventsForDay
関数を使って、特定日のイベントを取得します。
// 特定日のイベントを取得
const date = new Date("2024-07-25"); // 例:2024年7月25日
const events = calendar.getEventsForDay(date);
勤怠管理への実装例:シフト自動集計
ここでは、Calendar.getEventsForDay
関数を用いて、シフト勤務者の出勤状況を自動集計する具体的なコード例を紹介します。
例1:特定日の出勤者リストを作成
指定した日付に出勤している従業員のリストをGoogleスプレッドシートに書き出すコードです。
function getAttendanceList(date) {
// カレンダーIDを設定
const calendarId = "your_calendar_id@group.calendar.google.com";
// カレンダーオブジェクトを取得
const calendar = CalendarApp.getCalendarById(calendarId);
// イベントを取得
const events = calendar.getEventsForDay(date);
// 出勤者リストを作成
let attendanceList = [];
for (let i = 0; i < events.length; i++) {
const event = events[i];
const title = event.getTitle();
attendanceList.push(title); // イベントタイトルを従業員名と仮定
}
// スプレッドシートに書き出す
const sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow([date, attendanceList.join(", ")]);
}
// 実行例:2024年7月25日の出勤者リストを取得
function myFunction() {
const date = new Date("2024-07-25");
getAttendanceList(date);
}
例2:期間内の出勤日数集計
指定期間内の各従業員の出勤日数を集計し、スプレッドシートに表示するコードです。
function aggregateAttendance(startDate, endDate) {
// カレンダーIDを設定
const calendarId = "your_calendar_id@group.calendar.google.com";
// カレンダーオブジェクトを取得
const calendar = CalendarApp.getCalendarById(calendarId);
// 出勤日数を集計するオブジェクト
let attendanceCount = {};
// 期間内の日付をループ
let currentDate = new Date(startDate);
while (currentDate <= endDate) {
// イベントを取得
const events = calendar.getEventsForDay(currentDate);
// 出勤者をカウント
for (let i = 0; i < events.length; i++) {
const event = events[i];
const title = event.getTitle();
if (attendanceCount[title] === undefined) {
attendanceCount[title] = 0;
}
attendanceCount[title]++;
}
// 日付を1日進める
currentDate.setDate(currentDate.getDate() + 1);
}
// スプレッドシートに書き出す
const sheet = SpreadsheetApp.getActiveSheet();
for (const employee in attendanceCount) {
sheet.appendRow([employee, attendanceCount[employee]]);
}
}
// 実行例:2024年7月1日から2024年7月31日までの出勤日数を集計
function myFunction() {
const startDate = new Date("2024-07-01");
const endDate = new Date("2024-07-31");
aggregateAttendance(startDate, endDate);
}
よくある問題とトラブルシューティング
- カレンダーIDが間違っている:正しいカレンダーIDを設定しているか確認してください。
- イベントが取得できない:カレンダーにイベントが正しく登録されているか確認してください。
- タイムゾーンの問題:GASのタイムゾーンがGoogleカレンダーと一致しているか確認してください。
SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone()
でタイムゾーンを確認できます。
カスタマイズ方法と応用例
上記のコード例は、様々なカスタマイズが可能です。
- イベントタイトル以外の情報を利用:イベントの説明欄に詳細な情報を記述し、それを取得して利用することができます。
- 特定のイベントのみを対象とする:イベントタイトルや説明欄のキーワードでフィルタリングすることで、特定の種類のイベントのみを集計できます。
- 複数のカレンダーに対応:複数のカレンダーからイベントを取得し、統合的に集計することができます。
// イベントの説明を取得する例
const description = event.getDescription();
// 特定のキーワードを含むイベントのみを対象とする例
if (title.includes("出勤")) {
// 出勤イベントとして処理
}
まとめ
GASのCalendar.getEventsForDay
関数を活用することで、勤怠管理を大幅に効率化できます。本記事で紹介したコード例を参考に、自社の業務に合わせたカスタマイズを行い、より効率的な勤怠管理システムを構築してください。
特にシフト勤務における勤怠管理は、手作業では非常に煩雑な作業ですが、GASを用いることで自動化し、人的ミスを減らすことができます。ぜひ、GASを活用して、よりスマートな働き方を実現してください。
CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう