今回は、スクリプト作成編です(雑にまとめました。後で気が向いたら or 質問や指摘をもらったら、追記します。)
動機
人は、ルーチンワークを意識すると言うのが、苦手な生き物である!!(主語でかい)
みなさん、よく月末に勤怠を入力してくださいって、言われません?
言われない?自動化してる?
僕は割と言われます
毎回、「すみません(汗」と、言って勤怠を入れるのである。
もう、3回言われたら、自動化して対策するのが、エンジニアってものですよ。
(財布も月3回、家に忘れたから、忘れるものと割り切って対策組んだし)
ちょうど、人事労務freeeにはAPIが公開されているので、こいつで勤怠打刻を自動化しましょう!
ちなみに、言語は会社で使っているPythonです。
(PowerShell版もあります。)
Python版:https://github.com/EndoHizumi/timerecordeeer
PoiwerShell版:https://github.com/EndoHizumi/tr4ps1
セットアップ
事前にPython 3.6以降をインストールしてください。
スクリプトでfreee APIを叩けるようになるまで
- timerecordeeerのリポジトリから、スクリプトを一式を持ってきます。
- git cloneするなり、ZIPファイルでダウンロードするなり、お好きな方法で。
- freeeからアクセストークンを取得します。
3. 使い方をみながら、適当なコマンドを入力すると、ブラウザが開きます。
4. freeeのアカウントでログインすると、アクセストークンが表示されます。これをコピーします。
5. 表示されたアクセストークンを、config.jsonのaccess_tokenの欄にペーストします。
6. config.json_templeteからリネームしておつかください
これで、スクリプトを使ってfreeeのタイムカードAPIをアクセスする準備ができました。
自動でスクリプトを起動させる
-
Windowsでローカルグループポリシーエディタを起動して、[ユーザーの構成] -> [Windowsの設定] -> [スクリプト(ログオン・ログオフ)]で、ログオンとログオフ時に起動するスクリプトに、このスクリプトを登録します。
-
スクリプト名にpythonと入力、スクリプトのパラメータにスクリプトのフルパスと引数を入力します。
3.スクリプトのパラメータの入力例
3. ログイン(出勤)時;timerecordeeer.py "clock_in"
4. ログアウト(退勤)時;timerecordeeer.py "clock_out"
使い方
python timerecordeeer.py [emboss|find] [引数]
# サブコマンドがembossのときに、入力できる引数
[clock_in|break_begin|break_end|clock_out]
# clock_inが出勤・break_beginが休憩開始・break_end休憩終了・clock_outが退勤です
# サブコマンドがfindのときに、入力できる引数
yyyy-mm-dd -f 勤怠ファイルのパス
スクリプトの仕様
- コマンドラインからスクリプトを叩いて、人事労務freeeのタイムレコーダー登録APIで、勤怠を打刻する。
- 受ける引数は、freeeAPIに準拠して、出勤・休憩開始・休憩終了・退勤の4種類を受ける。
- 時刻は、スクリプトの起動日
想定する使い方として、このスクリプトをWindowsのログイン・ログオフ時に起動して、勤怠を打刻します。
休憩については、時間がまちまちなので、大人しくfreeeのスマホアプリの方で打刻します。
固定なら、タスクスケジューラに入れて自動にするんですが。
おまけ
アクセストークンの再取得
config.jsonのaccess_tokenを空にする(シングルクオーテーションだけにする)と、再びアクセストークンを取得することができます。
ログインしてくださいやアクセス権限がありませんというエラーになった時は、この方法でアクセストークンを再取得してください
外部設計
コマンド
python timerecordeeer.py [emboss|find] [引数]
# サブコマンドがembossのときに、入力できる引数
[clock_in|break_begin|break_end|clock_out]
# サブコマンドがfindのときに、入力できる引数
yyyy-mm-dd
レスポンス
freeeAPIのレスポンスをそのまま返す
内部設計
スクリプトといいつつ、雰囲気で責務分担しておく。
逆にごりごり1ファイルで書いていくと後のモチベーションに関わるので。