中級者向け実践:一般企業でのGASによる夏季業務効率化 – スプレッドシートとGmail連携による休暇申請・承認システム(中規模企業向け)

中級者向け実践:一般企業でのGASによる夏季業務効率化 – スプレッドシートとGmail連携による休暇申請・承認システム(中規模企業向け)

本記事では、中規模企業における夏季の業務効率化を目的とした、Google Apps Script(GAS)を活用した休暇申請・承認システムの構築について解説します。特に、スプレッドシートとGmailを連携させることで、申請から承認までのプロセスを自動化し、担当者の負担を軽減します。対象レベルは中級者で、基本的なGASの知識があることを前提とします。

休暇申請・承認システムの概要

本システムは、従業員がスプレッドシート上で休暇申請を行い、承認者がGmailで申請内容を確認し、承認・却下を行うという流れを自動化します。申請状況はスプレッドシートで一元管理され、承認結果は申請者に自動で通知されます。

システムの主な機能

  • 休暇申請フォーム(スプレッドシート)
  • 申請内容の自動メール送信(Gmail)
  • 承認・却下機能(Gmail)
  • 申請状況の一元管理(スプレッドシート)
  • 承認結果の自動通知(Gmail)

スプレッドシートの準備

まず、休暇申請データを保存するためのスプレッドシートを作成します。以下の項目を含むようにしてください。

  • 申請日
  • 社員ID
  • 氏名
  • 所属部署
  • 休暇開始日
  • 休暇終了日
  • 休暇日数
  • 申請理由
  • 承認者
  • 承認状況(未承認、承認、却下)
  • 承認日

GASコード例

1. 休暇申請フォームの作成とデータ登録

スプレッドシートに休暇申請フォームを作成し、GASでデータを登録するスクリプトです。

function onFormSubmit(e) {
// フォーム送信時のイベントオブジェクトからデータを取得
const values = e.values;

// スプレッドシートを開く
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("休暇申請");

// 最終行にデータを追記
sheet.appendRow(values);

// 承認者へメールを送信する関数を呼び出す
sendApprovalRequest(values);
}

解説:onFormSubmit(e) は、スプレッドシートのフォームが送信された際に自動的に実行される関数です。e.values でフォームの入力値を取得し、スプレッドシートの最終行に追記します。その後、承認者へメールを送信する sendApprovalRequest(values) 関数を呼び出します。

2. 承認者へのメール送信

休暇申請があった際に、承認者へメールを送信するスクリプトです。

function sendApprovalRequest(values) {
// 承認者のメールアドレス
const approverEmail = "approver@example.com";

// メールの件名
const subject = "【休暇申請】" + values[2] + "さんからの申請";

// メールの本文
let body = "以下の内容で休暇申請がありました。

";
body += "申請日:" + values[0] + "
";
body += "氏名:" + values[2] + "
";
body += "休暇開始日:" + values[5] + "
";
body += "休暇終了日:" + values[6] + "
";
body += "申請理由:" + values[8] + "

";
body += "承認する場合は、以下のURLをクリックしてください。
";
//承認・却下処理を行うWebアプリケーションのURLを記載
body += "承認URL: https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/exec?action=approve&row=" + (SpreadsheetApp.getActiveSpreadsheet().getSheetByName("休暇申請").getLastRow()) + "\n";
body += "却下URL: https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/exec?action=reject&row=" + (SpreadsheetApp.getActiveSpreadsheet().getSheetByName("休暇申請").getLastRow());

// メールを送信
MailApp.sendEmail({
to: approverEmail,
subject: subject,
body: body
});
}

解説:sendApprovalRequest(values) 関数は、MailApp.sendEmail() を使用して、承認者へメールを送信します。メール本文には、申請内容と承認・却下を行うためのWebアプリケーションのURLを含めます。Webアプリケーションについては後述します。approver@example.com は承認者のメールアドレスに置き換えてください。また、承認URLと却下URLのxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxは、実際にデプロイしたWebアプリケーションのURLに置き換えてください。

3. 承認・却下処理を行うWebアプリケーション

承認者がメール内のURLをクリックした際に、承認・却下処理を行うWebアプリケーションのスクリプトです。

function doGet(e) {
const action = e.parameter.action;
const row = e.parameter.row;

const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("休暇申請");

if (action === "approve") {
// 承認処理
sheet.getRange("J" + row).setValue("承認"); // J列は承認状況
sheet.getRange("L" + row).setValue(new Date()); // L列は承認日
sendApprovalResult(row, "承認");
} else if (action === "reject") {
// 却下処理
sheet.getRange("J" + row).setValue("却下");
sheet.getRange("L" + row).setValue(new Date());
sendApprovalResult(row, "却下");
}

return HtmlService.createHtmlOutput("処理が完了しました。");
}

解説:doGet(e) 関数は、WebアプリケーションにGETリクエストが送信された際に実行される関数です。e.parameter.action で承認または却下のどちらが選択されたかを取得し、e.parameter.row で処理対象の行番号を取得します。スプレッドシートの該当行の承認状況と承認日を更新し、申請者へ結果を通知する sendApprovalResult(row, status) 関数を呼び出します。Webアプリケーションとしてデプロイする際に、URLを発行し、sendApprovalRequest 関数内のURLを置き換えてください。

4. 承認結果の自動通知

承認・却下の結果を申請者へメールで通知するスクリプトです。

function sendApprovalResult(row, status) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("休暇申請");
const applicantEmail = sheet.getRange("B" + row).getValue() + "@example.com"; // B列は社員ID
const applicantName = sheet.getRange("C" + row).getValue(); // C列は氏名

const subject = "【休暇申請結果】" + applicantName + "さんの申請";
const body = "休暇申請の結果は「" + status + "」となりました。";

MailApp.sendEmail({
to: applicantEmail,
subject: subject,
body: body
});
}

解説:sendApprovalResult(row, status) 関数は、MailApp.sendEmail() を使用して、申請者へメールを送信します。メール本文には、承認または却下の結果を記載します。B列の社員IDに @example.com を付与してメールアドレスを生成していますが、実際のメールアドレスに合わせて修正してください。

応用例と活用シーン

  • 勤怠管理システムとの連携:休暇申請データを勤怠管理システムに連携させることで、より正確な勤怠管理が可能になります。
  • 承認フローの複雑化:承認者を複数設定したり、条件によって承認ルートを変更したりすることで、より柔軟な承認フローを構築できます。
  • Slackなどのチャットツールとの連携:休暇申請や承認状況をSlackなどのチャットツールに通知することで、リアルタイムな情報共有が可能になります。

まとめ

本記事では、GASを活用した休暇申請・承認システムの構築について解説しました。スプレッドシートとGmailを連携させることで、申請から承認までのプロセスを自動化し、夏季の業務効率化に貢献できます。ぜひ、本記事を参考に、自社のニーズに合わせたシステムを構築してみてください。