勤怠管理ツールをリモートワーク対応して人事部の負担を減らした話

f:id:sumzap_engineer_blog:20201001111037p:plain

目次

はじめに

サムザップでUnityエンジニアをやっている2020年新卒の飯田です。

新型コロナウイルスの脅威により、サムザップでは4月からリモートワークが始まりました。 それに合わせてサムザップで運用していた勤怠管理ツールをリモートワークに対応するなどの改修が必要になり、改修担当者が募集されていました。

自分は現在Unityエンジニアとして働いていますが、ゲーム開発に関わる様々な側面に興味があり、いずれサーバ側にも挑戦したいと考えていました。そのため、この機会は渡りに船であり、手を挙げたところ、改修担当をさせていただけることとなりました。 今回、この勤怠管理ツールの実装や改修内容などについてまとめましたのでここに記していこうと思います。

背景

サムザップでは以前から"じんナビくん"という社員の勤怠状況管理と通知を行うシステムを運用していました。 "じんナビくん"は前営業日に条件に当てはまる社員に欠勤理由を問うSlackメッセージが飛び、人事側の管理スプレッドシートにその回答と共に欠勤情報が自動記入されるシステムです。

条件は以下の通りです。

  • 前営業日の休暇を申請していない
  • 前営業日のオフィスに出社したデータが存在しない

ここで、今年初頭からの新型コロナウイルスの脅威により、サムザップでも4月からリモートワークが始まりました。 しかし、このシステムの「出社したデータ」ではオフィスへの入退室しか考慮されておらず、リモートワークのオンライン出勤簿には対応出来ていないなど、問題がありました。

そこで、この問題を解決するために勤怠管理ツールを改修することとなりました。 また、今回通知文言を修正するなど様々な改修が入ったため、この勤怠管理ツールは今回のアップデートをもって"おやすみかなちゃん"と名前を変えることとなりました。 (名前の由来は「昨日はおやすみかな?」と聞いてくれるからだそうです。)

構成

今回改修する勤怠管理ツール、"じんナビくん"は以下より構成されます。

f:id:sumzap_engineer_blog:20201014112100p:plain
構成図

  • GCP上のストレージ
  • PHPサーバ
  • 管理用Googleスプレッドシート
  • Google App Script (以下、GAS)
  • Slack App

まず、上記構成要素の各役割を説明します。

GCP上のストレージ

人事システム側から以下の情報が毎朝9時ごろ更新されます。

  • 在籍社員情報
  • オフィスへの入退室情報
  • 休暇申請情報

PHPサーバ

GCP上のストレージの情報より、以下の情報を算出します。

  • 特定の日時における休暇申請なしで欠勤している社員一覧

管理用Googleスプレッドシート

以下二つの情報を保持します。

  • "じんナビくん"で管理したい社員一覧
    • 各社員情報にはSlack App(後述)のためのSlackメンバーIDを記入しておく必要があります。
  • 各日に欠勤した社員一覧
    • こちらはGAS(後述)から自動記入されます。

GAS

上記スプレッドシートに紐づけているGASから、毎日12時~13時ごろに以下の処理を行います。

  1. PHPサーバにアクセスし、休暇申請なしで欠勤している社員一覧を取得
  2. スプレッドシートの該当日の欄にその社員一覧を記入
  3. Slack Appを用いて欠勤している各社員へ通知

Slack App

GASからの指示に従い、DMにて、特定の社員に以下ような通知を送ります。

f:id:sumzap_engineer_blog:20200929143947p:plain
Slack通知

システム改修

上記の"じんナビくん"を"おやすみかなちゃん"へアップデートするにあたって以下赤枠箇所の改修を行いました。

f:id:sumzap_engineer_blog:20201014112116p:plain
改修箇所

リモートワーク対応

GCPのストレージに

  • 在籍社員情報
  • オフィスへの入退室情報
  • 休暇申請情報

に加え、

  • オンライン勤怠簿のデータ

がアップロードされるようになりました。

オンライン勤怠簿のデータを加味して、PHPプログラムを改修し、通知を送る条件を以下のように変更する対応を行いました。

  • 前営業日の休暇を申請していない
  • 前営業日のオフィスに出社したデータが存在しない
  • 前営業日のオンライン勤怠簿にデータが存在しない

メンテナンスフリー対応

これまでの"じんナビくん"では、国民の休日は毎年エンジニアが入力しなければならない、災害のなどの突発的な休みに対応できないなど、運用上の問題がありました。

そこで、"おやすみかなちゃん"にアップデートするにあたり、以下の変更を行いました。

  • Google カレンダーから国民の休日を取得する
  • 一定の閾値を用意し、欠勤している社員の割合がその閾値を超えた場合、その日に関しては勤怠管理と通知を停止する

SGE内での運用

サムザップはサイバーエージェントグループスマートフォンゲーム部門「SGE」の一社です。 こちらの勤怠管理ツールはサムザップだけではなく、SGE各社で運用しています。 また、SGEでは、Slack Enterprise Gridを利用しており、各社のワークスペースとSGE全体のワークスペース(SGE Slack)を使い分けています。

今回の改修に伴い、以下二つの変更を行いました。

  • Slack Appの統一
    • これまで運用していた"じんナビくん"のSlack Appは、各社のSlackワークスペースごとに一つずつ存在していたため、管理が難しいという問題がありました。そこで、これまでの"じんナビくん"のSlack Appを廃止し、SGE SlackのSlack App一つに統一することで管理を容易にしました。
  • 文言の変更
    • 今回"じんナビくん"を"おやすみかなちゃん"へアップデートするのに伴い、SGE内各社人事の方へ文言改修の希望調査を行いました。その際、各社の文言などをなるべく共通化することで管理の簡略化をはかりました。

結果

サイバーエージェントグループ全体では、リモデイという週の特定の曜日をリモートワークとする取り組みを実施しています。 その上で、グループ全体でオンライン勤怠簿を付け忘れてしまう社員もおり、人事の負担が増加するなどの問題が発生していました。

今回、SGE内に関しては"じんナビくん"もとい"おやすみかなちゃん"を導入することで、勤怠情報付け忘れを社員にSlackから通知することで人事の方々の負担を減らすことに成功しました。 実際、サイバーエージェントグループ内他事業部と比較してかなり下がっているという話をサイバーエージェント人事統括の方からいただけました。

まとめ

SGE内の勤怠管理ツールに対し、オンライン勤怠簿への対応など、リモートワーク対応を伴う改修を行いました。 また、その改修を行う上で、なるべく運用・管理がエンジニアの手から離れるように意識しました。

しかし、現状では送信する文言の変更など、管理・運用面でエンジニアの手が必要となる箇所が複数あります。 そこで、スプレッドシートなどを介して人事側から文言変更を行える仕組みを作ることなどが今後の課題として挙げられます。

所感

最初述べたように、自分はUnityエンジニアではありますが、今回手を挙げたことでサーバ側に挑戦できました。サイバーエージェントグループ全体で言えることですが、やはり挑戦を推奨・応援する環境があることを実感しました。

また、今回のシステムはサムザップだけでなくSGE内全体に影響するものであったため、その分責任を感じると共に大きなやりがいを感じました。そして、既存システムの改修とはいえ、システムのほとんどに手をつけたため、それが正常に動き、実際に人事の方に喜んでいただけた達成感は大きかったです。

最後に、今回この改修を進めるにあたって、様々な人から挑戦の後押しをしていただけたり助けていただけたりしました。本当に感謝しています。 まだ少し課題は残っていますが、スケジュールを立てて進めていきたいと思います。