
今日は、弊社の勤怠管理システムについて紹介します。
背景
会社にお勤めの方は、日々の出勤・退勤の管理はどうされていますか?
- ● 自分でExcelに記載する
- ● 何らかのクラウドサービスにWebでアクセスして管理
- ● ICカードで管理
弊社内では、以下のような思いや要望などから「 普段使いのチャットツール( Slack )で勤怠管理ができないか 」というモチベーションがありました。
- ● Excelなどのソフトを立ち上げるのは手間がかかるし、提出も面倒
- ● 別のWebサービスにアクセスしてクリックするのは手間だし、忘れそう
- ● ICカードだと、無くしそう/無くしたら大変…
- ● Slackだったら携帯からもできるし、忘れにくくなるんじゃないか
その思いを受け、弊社内のインフラチームが作成したのが「 wagebot 」です。
※wageとは “賃金”という意味です。
歴史的経緯

元々は、チャットへログインしない人に「絶対ログインしてもらうための仕組み」として、勤怠管理をチャット上で実現しました。 「チャットにログインしてくれないなぁ…」→「 勤怠管理をチャットでやれば、絶対ログインしてくれるはず! 」というモチベーションです。
現在の仕組み
概要
Slackで発言した内容をサーバで受け取り、勤怠記録に変換してサーバに蓄積しています。

流れ
- Slackの特定のチャネルで、特定の書式で発言します
- 出勤時は .wage.start()

- 退勤時は .wage.finish <休憩時間(min)>, “仕事内容”

- 出勤時は .wage.start()
- 書式に反応して、SlackのOutgoing Webhookで発言内容を社内サーバに飛ばします (画像はSlackのOutgoingWebhookの設定画面です)

- サーバは発言内容をパースして、勤怠記録データとしてサーバ内に蓄積します。 サーバのプログラムはGroovy + Scalaで実装されており、 wage.start() やwage.finish() といった発言はそのままGroovyスクリプトとして実行されます。

発言した内容がそのままGroovyスクリプトとして実行されるので、たとえば、こんなことも可能です (例) 連続した有給の取得 (wage.leave() というコマンドを使用)
// 2020/10/12, 13, 14日に、8時間ずつ有給を取る .[20201012,20201013,20201014].each
発言内容をパースする部分は独自に実装していますが、使っている仕組み自体は「 特定の書式に沿った発言に反応して、Webhookで飛ばす 」という単純なものです。 たとえば、発言内容を飛ばす先をGoogleSpreadSheetにすることで、より簡単に同じような仕組みを実現できるのではないかと思います。

さらなる改善
SlackはWebhook( を含むカスタムインテグレーション )を非推奨としました。 そのため、このwagebotは今後使えなくなる可能性が出てきました。
使えなくなってしまう前に対処するため、wagebotのSlack app化を進めています。
弊社では、社内の「もっとこうしたら便利・楽なんだけど…」を実現する気概・風潮があります。 会社のことが気になりましたら、ぜひ採用応募ページをご覧頂ければと思います。
ありがとうございました。
