integromatを使ってノーコードでfreeeのAPIを操作する仕組みを構築する！

# はじめに
時代や技術が進化していけばいくほど、働く人の業務も進化していくわけで、
それに付随して業務効率化というのも終わりがありません。常に何らかの効率化が
できるはずなので、「これ以上はないわ！」となることはまあないでしょう。

私のような「業務ハッカー」という専門職もでてきていますが、通常の業務
（たとえばセールスなど）をやりつつ、業務効率化をしないといけない・・・という人が
多数ではないかと思います。簡単なプログラムを学ぶことも有用ですが、時間も
限られているので、今回ノーコードでAPIを操作できる仕組みを考えてみました。

# お題
**「アクセスするだけで人事労務freeeに打刻できるページをノーコードで作成する」**

ノーコードでAPIを操作可能にする例として、上記のお題で説明していきたいと思います。
今回は打刻APIで書いていますが、基本的にはどのAPIにも応用できます。

# 対象者
プログラミングはできないけど業務効率をしたい人

# 作成手順
以下の手順で構築していきたいと思います。

1. freeeAPIのrefresh_tokenを取得
2. integromatのアカウント作成
3. integromatのdata store作成
4. integromatのwebhook作成
5. integromatのAPI呼び出し作成

それではいきましょう！

### 1. freeeAPIのrefresh_tokenを取得
https://developer.freee.co.jp/tutorials/getting-access-token
このページの手順にそって、「4.アクセストークンを取得する」まで進めて、
取得したリフレッシュトークンをメモしておいてください。
「2. リクエストレスポンスからアクセストークンを取得する」のところで得たレスポンスに
あるのがリフレッシュトークンになります。
このトークンは後で使います。

### 2. integromatのアカウント作成
連携処理を行うためにintegromatのアカウントを作成します。

integromat
https://www.integromat.com/en/

integromatはいわゆるiPaaSというやつで、IFTTTやZapierと同じようなサービスです。
違いとして、機能がかなり豊富なのでIFTTTやZapier以上に柔軟な処理ができます。
全て英語ですがGoogle翻訳など使えば分かるレベルなので、なんとか登録しましょう。
登録すると下記のような画面になります。

![スクリーンショット 2020-12-25 13.54.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/a77af685-a880-b478-d6dd-da49d214f532.png)

### 3. integromatのdata store作成
integromatにはdata storeという、データを保存しておく機能があります。
integromat内にあるデータベースのようなものと考えてもらって支障はありませんが、
容量はかなり小さいです。
今回、STEP1で取得したリフレッシュトークンをintegromat内に保持するようにします。
まず、下記からdata storeを追加します。

![スクリーンショット 2020-12-25 14.02.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/ef21bad1-b074-fa6e-faf3-488c07901d78.png)

すると下記のような画面がひらきます。

![スクリーンショット 2020-12-25 14.04.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/c8831a48-488c-190e-f97d-a189ab2c742f.png)

「Data store name」は何でもいいです。このままでもいいです。
「Data storage size in MB」もこのままで構いません。
「Data structure」は「中にどんな形のデータを保存するか」なので、ここを
設定しておく必要があります。右にある「Add」を押してください。

![スクリーンショット 2020-12-25 14.14.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/1bd7e9f6-7a42-0eab-10dc-8cb1f1ef53c7.png)

さらにポップアップが開いてData structureの設定がでてきます。
例によって「Data structure name」は何でもかまいません。
Specificationが内容の設定なので「Add Item」を押します。

![スクリーンショット 2020-12-25 14.16.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/c772a212-9ec2-b221-e39c-5f43ef56214b.png)

「どういう名前でどういう形式の値が入るか」の設定なので、こちらの画像の通りに設定してください。
右下のAddボタンを押して、開いてるポップアップを保存して、もう一度Data storeの画面に戻ります。
すると、Data storeが表示されているので「Browse」からデータ登録します。

![スクリーンショット 2020-12-25 14.18.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/5ace8f46-f01c-c264-6043-bad90a4e783c.png)

ポップアップが開くのでここから追加
![スクリーンショット 2020-12-25 14.22.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/ff826668-1d9c-fd07-0352-abebf9c1d44a.png)

こんな感じで登録ください。ここでSTEP1でメモしたrefresh_tokenを入力します。
![スクリーンショット 2020-12-25 14.25.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/0e28b73a-a260-2753-6802-6959c748a15a.png)

保存したらこのSTEPはこれで終わりです。

### 4. integromatのscenario作成
さてここから、integromatのscenarioを作成していきます。
scenarioというのは、処理をつなげていくフローをまとめたものです。
integromatのDashboardからScenarioｓ→create a new scenarioを選んでください。
すると下記のような画面が開きます。

![スクリーンショット 2020-12-25 14.35.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/020e1be0-c245-1f47-782c-584914073b6f.png)

ここから下記を選んで右上の「Continue」を押します。

- webhooks
- HTTP
- Data Store

scenarioの完成形としては下記のような形になります。

![スクリーンショット 2020-12-25 14.43.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/7b742532-8a14-e4c2-3c8f-eb682db96099.png)


WEBHOOKで特定URLにアクセスされたら
　↓
Data storeからrefresh_tokenを取得し
　↓
freee APIでtokenを取得し
　↓
Data storeにrefresh_tokenを再格納し
　↓
freeeの打刻APIを叩く

という流れの処理になります。
１つずつ処理を書くと、かなり長くなってしまうので、各ステップのキャプチャを貼っておくので、
こちらの通り入力いただければ大丈夫です。
各キャプチャに注記を書いています。

![スクリーンショット 2020-12-25 14.51.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/1395fa41-6f21-0866-9a07-2f1825b39d26.png)
Webhookの設定です。初期状態だとプルダウンになにもないと思うので、
「ADD」で追加してください。


![スクリーンショット 2020-12-25 14.51.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/bd920d54-1ecd-c5ca-8c4e-559f56ab299f.png)

Data storeからrefresh_tokenを取得してきます。
Data storeを設定する時に「Get Record」を選択するようにしてください。

![スクリーンショット 2020-12-25 14.51.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/2b48de58-0a59-f665-d4c4-5715a675ec2a.png)
![スクリーンショット 2020-12-25 14.51.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/8abfb268-e76e-c945-9ea3-2b3b8d3320fb.png)


freeeのtoken取得APIです。refresh_tokenから、実際に使えるtokenを取得する必要があるため、
この処理が必要になります。
黒で塗りつぶしてある部分はfreeeで設定したアプリの情報を使ってください。

![スクリーンショット 2020-12-25 14.52.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/5fc726d6-556d-ed9d-36ee-e20e5073c66c.png)

Data storeからrefresh_tokenを更新します。
一度使ったrefresh_tokenは使えなくなるためです。
Data storeを設定する時に「Update Record」を選択するようにしてください。


![スクリーンショット 2020-12-25 15.03.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/45f4cd5b-79b7-9ca6-60b4-a6bb4991e6b0.png)
![スクリーンショット 2020-12-25 15.12.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/4f7e8c50-4ef7-14d8-5208-9f84654983e0.png)

freee APIで打刻します。
必要なtokenなどはそれまでの処理から取ってきています（青色背景のところ）。

# テスト方法
scenarioの左下にある「RUN once」を押して、Webhookで発行されたURLに
アクセスすると打刻処理が一度だけ行われます。

![ezgif.com-gif-maker (4).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23578/7c87869d-36d2-ff57-f65d-e091ff36ae83.gif)

途中に表示されている「Accepted」がWebhookの画面です。
右上の「１」とかが処理した結果なので、そこを見るとデバッグができます。

# まとめ
通常、freeeのAPIを使う場合は、認証方法やrefresh_tokenの保持など、
プログラムで組まないと難しいですが、今回全てintegromatを使ってノーコードで
実現することができました。
integromatでfreeeのAPIを操作するURLを作ることができたことによって、
たとえば下記のようなことも簡単にできるようになりました。

- チャットツールで特定のメッセージを送ると打刻する
- チャットツールで特定のメッセージを送ると勤怠情報を確認する
- 勤怠漏れを定期的にチェックして通知する

他にも、会計freeeのAPIなどでも使えますし、同じ認証方式（oAuth2.0）の別サービスAPIでも
同様なので、プログラミングができない人でも効率化することができます。
これで皆が楽になっていければ幸いです！

それでは。