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

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

本記事では、中規模企業における夏季休暇申請・承認ワークフローをGAS(Google Apps Script)で自動化・効率化する方法を解説します。対象レベルは中級者で、GASの基本的な知識があることを前提とします。夏季休暇期間中の業務効率化を目指し、申請から承認までの流れを自動化することで、人事担当者や従業員の負担を軽減します。

1. はじめに

夏季休暇は従業員のリフレッシュのために重要な制度ですが、申請・承認プロセスが煩雑になりがちです。GASを活用することで、これらのプロセスを自動化し、効率的な休暇管理を実現できます。本記事では、Googleフォーム、スプレッドシート、Gmailを連携させたワークフローを構築します。

2. システム概要

本システムは以下の要素で構成されます。

  • Googleフォーム: 休暇申請フォーム
  • Googleスプレッドシート: 申請データ保管、承認状況管理
  • GAS(Google Apps Script): 自動処理ロジック
  • Gmail: 申請通知、承認通知

3. Googleフォームの作成

まず、休暇申請に必要な項目を設定したGoogleフォームを作成します。必要な項目は以下の通りです。

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

フォームの回答先は、新しいスプレッドシートに設定します。

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

Googleフォームの回答が自動的に入力されるスプレッドシートを準備します。以下の列を追加します。

  • 申請日時
  • 承認状況(未承認、承認済、却下)
  • 承認者
  • 承認日時
  • 備考

5. GASコードの実装

以下のGASコードをスプレッドシートに紐付けて実装します。

5.1. 申請時トリガーの設定

Googleフォームの回答が送信された際に、GASが自動的に実行されるようにトリガーを設定します。「編集」→「現在のプロジェクトのトリガー」から設定できます。

5.2. コード例

// スプレッドシートのIDとシート名を設定
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "シート1";

// 申請通知メールの送信先アドレス
const approverEmail = "approver@example.com";

function onFormSubmit(e) {
// スプレッドシートを取得
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);

// フォームの回答を取得
const responses = e.response.getItemResponses();
const name = responses[0].getResponse();
const department = responses[1].getResponse();
const startDate = responses[2].getResponse();
const endDate = responses[3].getResponse();
const reason = responses[4].getResponse();

// 最終行にデータを書き込む
const lastRow = sheet.getLastRow() + 1;
sheet.getRange(lastRow, 1).setValue(new Date()); // 申請日時
sheet.getRange(lastRow, 2).setValue(name);
sheet.getRange(lastRow, 3).setValue(department);
sheet.getRange(lastRow, 4).setValue(startDate);
sheet.getRange(lastRow, 5).setValue(endDate);
sheet.getRange(lastRow, 6).setValue(reason);
sheet.getRange(lastRow, 7).setValue("未承認"); // 承認状況

// 承認者にメールを送信
const subject = "夏季休暇申請のお知らせ";
const body = `以下の休暇申請がありました。

氏名: ${name}
所属部署: ${department}
休暇開始日: ${startDate}
休暇終了日: ${endDate}
休暇理由: ${reason}

スプレッドシートで承認/却下してください: https://docs.google.com/spreadsheets/d/${spreadsheetId}`;

MailApp.sendEmail(approverEmail, subject, body);
}

解説:

  • spreadsheetId:スプレッドシートのIDを設定します。
  • sheetName:シート名を指定します。
  • approverEmail:承認者のメールアドレスを設定します。
  • onFormSubmit(e):フォーム送信時に実行される関数です。
  • e.response.getItemResponses():フォームの回答を取得します。
  • MailApp.sendEmail():承認者にメールを送信します。

5.3. 承認・却下処理の実装

スプレッドシート上で承認・却下を管理するために、承認状況に応じて処理を行うコードを追加します。スプレッドシートの編集時トリガーを利用します。

function onSpreadsheetEdit(e) {
// 編集されたセルを取得
const range = e.range;
const sheet = range.getSheet();

// スプレッドシートのIDとシート名を設定
const spreadsheetId = "YOUR_SPREADSHEET_ID";
const sheetName = "シート1";

// 承認状況列(7列目)が編集された場合のみ処理を実行
if (sheet.getName() === sheetName && range.getColumn() === 7) {
const row = range.getRow();
const status = sheet.getRange(row, 7).getValue();

// 申請者のメールアドレスを取得(仮に3列目をメールアドレスとする)
const applicantEmail = sheet.getRange(row, 3).getValue();
const applicantName = sheet.getRange(row, 2).getValue();
const startDate = sheet.getRange(row, 4).getValue();
const endDate = sheet.getRange(row, 5).getValue();

let subject = "";
let body = "";

if (status === "承認済") {
// 承認済の場合
subject = "夏季休暇申請が承認されました";
body = `${applicantName}さんの夏季休暇申請(${startDate}〜${endDate})が承認されました。`;
sheet.getRange(row, 8).setValue(Session.getActiveUser().getEmail()); //承認者
sheet.getRange(row, 9).setValue(new Date()); //承認日時

} else if (status === "却下") {
// 却下の場合
subject = "夏季休暇申請が却下されました";
body = `${applicantName}さんの夏季休暇申請(${startDate}〜${endDate})が却下されました。`;
sheet.getRange(row, 8).setValue(Session.getActiveUser().getEmail()); //承認者
sheet.getRange(row, 9).setValue(new Date()); //承認日時

}

if (subject !== "") {
// 申請者にメールを送信
MailApp.sendEmail(applicantEmail, subject, body);
}
}
}

解説:

  • onSpreadsheetEdit(e):スプレッドシートが編集された際に実行される関数です。
  • e.range:編集されたセルを取得します。
  • 承認状況列が編集された場合のみ処理を実行します。
  • 承認状況に応じて、申請者にメールを送信します。

6. 応用例と活用シーン

  • Slack連携: 申請や承認時にSlackに通知を送ることで、コミュニケーションを円滑化できます。
  • Chatwork連携: Slack同様にChatworkへの通知も可能です。
  • kintone連携: kintoneに申請データを連携することで、より高度な業務管理が実現できます。

7. まとめ

本記事では、GASを活用して夏季休暇申請・承認ワークフローを自動化する方法を解説しました。GASの活用により、人事担当者や従業員の負担を軽減し、効率的な休暇管理を実現できます。ぜひ本記事を参考に、自社の業務効率化に取り組んでみてください。