2019の21日目の記事です。経緯こんにちは、今サーバサイドで仕事をしてるUnityエンジニアの魏です。入社した以来、いつもノートで出退社時間を書いて、金曜日か月曜日で勤怠管理システムでまとめて入力することをやっていました。年を取ってきて、仕事が忙しくなるなどの原因で、よく勤怠時間をメモし忘れています。毎日勤怠をつける習慣があれば問題ないけど、やはり忘れてしまうことがよくありました。その時、KPTシートで「出社退社時間を記録する仕組みを作る」というトライを書きました。ネットで検索してみたら、自動で打刻してくれる勤怠システムがすでにたくさんあります。それらの対象は会社管理者で、会社がそのシステムを使わない限り、社員としては何も恩惠を受けません。この記事では、管理者じゃなく労働者の立場から、自己申告の勤怠システムに対する自動入力の方法を考えました。実際に動いたものはこんな感じです。今回の課題は2つに分けます。上司に怒られない:言い换えれば正しく勤怠時間を入力すること時間の自動入力それぞれを満たすために、出退社時間の集計と勤怠の自動入力2つの仕組みが必要だと考えました。何もやらずに、自動で時間を記録してくれるものを探した結果、IFTTTが出てきました。自分はAndroid端末を持っているので、Wifiの接続状況を記録してくれるAppletを使用しました*1。時間が経つにつれて、たくさんのデータが記録されました。生データはこんな感じです。fromの時間を見ると、一応一日の出社、退社時間が分かるでしょう*2。fromの時間」を見ればいいですけど、自動化とは言えません。集計の作業はもちろんコードにやってもらいます。01:21PM」みたい、Spreadsheetで認識できないフォーマットです。月は英語で、atを除いても簡単に日本アカウントのSpreadsheetに扱えないです。ScriptがDataオブジェクトとして扱ってくれます。d;}日付フォーマットの問題を解決できたら、毎日の出退社時間は簡単に集計できます。clockOut);}そして、AddWorkTimeLog関数で整形したデータをシートに記入する処理を書いて、このように出退社時間のまとめシートができました出社退社時間のまとめこれで、毎日実行するトリガーを設定すると、毎日の労働時間がここに集計できるでしょう。次は勤怠時間の自動入力の部分です。KayacはZacという勤怠管理システムを使っています。Zac画像のように、時間の入力はテキストではなく選択肢です。毎日勤怠を入力するために、8つくらい*3の操作をしなければならないです。自動入力のために、「時間のデータ」=>「選択肢のインデックス」に変換するのが必要となります。requireMinuteIndex};}休憩時間は1時間に固定するので、これで休憩時間以外の6箇所のインデクスが全部計算されました。今↑のデータをシートに記入するAddWorkTimeLog関数の中身を見てみましょう。先程書いたインデックスの計算関数を使って、もらったデータをシートに記載するだけです。outTime]]);}ここまでは、勤怠入力に必要なデータが全部揃いました。自動入力チームの中山さん(先日の「カレーライスを綺麗に食べる方法」記事を書いた方)のコードを参考にして、1つずつ時間を入力するのかわりに、ブラウザのConsoleで一発ですべての時間を入力するようなコードを生成しました。'"&TEXT(A2,"yyyy/MM/dd")&"');"生成したJavaScriptのコードをブラウザのコンソールで実行してみると、ちゃんと時間を設定してくれました。今回解決したのは出退社時間の記録だけ、一日複数の案件を関わる場合、各プロジェクトで使う時間が集計できないです。Zacでは一日の勤怠を確定すると、ページが更新されるので、ブラウザのコンソールを使う場合、一日ずつしか入力できないという限界があります。複数の日をまとめて入力するのは、拡張機能やTampermonkeyで作れるかもしれないけど、今回はできてないです。最後に確か大学の時かな、どこから「毎日手間がかかることは自動化すべき」みたいな話を言われて、その話がずっと頭の中で残っています。日本でも「怠慢はエンジニアの美徳だ」をよく聞いています。今回紹介した方法は複雑なロジックがないけど、エンジニアという職種に限らず、繰り返す部分を自動化にしましょうという意識を伝えることができたら嬉しいと思います。*1:このappletはすべてのWifiの接続状況を記録してるけど、実は特定のwifiだけ記録するappletがあります。Locationというサービスもあります。会議室に行く時wifiが接続したり、切断したりするので、余計な記録がたくさんあるけど、Locationを使ったほうが、特定の地理範囲内では記録が1つしかなくて、より集計しやすいです。いうふうに範囲を設定できる*2:Appletがちゃんと動いているか監視するために、slackに送信するappletを作りました。2019の2日目の記事です...2019-07-30Unityアプリを無差別タップで自動テストする画面写真をクリックするとWebGLビルドに飛びます。ファイル階層表示とその場編集こんにちは。今回はhttpサーバをスマホで動か...2019-05-07GLES2な低価格スマホでもブルームエフェクトしたいこんにちは。(1)月別アーカイブ検索スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。