Calendar.getEventsForDayで始める!Googleカレンダー勤怠管理自動化
GoogleカレンダーとGAS(Google Apps Script)を連携させることで、勤怠管理を劇的に効率化できます。特にCalendar.getEventsForDay
関数は、特定日の予定を取得するのに非常に強力です。この記事では、Calendar.getEventsForDay
の基本的な使い方から、勤怠管理への応用、よくある問題の解決策までを徹底解説します。
Calendar.getEventsForDayとは?
Calendar.getEventsForDay(date, options)
は、指定された日のGoogleカレンダーの予定を取得するGASの関数です。日付(date
)を引数として渡し、その日の予定を配列で取得します。オプション(options
)で、検索期間などを調整できます。
基本構文
function getEventsOnDate(date) {
const calendarId = "primary"; // カレンダーID (通常はprimary)
const calendar = CalendarApp.getCalendarById(calendarId);
const events = calendar.getEventsForDay(date);
return events;
}
勤怠管理への応用:実装例
ここでは、Calendar.getEventsForDay
を勤怠管理に活用する具体的な例をいくつか紹介します。
1. 出退勤時間の自動記録
Googleカレンダーに「出勤」「退勤」といった予定を作成することで、出退勤時間を自動的に記録できます。
function recordAttendance() {
const today = new Date();
const events = getEventsOnDate(today);
let startTime = null;
let endTime = null;
// 出勤と退勤の予定を探す
for (let i = 0; i < events.length; i++) {
const event = events[i];
const title = event.getTitle();
if (title.includes("出勤")) {
startTime = event.getStartTime();
} else if (title.includes("退勤")) {
endTime = event.getEndTime();
}
}
// 出勤時間と退勤時間をログに出力
if (startTime && endTime) {
Logger.log("出勤時間: " + startTime);
Logger.log("退勤時間: " + endTime);
// ここでスプレッドシートに記録する処理を追加できます
} else {
Logger.log("出勤または退勤の予定が見つかりませんでした。");
}
}
function getEventsOnDate(date) {
const calendarId = "primary"; // カレンダーID (通常はprimary)
const calendar = CalendarApp.getCalendarById(calendarId);
const events = calendar.getEventsForDay(date);
return events;
}
カスタマイズ:スプレッドシートへの自動記録機能を追加することで、より実用的な勤怠管理システムを構築できます。
2. 休憩時間の自動計算
休憩時間をカレンダーに登録しておけば、自動で休憩時間を計算し、労働時間から差し引くことができます。
function calculateWorkTime() {
const today = new Date();
const events = getEventsOnDate(today);
let totalWorkTime = 0;
let breakTime = 0;
for (let i = 0; i < events.length; i++) {
const event = events[i];
const title = event.getTitle();
const startTime = event.getStartTime().getTime();
const endTime = event.getEndTime().getTime();
const duration = endTime - startTime;
if (title.includes("休憩")) {
breakTime += duration;
} else if (title.includes("作業")) {
totalWorkTime += duration;
}
}
// 休憩時間を差し引いた労働時間を計算
const netWorkTime = totalWorkTime - breakTime;
const netWorkHours = netWorkTime / (1000 * 60 * 60); // 時間単位に変換
Logger.log("総労働時間 (時間): " + totalWorkTime / (1000 * 60 * 60));
Logger.log("休憩時間 (時間): " + breakTime / (1000 * 60 * 60));
Logger.log("実労働時間 (時間): " + netWorkHours);
// ここでスプレッドシートに記録する処理を追加できます
}
function getEventsOnDate(date) {
const calendarId = "primary"; // カレンダーID (通常はprimary)
const calendar = CalendarApp.getCalendarById(calendarId);
const events = calendar.getEventsForDay(date);
return events;
}
カスタマイズ:休憩時間を複数登録している場合でも、正しく計算できるようにロジックを調整できます。
3. 在宅勤務時間の集計
在宅勤務時間をカレンダーに記録し、集計することで、オフィス勤務時間と在宅勤務時間の割合を把握できます。
function calculateRemoteWorkTime() {
const today = new Date();
const events = getEventsOnDate(today);
let remoteWorkTime = 0;
for (let i = 0; i < events.length; i++) {
const event = events[i];
const title = event.getTitle();
if (title.includes("在宅勤務")) {
const startTime = event.getStartTime().getTime();
const endTime = event.getEndTime().getTime();
const duration = endTime - startTime;
remoteWorkTime += duration;
}
}
const remoteWorkHours = remoteWorkTime / (1000 * 60 * 60); // 時間単位に変換
Logger.log("在宅勤務時間 (時間): " + remoteWorkHours);
// ここでスプレッドシートに記録する処理を追加できます
}
function getEventsOnDate(date) {
const calendarId = "primary"; // カレンダーID (通常はprimary)
const calendar = CalendarApp.getCalendarById(calendarId);
const events = calendar.getEventsForDay(date);
return events;
}
カスタマイズ:特定のプロジェクトに関連する在宅勤務時間のみを集計する機能を追加できます。
よくある問題とトラブルシューティング
- 予定が取得できない:カレンダーIDが正しいか、日付の形式が正しいかを確認してください。
- タイムゾーンの問題:GASのタイムゾーンとカレンダーのタイムゾーンが異なる場合、時間計算がずれることがあります。
Utilities.formatDate()
を使用して、タイムゾーンを統一してください。 - 権限エラー:カレンダーAPIへのアクセス権限が付与されているか確認してください。
カスタマイズ方法と応用例
- 複数のカレンダーに対応:複数のカレンダーから予定を取得し、集計することができます。
- スプレッドシート連携:取得したデータをスプレッドシートに自動で記録し、グラフ化することができます。
- Slack通知:毎日の勤怠状況をSlackに自動通知することができます。
まとめ
Calendar.getEventsForDay
関数を活用することで、Googleカレンダーを勤怠管理システムとして活用できます。この記事で紹介したコード例を参考に、ぜひあなたの業務に合った自動化システムを構築してみてください。
CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。
CodeCampで理想の働き方を実現しよう