中級者向け実践:一般企業での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_ID
とapprover@example.com
は、実際のスプレッドシートIDと承認者のメールアドレスに置き換えてください。
4. トリガーの設定
GASエディタから、以下のトリガーを設定します。
onFormSubmit
関数:フォーム送信時onEdit
関数:スプレッドシート編集時
応用例と活用シーン
- Slack連携:承認状況をSlackに通知する。
- Chatwork連携:承認状況をChatworkに通知する。
- 部署ごとの承認フロー:部署ごとに異なる承認者を設定する。
- 休暇残日数管理:休暇残日数を自動で計算し、申請時に表示する。
まとめ
GASを活用することで、夏季休暇申請・承認ワークフローを効率化し、人事・労務担当者の負担を軽減できます。本記事で紹介したコード例を参考に、自社の環境に合わせてカスタマイズしてください。