JUST.SFA freeeとの連結|APIとCLI

こんにちは

freee労務人事の勤怠データを JSUT.SFA に連携する設定を行いましたのでご紹介いたします。

■freee勤怠データをJUST.SFAへ連携

弊社では 労務人事に freee を利用しています。また、SFA には JUST.SFA を利用しています。従業員の勤怠をJUST.SFAに取込み、会社の KPI に活用します。freee の WebAPI を利用して 勤怠データを CSVに出力し、JUST.SFA コマンドラインツール(CLI) を使って登録・更新を実施します。
従業員には会社から iPhone を配布しています。各人の iPhone で freee アプリから勤怠が入力できるようになっています。
概要は以下の図になります。

一度にたくさんのデータを登録・更新(いわゆる UPSERT)する場合は WebAPI より CLI が適しています。現在の仕様では、JUST.SFA の WebAPI の場合、更新は1件ずつ、レコードID(画面では確認できないID)のみキーに指定可能なので、少ないデータの処理に向いています。

■用意したもの

・サーバー
JUST.SFA CLI を実行するサーバーを用意しました。サーバーは弊社社内からVPN接続したAWS上のEC2です。
Amazon Linux に OpenJDK8 のインストール、JUST.SFA CLI のインストールを行っています。
Linux の場合、言語やロケーション設定がデフォルトのままですと CLI がうまく動作しないので気を付ける必要があります。
・Webアプリ
freee の WebAPI から CSV ファイルを作成する Webアプリを作成しています。OAuth認証で freee にログインして、各従業員の勤怠情報を WebAPIで取得し、CSVへ加工してダウンロードできるようにしています。CSVのヘッダーに JUST.SFA の勤怠情報テーブルのフィールド識別名を埋め込むようにしています。
・CLI 制御ファイル
勤怠情報CSVファイルから JUST.SFAの勤怠情報を 登録/更新するための制御ファイルを作成します。
従業員と日付をキーとなるフィールドとして指定しています。同じキーのデータが存在する場合は更新、存在しなければ登録の動きになります。

■自動化

ここまでに準備したシステムの自動化を行いました。
freee から CSVファイルをダウンロードは Puppeteer を使って自動化しました。
Puppeteer の実行と CSVのダウロードが完了したら、CLI を実行して JUST.SFA に勤怠情報を送信するシェルを作成しました。
作成したシェルをクーロンでスケジュールしています。
概要は以下の図になります。

freee API は 一度取得した アクセストークン や リフレッシュトークン を使うようにすれば、毎回ログインする必要はないのですが Puppeteer が使いたかったのです。


JUST.SFA の コマンドラインツールは CSVのデータをバルクで処理できるため、一度に多くのデータを処理するのに向いています。
ですが、他システムが WebAPI の場合は WebAPIから取得した(大体はJSON)データからCSV化する必要があるため、このような構成で自動化しました。
もっと処理をスリムにして、できればサーバーレスにしたいのですが、今後の課題です。