スマホのGPS機能で残業時間を割り出してslackに通知する

#こんなことができます
スマホを持って会社から離れるだけで、slackに今日の残業時間と今月・先月の残業時間を通知します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/86d3abbc-7a96-533a-52bb-51c81f0056e7.png)


#概要
Integromatという、いろいろなWebサービスをつなぐサービスを利用します。

3交代&常勤で4種類の勤務時間帯があるため
Googleカレンダーに登録した当日のシフトを確認した上で、残業時間を計算できる仕組みにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/4878ab97-5d45-cfc2-d77a-9d7b4b316b7c.png)

1. スマホからGSP情報をIntegromatへ送信(Integromatアプリ経由)
2. Googleカレンダーから今日のシフトを確認
3. Excelに今日のシフトの終業時間と実際の退社時間を記録
4. Excel上で計算された残業時間を取得
5. slackに通知


#必要なもの
- Android スマートフォン
- Integromatアカウント
- Googleアカウント
- Office365アカウント

Integromatは大まかに言うとAPIの実行回数によってプランが分かれていて、フリープランで月1000回分利用できます。
今回のシナリオでは月22日の出勤でも110回消費なので、フリープランで十分まかなえます。
もし超えてしまっても実行できなくなるだけで、勝手に有料プランに移行したりはしないです。

#事前準備
##Androidの設定

###デバイス登録
1. PCでIntegromatにログイン
2. Device -> Add a device を選択
3. 名前を適当に入力してcontinue

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/270f8a07-a6ad-1daa-a0a9-3b977f90070d.png)
4. QRコードが表示される
5. スマホでPlayストアからIntegromatアプリをダウンロード
6. アプリの初回起動画面でUse a code -> Scan a code を選択
7. 先ほど表示したQRコードをスキャン
8. アプリでSettingsが表示される

###エリア設定
1. Settings > GPSで Entered/left the areaにチェックを入れる
2. Manage areasから会社の位置にareaを作成する
3. Notification upon exit from areaだけONにする
4. Area diameterを適宜設定する
5. Saveする

お昼に外出する人は会社として判定する範囲を広めにするとよいと思います。

##Googleカレンダーの登録
シフト情報だけが登録されたカレンダーを作成しておく必要があります。
定時の終業時間がわかるように、イベントの終了時間も設定しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/426dc226-4195-13e1-c446-aa6f8ec58e5c.png)

##Office365 Excelの設定
Integromat上で計算式を書くのは面倒なので
残業時間の計算などはExcelの計算式で自動入力できるようにします。

Integromat側の制約を考慮して、Excelを作る時のポイントは以下の通りです。

- データ入力先は必ずテーブルにする
- 取得したい集計結果は横に並べる

こんなかんじ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/201f8b2b-54bb-a09a-0ed2-9b403b1a63a3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/3581cb19-f944-2fb9-d614-834983f21142.png)


#Integromatのシナリオ作成
##GPS情報の受け取り
1. Androidモジュールで、Watch entrances to/exits from a geofence areaを選択
2. 先ほど登録したデバイスを選択してOK

##Googleカレンダーのイベント取得
1. 「Google Calendar」モジュールのGet eventsを選択
2. シナリオが実行された時刻の14時間前〜実行された時刻の間で、イベントを検索するよう設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/c7ff1aa4-df0f-175c-8922-cfe37077a886.png)


##Excelに残業時間を書込み
1. 「Office365」モジュールのAdd a table rowを選択
2. 作成したExcelを選択
3. 各列の設定はスクショのとおり

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/aae8467b-05e5-356a-1591-3487355a655d.png)


##Excelの別シートに記載された集計結果を取得
1. 「Office365」モジュールのRetrive dataを選択
2. 作成したExcelを選択
3. 取得したい集計結果が記載されているセルを指定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/c97aac40-68d5-064a-5f46-aaeb8cb3508e.png)


##残業時間をSlackに通知
1. 「Slack」モジュールのCreate a messageを選択
2. Connectionとchannelを設定
3. 投稿したいメッセージを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/949d1268-3c8f-50e9-47b9-5f71767a1ee5.png)

Show advanced settingsにチェックを入れると投稿内容の細かい設定ができます。
User nameを変えておくと、何のお知らせかわかりやすいのでおすすめです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99398/62652fb3-5ee4-5eb7-bd1c-eefe7104f1c9.png)



#おわり
これでタイムカードを目視して暗算しなくて済みます。
エリア出入りを元にマナーモードやWi-FiのOn/Offもできるので、Integromatとスマホの連携はなかなか便利です。