名称未設定

Wi-Fi打刻作ったお話

打刻

僕はよく忘れます。

1ヶ月打刻忘れてしまい、バックオフィスの人に「あのー、打刻ちゃんとしてください(怒)」って言われたことがあります(汗)
それほど、よく忘れます。

最近、転職をしまして、打刻のやり方が変わりました。
ICカード、またはSlackより打刻できるようになりました。

ICカードで端末にタッチするのは、身体でやる方法だから忘れないだろうっと安心してたら...

また1週間以上やりませんでした...orz

これは、自分で対策しないとどうしようもないなと思い、いい感じにオフィスにいれば自動で打刻してくれるサービスを探し始めました。

そして、こちらのブログを見つけました。

Wi-Fiで打刻!その手があったか!

ということで、作りました。
構成は、こんな感じです。

使用したものは、こちらになります。

- Mac mini
- Azure Functions
- SQL Database
- svelte

どういう風に作ったか詳しく書いていきます。

①Wi-Fi打刻の概要

Wi-Fi打刻とは、個人のスマホが会社のWi-Fiにつながると自動で出社・退社の打刻するシステムのことです。

②MACアドレス取得

Wi-Fi打刻するには、個人のスマホを特定する必要があります。そこで、スマホのMACアドレスで個人を特定しました。
Wi-Fiルーターにつながっている端末のMACアドレスを取得するのに、arp-scanを使いました。

brew install arp-scan

そして、以下のようなシェルスクリプトを作りました。

#!/bin/bash
sudo arp-scan -l --interface en0


このシェルスクリプトをnode.jsのexecを使い、実行させてMACアドレスを取得するnodeサーバーを作りました。

作ったnodeサーバーは社内に余っていたMac miniで動かしました。
ここで得られたMACアドレスをAzure Functionsで作成したAPIに送ります。

MACアドレス取得で起きた問題が...

arp-scanで叩くと、こう返ってきます。

14:10:28:0:3:69

iPhoneの設定画面のMACアドレスはこのように表示されています。

14:10:28:00:03:69

「0:3」、「00:03」、「0」が多いですね。
対策として、以下のライブラリを参考に0を補正しました。

次に問題があったのが、MACアドレスがとれないという現象です。

最初、「arp -a」で取得していたのですが、このコマンドだと一部のものしかとれませんでした。
検索した結果、上記で書きました「arp-scan」を使うと、簡単に取れることがわかったので、「arp-scan」を使うことにしました。

③MACアドレス確認

DBには、名前と個人のスマホのMACアドレスを事前に入れています。
登録にはこのようなページを作り、各自で登録できるようにしています。

※MACアドレスを自動で取るか迷ったのですが、自動でとるのって、何か気持ち悪いなと思い、自分で入れるようにしました。

さて、出社と退社時間をどのようにして判定しているかを書きます。

出社の場合は、Wi-Fiに初めて繋がった時を、出社時刻とすればいいので、そこまで難しくはないです。

問題は、退社時刻です。

お昼休みのときや外での打ち合わせなどで、スマホをもって外出し、またオフィスに戻ってくるということがよくあります。つまり、繋がったら出社、切れたら退社とはできないです。

退社時刻をどうしたかというと、出社した日の最後に繋がった時間を退社時間としました。
最後に繋がったのが10月20日19:00だったら、10月20日の退社時間は、19:00としました。

ちなみに、10月21日25:00に退社した場合は、10月20日23:59を退社として、10月21日25:00が出社となります。
ただ、こういった日をまたいで仕事するケースは弊社の場合「ない」ので、あまり考慮していません。

④打刻時間結果出力

その月の打刻時間は、webページでこんな感じに見れるようにしました。

弊社では、最終的にMFクラウド給与を使って勤怠と給与を結びつけています。
MFクラウドの勤怠はCSVで更新ができるので、MFクラウドに読み込ませるCSVを出力するようにしています。
月末にこのCSVをMFクラウドに読み込ませたら、その月の勤怠は完了です。(この作業も自動化したいのですが、それはまた別の時間で作ります)

運用後の課題

運用してみて課題に上がったのが...

1.別のWi-Fiルーター(ゲストWi-Fiとか)に接続した状態でMACアドレス登録した。
2.MACアドレス?なにそれ?おいしいの?
3.Wi-Fiに繋がっていなくて、打刻できなかった。

1は、違うWi-Fiに繋がっていたら、登録時に教えるとかになるのかなっと思いますが、ブラウザで取れるのかな...

2は、自動でMACアドレスを取得する形がいいのかなと。たしかに、MACアドレス調べてねって、なかなか詳しくないとできないです。

3は、これは、どうしようかなと...お昼までにつながっていなかったらSlackで教えるとかかな...

まとめ

今の所、打刻忘れていません!

現在、arp-scan を使ってMACアドレスを取得していますが、これでいいのか。この辺のネットワーク周りは疎くて...もっと他にいい方法があれば教えてください。

あと、svelteを使っている理由は...何にしようかなって考えていた時に、一年くらい前に「svelte触ったぞー」っていう知人の言葉が頭をよぎって、決めただけです。
今後、社員が増えていったら、他のやつに変えるかも....

ということで、エンジニア募集中です!

もう少し詳しくお話を聞きたい場合は、オフィスに来てくれたら、お菓子と一緒にお話します〜

よろしければサポートお願いしますm(._.)m いただいたサポートは、今後の活動に使わせていただきます!