GASで勤怠管理を効率化!MultipleChoiceItem.setTitleで選択肢を動的に変更

GASで勤怠管理を効率化!MultipleChoiceItem.setTitleで選択肢を動的に変更

勤怠管理は、企業にとって重要な業務ですが、集計や管理に手間がかかるという課題があります。特に、従業員数が多い企業や、シフト制を導入している企業では、その傾向が顕著です。Google Apps Script(GAS)を活用することで、これらの課題を解決し、勤怠管理を大幅に効率化できます。本記事では、GASのMultipleChoiceItem.setTitle関数を用いて、勤怠管理フォームの選択肢を動的に変更する方法を解説します。これにより、例えば、日付によって選択できる勤務時間を変更したり、特定の従業員に対してのみ特定の選択肢を表示したりといった柔軟な対応が可能になります。

MultipleChoiceItem.setTitle関数の基本

MultipleChoiceItem.setTitleは、Googleフォームのラジオボタン形式の質問項目のタイトル(質問文)を変更するための関数です。この関数を使用することで、フォームの質問内容を動的に変更し、より柔軟なフォームを作成できます。

構文

item.setTitle(title)

  • item: 変更したいMultipleChoiceItemオブジェクト。
  • title: 設定したい新しい質問文(文字列)。

勤怠管理における実装方法

勤怠管理フォームにMultipleChoiceItem.setTitleを適用することで、様々な業務効率化が実現できます。ここでは、具体的な実装例をいくつか紹介します。

例1:日付によって選択可能な勤務時間を変更

日付に応じて選択できる勤務時間を変更する例です。例えば、特定の日が祝日の場合、選択肢から「通常勤務」を削除し、「休日」のみを選択可能にするといったケースが考えられます。

function updateWorkHours() {
// フォームIDを設定
const formId = "YOUR_FORM_ID";
const form = FormApp.openById(formId);
// 勤務時間を選択する質問項目IDを設定
const item_id = "YOUR_ITEM_ID";
const item = form.getItemById(item_id).asMultipleChoiceItem();
// 今日の日付を取得
const today = new Date();
const year = today.getFullYear();
const month = today.getMonth() + 1; // 月は0から始まるため+1
const day = today.getDate();
const formattedDate = year + "/" + month + "/" + day;

// 祝日かどうかを判定(祝日判定のロジックは別途実装が必要)
const isHoliday = isHolidayCheck(formattedDate); // 例:祝日判定関数

if (isHoliday) {
// 祝日の場合、選択肢を「休日」のみにする
item.setChoices([item.createChoice("休日")]);
item.setTitle("本日は休日です。勤務時間を選択してください。");
} else {
// 平日の場合、通常の選択肢を設定
item.setChoices([
item.createChoice("通常勤務"),
item.createChoice("午前休"),
item.createChoice("午後休")
]);
item.setTitle("勤務時間を選択してください。");
}
}

例2:特定の従業員に対してのみ特定の選択肢を表示

特定の従業員、例えばアルバイトスタッフに対してのみ、「短時間勤務」という選択肢を表示する例です。フォームの回答者のメールアドレスを取得し、そのメールアドレスに基づいて選択肢を出し分けます。

function updateWorkOptions() {
// フォームIDを設定
const formId = "YOUR_FORM_ID";
const form = FormApp.openById(formId);
// 質問項目IDを設定
const item_id = "YOUR_ITEM_ID";
const item = form.getItemById(item_id).asMultipleChoiceItem();
// 回答者のメールアドレスを取得(回答が送信された際に実行されるトリガーが必要)
const email = Session.getActiveUser().getEmail();

// アルバイトスタッフのメールアドレスリスト
const partTimeEmails = ["parttime1@example.com", "parttime2@example.com"];

if (partTimeEmails.includes(email)) {
// アルバイトスタッフの場合、「短時間勤務」の選択肢を追加
item.setChoices([
item.createChoice("通常勤務"),
item.createChoice("短時間勤務"),
item.createChoice("午前休"),
item.createChoice("午後休")
]);
item.setTitle("勤務時間を選択してください(アルバイト用)。");
} else {
// 正社員の場合、通常の選択肢を設定
item.setChoices([
item.createChoice("通常勤務"),
item.createChoice("午前休"),
item.createChoice("午後休")
]);
item.setTitle("勤務時間を選択してください(正社員用)。");
}
}

例3:残業申請理由の動的な変更

残業時間に応じて、残業申請理由の質問内容を動的に変更する例です。例えば、2時間以上の残業の場合、より詳細な理由を求めるようにします。

function updateOvertimeReason() {
// フォームIDを設定
const formId = "YOUR_FORM_ID";
const form = FormApp.openById(formId);
// 残業時間と残業理由の質問項目IDを設定
const overtimeHoursItemId = "YOUR_OVERTIME_HOURS_ITEM_ID";
const reasonItemId = "YOUR_REASON_ITEM_ID";
const overtimeHoursItem = form.getItemById(overtimeHoursItemId).asNumberItem();
const reasonItem = form.getItemById(reasonItemId).asParagraphTextItem();

//回答から残業時間を取得(回答が送信された際に実行されるトリガーが必要)
//ここでは回答から残業時間を取得する処理を記述する必要があります。
//const overtimeHours = 回答から取得した残業時間;
const overtimeHours = 3; //仮に残業時間を3時間とする
if (overtimeHours >= 2) {
// 2時間以上の残業の場合、詳細な理由を求める
reasonItem.setTitle("残業理由(詳細)を具体的に記述してください。");
} else {
// 2時間未満の残業の場合、簡潔な理由を求める
reasonItem.setTitle("残業理由を簡潔に記述してください。");
}
}

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

  • フォームが正しく更新されない: フォームIDや質問項目IDが正しいか確認してください。また、スクリプトの実行権限が正しく設定されているか確認してください。
  • 選択肢が意図通りに表示されない: setChoicesに渡す選択肢の配列が正しいか確認してください。
  • スクリプトがタイムアウトする: 処理するデータ量が多い場合、スクリプトがタイムアウトすることがあります。その場合は、処理を分割したり、トリガーの設定を見直したりすることを検討してください。

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

  • スプレッドシートとの連携: 従業員情報や祝日情報をスプレッドシートに保存し、GASから参照することで、より高度な勤怠管理システムを構築できます。
  • チャットツールとの連携: 勤怠データが送信された際に、チャットツールに通知を送信することで、リアルタイムな状況把握が可能になります。
  • 承認フローの組み込み: 残業申請や休暇申請に承認フローを組み込むことで、より厳密な勤怠管理を実現できます。

まとめ

GASのMultipleChoiceItem.setTitle関数を活用することで、勤怠管理フォームをより柔軟かつ効率的に運用できます。本記事で紹介した例を参考に、ぜひご自身の業務に合わせたカスタマイズをしてみてください。

PR

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

CodeCampで理想の働き方を実現しよう