freeeAPIで勤怠打刻を自動化したい! その2


今回は、スクリプト作成編です(雑にまとめました。後で気が向いたら or 質問や指摘をもらったら、追記します。)

動機

人は、ルーチンワークを意識すると言うのが、苦手な生き物である!!(主語でかい)
みなさん、よく月末に勤怠を入力してくださいって、言われません?
言われない?自動化してる?

僕は割と言われます
毎回、「すみません(汗」と、言って勤怠を入れるのである。
もう、3回言われたら、自動化して対策するのが、エンジニアってものですよ。
(財布も月3回、家に忘れたから、忘れるものと割り切って対策組んだし)
ちょうど、人事労務freeeにはAPIが公開されているので、こいつで勤怠打刻を自動化しましょう!
ちなみに、言語は会社で使っているPythonです。
(PowerShell版もあります。)

Python版:https://github.com/EndoHizumi/timerecordeeer
PoiwerShell版:https://github.com/EndoHizumi/tr4ps1

セットアップ

事前にPython 3.6以降をインストールしてください。

スクリプトでfreee APIを叩けるようになるまで

  1. timerecordeeerのリポジトリから、スクリプトを一式を持ってきます。
    1. git cloneするなり、ZIPファイルでダウンロードするなり、お好きな方法で。
  2. freeeからアクセストークンを取得します。
    1. 使い方をみながら、適当なコマンドを入力すると、ブラウザが開きます。
    2. freeeのアカウントでログインすると、アクセストークンが表示されます。これをコピーします。
    3. 表示されたアクセストークンを、config.jsonのaccess_tokenの欄にペーストします。
      1. config.json_templeteからリネームしておつかください

これで、スクリプトを使ってfreeeのタイムカードAPIをアクセスする準備ができました。

自動でスクリプトを起動させる

  1. Windowsでローカルグループポリシーエディタを起動して、[ユーザーの構成] -> [Windowsの設定] -> [スクリプト(ログオン・ログオフ)]で、ログオンとログオフ時に起動するスクリプトに、このスクリプトを登録します。

  2. スクリプト名にpythonと入力、スクリプトのパラメータにスクリプトのフルパスと引数を入力します。
    3.スクリプトのパラメータの入力例

    1. ログイン(出勤)時;timerecordeeer.py "clock_in"
    2. ログアウト(退勤)時;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ファイルで書いていくと後のモチベーションに関わるので。

構成


(Draw.io初めて使ったけど、GUIがあるのね、便利)