2021年3月2日

社内の出勤状況管理について

当ブログをご覧いただきありがとうございます。

今回は技術的な内容ということで、社内で運用している出勤状況管理について、その内部的な仕組みを書いていきます。


出勤状況管理とは
出勤状況管理といってもそこまで大掛かりなものではなく、該当の従業員が、会社に出社するのか、リモート作業なのか、休みなのか、を、ほかの従業員に周知するためだけのものとなります。


背景
新型コロナウイルスの影響でリモートワークを本格的に導入したことにより、誰がリモートワークをしているのか、誰が出社しているのか、が非常にわかりづらい状況となってしまったため、Slackに翌日出社する従業員を周知する方針としました。


使用サービス
弊社内で作成した出勤状況管理ツールは、主に以下のサービスを使用して構築しています。

・Googleスプレッドシート
  ⇒Excelのオンライン版みたいなもの
・Google Apps Script
  ⇒ExcelでいうところのVBAみたいなもの
・Slack
  ⇒業務チャットツール


主な仕組み
主な流れは以下の通りです。

1.従業員はひと月分の出社予定をスプレッドシートに記入
2.毎日定刻にGoogle Apps Scriptを実行して、Slackに通知を送る
3.Slack側では、翌日出社する従業員に対してメンションが送られる

これだけだとイメージが難しいと思いますので、もうすこし細かく説明していきます。


1.従業員はひと月分の出社予定をスプレッドシートに記入

以下のように、スプレッドシート上にひと月分の出社予定を入力してもらいます。スプレッドシートを採用している理由は、管理が手軽なのと、Excelを触ったことがある人なら使い方を説明する必要がほぼないのが主な理由です。

 

出勤状況管理_6


2.毎日定刻にGoogle Apps Scriptを実行して、Slackに通知を送る

Google Apps Scriptを使用してSlack側でメンションを送るには、Slackアカウントに紐づいているメンバーIDを、スクリプト内で指定する必要があります。
※Slackプロフィール欄にある、下記画像の赤枠部分

出勤状況管理_1

以下のように、スプレッドシート上にアカウントごとのメンバーIDを用意しておけば、スクリプト内で従業員名をもとにVLOOKUPみたいな処理を行うことで、従業員のメンバーIDを取得するようにできます。

出勤状況管理_7

 

例えば、以下のような形式で文字列を生成して通知を送ることで、対象のSlackアカウントに対してメンションを送ることができます。
例)<@{メンバーID}>{名前}さん

Slackへの通知に関しては、Slackの管理画面から通知用のアプリケーションを作成し、WebhookURLを発行したうえで、発行したURLに対してリクエスト処理を実行することで、通知が送られるようになります。

アプリケーションの作成は、管理画面のカスタムインテグレーションから作成できます。

出勤状況管理_2

現在は最新のAPIが公開されており、こちらの使用を推奨しているようなのですが、すべて英語の状態なので、理解するのに少々時間がかかります… 

出勤状況管理_3

通知処理の実行に関しては、Google Apps Scriptのトリガー機能を使用していますが、毎日定刻に通知をするために、以下のようにトリガーを設定しています。

◆設定するトリガー
1.”通知処理を実行するトリガー”を、18:00に設定するトリガー
 ⇒こちらは定刻である必要はないので毎朝11時頃に実行
2.通知処理を実行するトリガー
 ⇒1の処理により、毎日18:00に実行

弊社内ではほかにもGoogle Apps Scriptを使用していろんな通知をSlackに送っていますが、基本的にはトリガーを設定するトリガーのみを設定しており、そのほかの通知処理に関しては自動で設定と削除ができるような仕組みとしています。

出勤状況管理_5

ここまで来たら、あとは以下のような流れとなるように、スクリプトを作成していきます。

◆処理の流れ
1.翌日の出社状況を取得
2.出社状況が「出社」「休み」となっているデータのみにフィルタリング
3.従業員名をキーとして、スプシに用意したメンバーIDを取得
4.通知メッセージを生成して、WebhookURLに対して送信処理を実行


3.Slack側では、翌日出社する従業員に対してメンションが送られる

スクリプト内で様々な処理をして通知を送った結果、Slack側ではメンション付きで通知が送られるようになります。これで翌日誰が出社するのかが一目瞭然です。

出勤状況管理_4

 


最後に
スクリプトの作り方次第にはなりますが、基本的なメンテナンスはスプレッドシートの更新のみなので、そこそこのツールを使用するよりは非常に楽ですし、好きなようにカスタマイズもできるので、とても役立っています。

また、Google Apps ScriptはJavaScriptベースとなっているため、JavaScriptを多少触ったことがある人であれば、扱いやすいところも利点です。

スプレッドシートは誰でも手軽にできる上に、様々な連携もできるので、皆さんもいろいろな場面で試してみてください。

最近の投稿

  • お誕生日紹介
    2021/10/11

    お誕生日紹介

    こんにちは! 最近では気温も落ち着き、過ごしやすい季節になってまいりました。 ワクチンの接種も広まってきており、筆者も接種日が迫っており少しビクビクとしておりま…

  • AWS Organization下アカウント課金情報をSlackに投稿する
    2021/9/16

    AWS Organization下アカウント課金情報をSlackに投稿する

      こんにちは! 「技術記事書いて!」と急に無茶振りされたシステム開発部エンジニアのSと申します。 何を書こうか迷いましたが、最近社内のAWS管理を行っているの…

  • 音楽と集中力
    2021/8/6

    音楽と集中力

    こんにちは!暑い日々が続きますが、皆様いかがお過ごしでしょうか? リモートワークが続いている方も多いと思いますので、今回は音楽と集中力の関係についてご紹介させて…

  • 第1回テクニカルトレーニングを受けて
    2021/7/5

    第1回テクニカルトレーニングを受けて

    当ブログをご覧いただきありがとうございます! 今回の内容は、先月実施された第1回テクニカルトレーニングを受講したときの内容を書きたいと思います。 プログラムを組…

  • 6月特有の不調とセルフケア
    2021/6/4

    6月特有の不調とセルフケア

    こんにちは! 梅雨になり、天気が崩れやすい季節となりましたがみなさまいかがお過ごしでしょうか。 新型コロナウイルス感染症の影響もあり、リモートワークとなり自宅作…

月別アーカイブ