LoginSignup
8
9

More than 3 years have passed since last update.

n8nを使って会計freeeのデータをSlackに流してみる、ほぼほぼノンプログラミングで。

Last updated at Posted at 2020-07-10

n8nとは

フリーでオープンな自動ワークフローツール、だそうです。

https://n8n.io/
https://github.com/n8n-io/n8n

※ JP1を思い出します

手っ取り早く動かす

手元のnodeのバージョンは12.8.0でした。

$ node --version
v12.8.0
$ npx n8n
n8n ready on 0.0.0.0, port 5678
Version: 0.73.1

Editor is now accessible via:
http://localhost:5678/

Press "o" to open in Browser.

ここまで来たら http://localhost:5678/ にアクセスします(もしくは o を押します)

n8nの画面

Company情報の取得

APIで会計freeeを使うにはcompany_idを取得する必要があります。
さくっとOAuth2認証をしてCompany情報を取得してみます。

OAuth2認証

右上の Create Node から

Create Node

http を検索し、 HTTP Requestを選択します。

HTTP Request

Authentication は OAuth2 を選択して、 Create New で新しく作ります。

OAuth2

必要な情報を埋めていきます。

項目名 入力値 備考
Credentials Name freee ラベルなのでなんでも良い
Authorization URL https://accounts.secure.freee.co.jp/public_api/authorize
Access Token URL https://accounts.secure.freee.co.jp/public_api/token
Client ID xxxxxxxxxxxxxxxxxxxxxxxxxx ご自身のClient ID
Client Secret xxxxxxxxxxxxxxxxxxxxxxxxxx ご自身のClient Secret
Scope 入れなくてもOK
Auth URI Query Parameters 入れなくてOK
Authentication Body Headerだと認証で失敗します

OAuth2 Setting

アプリストア側のcallback uriは http://localhost:5678/rest/oauth2-credential/callback を指定します。
(OAuth Callback URLに書いてある)

アプリストアの設定

ここまで来たら、 ->] みたいなボタンを押して接続してみましょう。
うまくいくとこんなウィンドウが出てくるので許可します。

アプリ連携の開始

ウィンドウに Got connected. The window can be closed now. と出ればOKです。
ウィンドウを閉じて、Credentialの設定を保存します。

Company情報の取得

URLに https://api.freee.co.jp/api/1/companies と入れて、右上の Execute Node を押します。

companyの情報が出てきます。
今後はここで取得したcompany_idを使っていきます。

HTTP Request Result

取引情報の取得

今日の取引データを取得してみます。

指定するパラメータは以下のとおりです。

項目 備考
Request Method GET
URL https://api.freee.co.jp/api/1/deals
Response Format JSON

Query Parameter

Name Value 備考
company_id xxxxxx 先程取得したcompany_id
start_issue_date 2020-07-10 発生日。いったん固定で指定する
end_issue_date 2020-07-10 こちらもいったん固定

ここまで指定したら実行します。
データがあればJSON形式で落ちてきます。

Deal Result

必要なデータだけ取る

収入

https://developer.freee.co.jp/docs/accounting/reference#/Deals/get_deals
API仕様を見ると取引の一覧を取得するのにもいろいろな条件を指定できます。
ここでは収入だけ取得してニヤニヤしようと思います。

Query Parameterに type income を追加します。

Name Value 備考
company_id xxxxxx 先程取得したcompany_id
start_issue_date 2020-07-10 発生日。いったん固定で指定する
end_issue_date 2020-07-10 こちらもいったん固定
type income 収入

発生日

発生日を毎回手で書き換えるのは面倒なので、現在の日付を取得して指定するようにします。

発生日は Function を使います。(ほぼノンプログラミング

Create Node

こんな感じで、YYYY-MM-DD形式の日付を取得します。

const today = new Date();
const yyyy = today.getFullYear();
const mm = ('' + (today.getMonth() + 1)).padStart(2, '0');
const dd = ('' + today.getDate()).padStart(2, '0');

items[0].json.today = [yyyy, mm, dd].join('-');
return items;

Execute Node すると、大丈夫そうな感じです。

日付の取得

つぎに、 Function から HTTP Request に線を引きます。

Function→HTTP Request

HTTP Requestのパラメータ start_issue_dateend_issue_date の値をNodeからの返り値に指定します。

日付の指定

もう一度 Execute Node を押して動くか確認しておくと良いでしょう。

これで、「本日発生した収入」を取得することができました。

Slackに連携

SlackのほうはサクッとOAuth2で接続します。

Execute Nodeをして、n8nからSlackに行けばokです。

Slackの連携

合計値の計算

収入が複数ある場合はそれを合算した値を知りたいので、freeeからの出力した値を合計します。

ここでは Function を使ってさくっとやります(ほぼノンプログラミング

HTTP Requestの出力結果を計算

freeeの後続にFunctionを追加し、そこで計算します。

items[0].json.total_amount = items[0].json.deals.reduce((x, y) => x.amount + y.amount);

return items;

例によってExecute Nodeをすると合計値が表示されます。

計算結果

Slackに喋らせる

合計を計算したFunctionとSlackをつないで、 SlackのTextを先程の結果にします。
歯車を押して Add Expression でやると簡単に指定できます。

Add Expression

Current Nodeからたどって、出力したい値を指定し、喋らせたい文字と合わせます。

80マンエン

結果

Startからつなで、下の Execute Workflow を押すと実行されます。

workflow result

Slack側はこうなります。

slack result

発展

毎回Execute Workflowを押すのはかっこよくないので、時間が来たら勝手に起動するようにしたいです。

TriggerからCronを選択します。

TriggerからCronを選択

あとは実行時刻を指定して、

実行時刻の指定

Cronとつないで、

Cronと接続

右上の Active を有効にすればOKです!

Active化

あ、ひとつ設定がありました。
Settingから

Setting

Timezoneを正しく指定しないとCronで指定した時刻に起動しなくなります :sweat_drops:

Timezoneの設定

いかがでしたか?

いかがでしたか?
freeeAPIを使うのって結構面倒かなと思うのですが、n8nをつかうことで比較的簡単にデータ連携ができました。
HTTP Requestを受け取れてOAuth2等で認証できるサービスであれば、n8nで連携できるのでぜひいろいろな連携を試していただければと思います。

裏話

こんな感じのfreee用のNodeを作っていたんですが、標準のHTTP Requestで行けそうと気が付いてしまいました。。。

作り途中のやつ

コードはこちら
https://github.com/tamurashingo/n8n/tree/feature/freee

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9