中級者向け実践:一般企業でのGAS自動化による夏季休暇申請・承認ワークフロー(中規模企業向け)

中級者向け実践:一般企業でのGAS自動化による夏季休暇申請・承認ワークフロー(中規模企業向け)

本記事では、一般企業の中規模組織(11-100人)を対象に、Google Apps Script(GAS)を活用した夏季休暇申請・承認ワークフローの自動化について解説します。中級者向けに、実際のコード例を交えながら、GASの具体的な実装方法を詳しく説明します。夏季休暇の申請プロセスを効率化し、人事・労務担当者の負担を軽減することを目指します。

夏季休暇申請・承認ワークフローの課題

従来の手作業による休暇申請・承認プロセスには、以下のような課題があります。

  • 申請書の印刷・配布・回収の手間
  • 承認状況の確認に時間がかかる
  • 申請内容の入力ミスや紛失のリスク
  • 人事・労務担当者の集計作業の負担

これらの課題を解決するために、GASを用いた自動化ワークフローを構築します。

GASによる自動化ワークフローの概要

本ワークフローでは、以下の要素をGASで自動化します。

  • 申請フォームの作成(Googleフォーム)
  • 申請データのスプレッドシートへの自動記録
  • 承認者への自動メール通知
  • 承認ステータスの自動更新
  • 休暇取得状況の自動集計

実装手順

1. Googleフォームの作成

夏季休暇申請用のGoogleフォームを作成します。フォームには、以下の項目を含めます。

  • 氏名
  • 所属部署
  • 申請日
  • 休暇開始日
  • 休暇終了日
  • 休暇理由

2. スプレッドシートの準備

フォームの回答を記録するためのスプレッドシートを作成します。フォームとスプレッドシートを連携させ、回答が自動的に記録されるように設定します。

3. GASコードの実装

以下のGASコードを記述し、トリガーを設定します。

// スプレッドシートのIDとシート名を設定
const ssId = "YOUR_SPREADSHEET_ID";
const sheetName = "フォームの回答 1";

// 承認者メールアドレスを設定
const approverEmail = "approver@example.com";

// フォーム送信時のトリガーで実行される関数
function onFormSubmit(e) {
// スプレッドシートを取得
const ss = SpreadsheetApp.openById(ssId);
const sheet = ss.getSheetByName(sheetName);

// 最終行の行番号を取得
const lastRow = sheet.getLastRow();

// フォームの回答内容を取得
const timestamp = e.values[0];
const name = e.values[1];
const department = e.values[2];
const startDate = e.values[3];
const endDate = e.values[4];
const reason = e.values[5];

// 承認状況を「申請中」に設定
sheet.getRange(lastRow + 1, 7).setValue("申請中");

// 承認依頼メールを送信
sendApprovalRequestEmail(name, department, startDate, endDate, reason, approverEmail, lastRow + 1);
}

// 承認依頼メールを送信する関数
function sendApprovalRequestEmail(name, department, startDate, endDate, reason, approverEmail, row) {
const subject = "【夏季休暇申請】" + name + "さん";
const body = name + "さんから夏季休暇の申請がありました。

所属部署: " + department + "
休暇開始日: " + startDate + "
休暇終了日: " + endDate + "
休暇理由: " + reason + "

スプレッドシートで内容を確認し、承認または却下してください。
スプレッドシート

(このメールは自動送信されています)";

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

// スプレッドシートの編集時トリガーで実行される関数
function onEdit(e) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const editedCell = sheet.getActiveCell();

// 承認状況が変更された場合
if (editedCell.getColumn() === 7) {
const row = editedCell.getRow();
const status = editedCell.getValue();
const name = sheet.getRange(row, 2).getValue();
const email = sheet.getRange(row, 8).getValue(); // メールアドレスの列番号に合わせて変更

// 承認または却下メールを送信
sendApprovalResultEmail(name, status, email);
}
}

// 承認結果メールを送信する関数
function sendApprovalResultEmail(name, status, email) {
const subject = "【夏季休暇申請】" + name + "さんの申請結果";
let body = name + "さんの夏季休暇申請は";

if (status === "承認") {
body += "承認されました。";
} else if (status === "却下") {
body += "却下されました。";
} else {
return; // 承認/却下 以外のステータスの場合は何もしない
}

MailApp.sendEmail({
to: email,
subject: subject,
body: body + "\n\n(このメールは自動送信されています)",
});
}

コードのポイント:

  • onFormSubmit(e)関数は、フォーム送信時にトリガーされます。
  • sendApprovalRequestEmail()関数は、承認者へメールを送信します。
  • onEdit(e)関数は、スプレッドシートの編集時にトリガーされます。
  • sendApprovalResultEmail()関数は、申請者へ承認結果メールを送信します。
  • YOUR_SPREADSHEET_IDapprover@example.comは、実際のスプレッドシートIDと承認者のメールアドレスに置き換えてください。

4. トリガーの設定

GASエディタから、以下のトリガーを設定します。

  • onFormSubmit関数:フォーム送信時
  • onEdit関数:スプレッドシート編集時

応用例と活用シーン

  • Slack連携:承認状況をSlackに通知する。
  • Chatwork連携:承認状況をChatworkに通知する。
  • 部署ごとの承認フロー:部署ごとに異なる承認者を設定する。
  • 休暇残日数管理:休暇残日数を自動で計算し、申請時に表示する。

まとめ

GASを活用することで、夏季休暇申請・承認ワークフローを効率化し、人事・労務担当者の負担を軽減できます。本記事で紹介したコード例を参考に、自社の環境に合わせてカスタマイズしてください。