社内の出勤状況管理について
目次
当ブログをご覧いただきありがとうございます。
今回は技術的な内容ということで、社内で運用している出勤状況管理について、その内部的な仕組みを書いていきます。
出勤状況管理とは
出勤状況管理といってもそこまで大掛かりなものではなく、該当の従業員が、会社に出社するのか、リモート作業なのか、休みなのか、を、ほかの従業員に周知するためだけのものとなります。
背景
新型コロナウイルスの影響でリモートワークを本格的に導入したことにより、誰がリモートワークをしているのか、誰が出社しているのか、が非常にわかりづらい状況となってしまったため、Slackに翌日出社する従業員を周知する方針としました。
使用サービス
弊社内で作成した出勤状況管理ツールは、主に以下のサービスを使用して構築しています。
・Googleスプレッドシート
⇒Excelのオンライン版みたいなもの
・Google Apps Script
⇒ExcelでいうところのVBAみたいなもの
・Slack
⇒業務チャットツール
主な仕組み
主な流れは以下の通りです。
1.従業員はひと月分の出社予定をスプレッドシートに記入
2.毎日定刻にGoogle Apps Scriptを実行して、Slackに通知を送る
3.Slack側では、翌日出社する従業員に対してメンションが送られる
これだけだとイメージが難しいと思いますので、もうすこし細かく説明していきます。
1.従業員はひと月分の出社予定をスプレッドシートに記入
以下のように、スプレッドシート上にひと月分の出社予定を入力してもらいます。スプレッドシートを採用している理由は、管理が手軽なのと、Excelを触ったことがある人なら使い方を説明する必要がほぼないのが主な理由です。
2.毎日定刻にGoogle Apps Scriptを実行して、Slackに通知を送る
Google Apps Scriptを使用してSlack側でメンションを送るには、Slackアカウントに紐づいているメンバーIDを、スクリプト内で指定する必要があります。
※Slackプロフィール欄にある、下記画像の赤枠部分
以下のように、スプレッドシート上にアカウントごとのメンバーIDを用意しておけば、スクリプト内で従業員名をもとにVLOOKUP
みたいな処理を行うことで、従業員のメンバーIDを取得するようにできます。
例えば、以下のような形式で文字列を生成して通知を送ることで、対象のSlackアカウントに対してメンションを送ることができます。
例)<@{メンバーID}>{名前}さん
Slackへの通知に関しては、Slackの管理画面から通知用のアプリケーションを作成し、WebhookURLを発行したうえで、発行したURLに対してリクエスト処理を実行することで、通知が送られるようになります。
アプリケーションの作成は、管理画面のカスタムインテグレーションから作成できます。
現在は最新のAPIが公開されており、こちらの使用を推奨しているようなのですが、すべて英語の状態なので、理解するのに少々時間がかかります…
通知処理の実行に関しては、Google Apps Scriptのトリガー機能を使用していますが、毎日定刻に通知をするために、以下のようにトリガーを設定しています。
◆設定するトリガー
1.”通知処理を実行するトリガー”を、18:00に設定するトリガー
⇒こちらは定刻である必要はないので毎朝11時頃に実行
2.通知処理を実行するトリガー
⇒1の処理により、毎日18:00に実行
弊社内ではほかにもGoogle Apps Scriptを使用していろんな通知をSlackに送っていますが、基本的にはトリガーを設定するトリガーのみを設定しており、そのほかの通知処理に関しては自動で設定と削除ができるような仕組みとしています。
ここまで来たら、あとは以下のような流れとなるように、スクリプトを作成していきます。
◆処理の流れ
1.翌日の出社状況を取得
2.出社状況が「出社」「休み」となっているデータのみにフィルタリング
3.従業員名をキーとして、スプシに用意したメンバーIDを取得
4.通知メッセージを生成して、WebhookURLに対して送信処理を実行
3.Slack側では、翌日出社する従業員に対してメンションが送られる
スクリプト内で様々な処理をして通知を送った結果、Slack側ではメンション付きで通知が送られるようになります。これで翌日誰が出社するのかが一目瞭然です。
最後に
スクリプトの作り方次第にはなりますが、基本的なメンテナンスはスプレッドシートの更新のみなので、そこそこのツールを使用するよりは非常に楽ですし、好きなようにカスタマイズもできるので、とても役立っています。
また、Google Apps ScriptはJavaScriptベースとなっているため、JavaScriptを多少触ったことがある人であれば、扱いやすいところも利点です。
スプレッドシートは誰でも手軽にできる上に、様々な連携もできるので、皆さんもいろいろな場面で試してみてください。