見出し画像

人事担当者がGAS(Google Apps Script)を使って、日々の業務を自動化した話:お弁当の集計システム編

こんにちは。子育て奮闘ビール好きおじさんです。

現在、私は採用や教育など人事関連の業務に広く携わってます。教育を担当していても、自分の子供に教えることが難しいこと難しいこと…。日々奮闘中です。ちなみに好きなビールは、糖質を70%カットした某メーカーの緑のパッケージのものです。

さて今回、「人事担当者がなぜNAVITIME_Techのnote?」と思われるかもしれませんが、私は元々エンジニアでNAVITIMEのandroidアプリ開発に携わっていました。
異動で5年前より人事を担当しています。人事の業務をやっている中で「これはシステムを作れば、人手をかけず自動化できるなぁ」と思うことが多々あり様々なカイゼン活動に取り組んでいます。今回はそのカイゼン活動で作ったシステムを一つご紹介します。

GASを使った、お弁当の集計システム

ナビタイムジャパンでは、毎日、日替わりでお弁当業者さんがお弁当を販売しています。社員は前日~前々日までに予約をすればお弁当の購入ができます。お弁当代は給与から差し引かれるシステムです。(ちなみにお弁当代は、福利厚生で半額会社が負担します!

そのお弁当の購入システムを、GAS(Google Apps Script)で構築した話を紹介します。GASはJavascriptが元になっているため、比較的簡単にコーディングができます。

お弁当予約システムの仕様です。

note(小嶋版)_参考図

①1週間分のメニューをWebサイトで表示(曜日毎に複数のメニューあり)
②食べたいお弁当があれば、Googleフォームで事前予約
 ---スプレットシートの【A:予約リスト】に予約者と予約メニューが書き込まれる
③当日、急遽お弁当購入をやめる人は、Googleフォームで交換する相手を申請
 ---スプレットシートの【B:交換リスト】に予約者と交換者が書き込まれる
④お弁当を予約した人に、slackで予約したお弁当を通知
⑤お弁当を受け取る際にはカードリーダーにカードキーをかざす
 ---スプレットシートの【C:購入者リスト】購入者と購入メニューが書き込まれる。
⑥【A:予約リスト】、【B:交換リスト】、【C:購入者リスト】から突き合わせ最終的な購入数と購入者を確定させる

すべて会社にあるシステムで構築しているため、追加費用はありません。

今回、私が作成したところは、の部分です。
以前は、突き合わせ処理()に手動のため1日30分ほどかかっていました…。
突き合わせ処理自体も時間がかかるのですが、予約したけど受け取りに来ない人がいると、その処理がさらにかかってしまうという問題がありました。

そのため、の予約通知で受け取り忘れを減らし、の突き合わせ処理で手動でやっていた処理をGASで自動化しました。

お弁当予約Slackbot

のお弁当予約のslackbotは、【A:予約リスト】と全社員のslackアカウントリストと、slack通知のAPIの使い方がわかれば、エンジニアの方でしたら想像がつくのではないでしょうか。
予約リストの「名前」から、「Slackのアカウント」を引っ張ってきて、「SlackのAPI」を使って対象者に予約したお弁当を通知するという仕様です。

スクリプトができたら、トリガーの設定です。
毎日、特定の時間になったらそのスクリプトを実行するように設定することができます。お弁当を予約した方は、slackbotに以下のようなメッセージが飛んできます。

画像3

管理者側にも以下のような通知がきます。

画像2

たまにアカウントの設定不備で送信エラーが発生したので
正常送信と送信エラー件数を表示しています。

お弁当突き合わせスクリプト

⑥のお弁当突き合わせスクリプトは、【A:予約リスト】、【B:交換リスト】、【C:購入者リスト】の3つのスプレットシートから、実際に業者から購入したお弁当の数と、請求する人の特定を行います。

一見、そんなに難しくないかなと思われるかもしれませんが、実際にステータスとしては、少々複雑です。

・予約して受け取った 
・予約したが受け取ってない
・予約したが、別の人に譲った(交換)
・予約しただけど別の人に譲ったが、でもその人が受け取ってない
・当日購入した(事前予約してない)

お金を支払う必要があるのは、お弁当を受け取った人(受け取る予定だった人)になります。

(本当はさらに複雑なのが「購入するためのカードキーを忘れた場合」ですが、こちらはシステム化できてないところもあるので今回の説明は割愛します。)

上記ステータスを【A;予約リスト】、【B:交換リスト】、【C:購入者リスト】のスプレットシートから、条件によって割当て、最終的には当日のお弁当が購入された総数支払いを請求する人を特定します。

これを毎日、自動的に決められた時間にスクリプトを動かして算出してます。

処理が終わると以下のようなslackが管理者に飛んできます。

画像3

「注文数」は事前予約したお弁当の数、「購入処理数」は、当日分購入した分なども含めた全購入数です。

上記の場合は、事前予約した人は全員受け取り、当日分2個分が購入されたことを意味します。この情報を持ってお弁当業者さんに確認していただいてます。また、購入者に対しては生成された日々の請求者のリストから、給与天引きします。

と、簡単にご紹介するとこのような仕組みです。まだまだ改善する余地はありますが…。

まとめ

あまり技術的に具体的なお話ができませんでしたが、スプレットシートに日々データが蓄積されるものを定期的に処理させたい場合は、GASを利用すると簡単にシステムを構築することができます。

また、GASだと、メール連携カレンダー連携Googleドライブとの連携ができるので、さらに踏み込んだこともできます。
たとえば、カレンダーと連携して、就業時間外の会議室の利用状況を通知するものも作って運用しております。

よかったら、バックオフィスに関わる方、トライしてみてはいかがでしょうか。今後は、採用管理ツールなども作っていこうと思っています!