🖥️

作ったものを晒すシリーズ#1:勤怠SaaSと連携してSlackから打刻できるSlack App

2022/09/30に公開

初めに

皆さん、ご機嫌いかがでしょうか?自分は元気です。
前回「自宅の回線をできる限り10GbEで構築してみた」的な記事を書いたら妙にバズってしまい、豆腐メンタルな自分は反応とかコメントを見るのを封印してしばらくZennから離れていました。

が、折角Zennを始めたのに記事1本だけでは勿体無いので、
自身が業務などで作成したアプリや機能などの概要を世間様に(恥を)晒していこうかと思います。
一応シリーズ的にやる予定。

そんな自分は現在、情シスでアプリ開発などを通した業務改善などに取り組んでおり、
同じような仕事や業務をしている人達の参考に少しでもなればいいなー、と思ってます。

今回の機能(アプリ)

今回晒すのは

社内で利用している勤怠SaaSのAPIを使って、Slackから勤怠打刻を直感的に実行できるアプリ

です!(そのまま)

実装の目的

  • コロナ以降、全社的にリモートが中心となっていて、毎日の出退勤打刻が手動となっている現状
    • 出退勤の度にSaaSのページを開いて「出勤」「退勤」ボタンを押す手間がめんどくさい
    • 上記により、毎日打刻をしない(忘れる)人が多く、労務管理的な面でよろしくない状況
    • 全社的にSlackを利用しており、かつBYODや社用スマホにSlackアプリを入れている人も多い為、Slack経由で打刻できると便利だよね

こんなアプリ

用意する(した)もの

うちの会社は勤怠管理SaaSとして、ソニービズネットワークス社のAKASHIを利用しています。
Slackのプランはプロプランです。

  • 勤怠管理SaaS(AKASHI)のAPIアクセス情報
  • Slackアプリ
  • 効率化するぞという意気込みと気合と時間
  • くじけない心

開発環境と動作環境

処理の実装はNode.js + bolt SDK + TypeScriptで行なっています。
なぜNode.jsかというと、一番大きな理由はSlackアプリを実装する上で情報が多かったからです。
Slackアプリを作る上であまり学習コストをかけたくないという思いがあり、特にbolt SDKの情報がNodeベースだった為選定しました。
TypeScriptについては、個人的にJavaを触っていたこともあり、慣れ親しんでいた静的型付けベースで実装したかったというのがあります。

Slackアプリ側は、Socketモードで動作させています。
というのも、最初はAWS Lambda + API Gatewayでの実装を考えていたんですが、セキュリティ的にアプリ側のエンドポイントをできるだけ公開しておきたくないというのがあり、Socketモードの実装に切り替えました。
その関係で、LambdaではWebSocketを常時貼り続けることができないため、処理実装側についてはECSを利用してコンテナ上で動作させています。

この辺りのAWSの構成管理については、AWS CDKを利用してコードベースで管理しています。

※ 構成図を今後貼り付ける予定

機能紹介

打刻機能

これがなくては始まらない、AKASHIに打刻する機能です。
Slackアプリのホームタブを利用して、GUIからの直感的な操作とスラッシュコマンドを利用した操作の2パターンの打刻方法を提供しています。

うちの会社ではエンジニア以外もSlackを利用してコミュニケーションを取っており、非エンジニアでも直感的に操作できる必要があります。スラッシュコマンドは思い立ったらどのチャンネルでも素早く操作できる反面、非エンジニアには馴染みが薄いので、GUIも用意しました。
(単純に自分がホームタブを使いたかったというのもある)

打刻機能オプション

ホームタブから打刻処理に関する各種設定を行えるようになっており、利用用途に応じて設定を変更できるようになっています。

打刻時連動投稿

この機能をONにしてチャンネルを指定することで、打刻した際、指定のチャンネルに打刻した旨を通知します。
自身のチームのチャンネルなどを指定すれば、チーム内での勤怠管理などに役立てることが可能...なんですが、うちの会社ではあまり活用されていないかも。(周知が足りてないともいう)
また、好きなメッセージを合わせて送ることもできるので、今日の予定や意気込みを書き込むことで色々アピールすることもできます。

打刻時ステータス自動設定

この機能をONにすることで、打刻種別に合わせてSlackのステータスを変更できます。
ステータスメッセージについては、打刻種別毎に事前に個別設定できます。
「この人、今出社/退社しているかな?」のというのを一目でわかりやすくすることを目的とした機能です。

トークンを設定しないで利用する

うちの会社では、正社員や出向社員・契約社員などはAKASHIを利用して勤怠管理を行なっているんですが、派遣の方などは別のサービスを利用して管理しています。
アプリを利用する際に、AKASHIの画面から事前にアクセストークンを取得してもらい登録する必要があるので、AKASHIユーザー以外は基本使えませんでした。

が、出退勤時にチャンネル通知することができる機能など、AKASHIと直接絡まない機能も準備しているので、そういった機能だけでも活用できるように、この機能を有効にしているユーザーについてはAKASHIへの通信は行わず、各種連動機能などに限り利用できるようになる設定です。
少しでも多くの社員に活用してもらえるように...という思いから用意しています。

作成後

初回にリリースした際は、本当に最小限の打刻機能とチャンネルへの連動通知しかありませんでした。
が、リリースした直後、「めっちゃ楽」「便利」「神」という反応が一部から上がっており、効果はあったなーと感じています。

うちの会社は正社員数としては100人に満たない程度ですが、トークンを登録して利用していると思われる人数は40〜50人と、半分近くのユーザーに活用して貰えている感じです。
今後は更なる周知による利用率の向上と、機能拡充を行なっていこうと思っています。
(ただ、AKASHIが用意してくれているAPIが結構限定的なので、Slack側での機能拡充がメイン AKASHIさん、もっとAPIを増やしてください(切実))

次回の予定

次回晒す(予定は未定)のは、

「Slackのプロフィールをカオナビと連動させて設定するスクリプト作ってみた」

です。

Discussion