経緯
ある昼下がり、食堂の窓から五月の快晴を見て、たまには16時くらいに帰りたいな〜 と私が言った。
それを聞いたチームメンバーが、じゃあ、帰りましょう と言った。独り言のつもりだったので、びっくりした。
そのあと、5人くらいで話し合った結果が以下。
Q. 早く帰るためにはどうしたらいいか?
A. 早く出社しよう。(効率上げるのは前提として、ウチの会社は7時間36分は働かないとダメ)
Q. 早く出社しても誰かが気づくか?
A. 出社時間のログを取って、Slackでわかるようにしよう
作ったもの
- IFTTTで出社イベントを取得
- Google Apps Scriptで定時を計算
- Slackでその人の定時を投稿
1.IFTTで会社の位置情報を取得
1-1. IFTTTを各メンバーのスマホにインストール&アカウント作成
1-2. 下記に従い、IFTTT上でサービスを作成。IFTTTの制約上、それぞれのメンバーが自分で作る必要がある。メンバー全員にコピペしてもらった。
+this location >> you entered an area > >会社の住所を選択
+that webhooks >> make a web request を選択し下記を入力 - URL https://script.google.com/macros/s/{{googleAppsScriptのURL}} - Method Post - Content Type application/json - Body { "channel" : "#早起き", "name" : "mochida", "slack_stamp_name" : ":mochida:", "message" : "おはようございま〜す。\ntimeに帰れるようにがんばります :space_invader: ", "work_hours" : 7, "work_minutes" : 36, "slack_webhook" : "https://hooks.slack.com/{{slackのincoming webhookのURL}}" "disable_after" : 12 }
2. Google Apps Scriptで退社時刻の計算
ロジックはめちゃくちゃ簡単。現在時間に労働時間を足し算してあげるだけ。
ただ、GASのドキュメントはなかなか見つからないので、全行記載してコメントもしておく。
function postSlack(data){ var url = data.slack_webhook; var options = { "method" : "POST", "headers": {"Content-type": "application/json"}, "payload" : '{ "text": "' + data.message + '", "channel": "' + data.channel + '", "username": "' + data.name + '", "icon_emoji": "' + data.slack_stamp_name + '" }' }; UrlFetchApp.fetch(url, options); } function doPost(e) { var LONG_WORK = 6; var jsonString = e.postData.getDataAsString(); var data = JSON.parse(jsonString); var ts = Date.now() + data.work_hours*60*60*1000 + data.work_minutes*60*1000; //6時間以上の労働にはお昼が休憩1時間必要 if(data.work_hours >= LONG_WORK) { ts += 1*60*60*1000; } var timetogo = Utilities.formatDate(new Date(ts), 'Asia/Tokyo', 'H:m'); data.message = data.message.replace('time', timetogo); //data.disable_afterよりも遅い時間ならpostしない。(ランチ・MTG等で外出・帰社した時に反応しないようにするため、無効な時間を設定可) if(data.disable_after != null && new Date().getHours() >= data.disable_after) { return; } postSlack(data); }
3. Slackでその人の退社時刻を投稿
slack_stamp_nameに対応するスタンプを作っておくと、スタンプがアイコンになる。
以上で終わりです。8割くらいGASに時間取られた。。。
今後
定時にSlackのリマインダーが起動するとか面白そう。
あとは、出社時刻をspread sheetにまとめて月次でグラフつくるとか。
とりあえずは、早めに帰宅する喜びをプロジェクトメンバーに感じてもらえたらいいかな、と思ってる。
追記
評判良かったので、Google Apps ScriptのアクセスURLを限定公開します。
URLが欲しい方は、facebookから友達申請&DMください。
攻撃を避けるため、友達が30人以上いる方に限り共有します。
https://www.facebook.com/kyogo.mochida
(5/24) お昼休憩時間を1時間とし、1時間プラスするように実装しました。IFTTTの修正をするのが望ましいのですが、各メンバーのアプリ設定の修正の手間を省くため。
(5/25) disable_afterをパラメータに追加しました。