こんにちは、もり(@moripro3)です!
GAS×freeeAPI連携の方法を紹介します。
- freeeAPI「連携アプリ」の登録方法
- 「連携アプリ」とGASを連携する方法
- APIを使用した処理の例(GETリクエストでデータ取得)
※この記事は、freee公式サイトfreee APIのアクセストークンを取得するの内容を元に作成しています。作業を進めるうえで私自身が詰まったところ、困ったところを補足しています。
Contents
クラウド会計ソフトfreeeのAPI連携とは
クラウド会計ソフトfreeeの各種データは、CSV形式でインポート・エクスポートができますが、freeeAPIを使用することで、Googleスプレッドシートとfreeeの間で直接データのやりとりが可能になります。
たとえば、スプレッドシートで管理しているデータが、freeeに直接インポートできない形式の場合、手作業で登録しなければなりませんが、GASでfreeeAPIを使うことで、直接freeeにデータを送信(登録)することもできます。
下記図が全体像で、左上赤枠の「連携アプリとfreeeを利用するエンドユーザー」が私たちです。
(引用元:freee APIのアクセストークンを取得する)
【前提条件と前提知識】
この記事の前提条件と前提知識です。GASを使ったことのある方を想定して書いているので、エディタの使い方などの説明は省略しています。
- 前提条件:freeeのアカウントを保有している
- 前提知識:Googleスプレッドシートと、それに紐づくスクリプトを操作したことがある。ログ出力の方法がわかる。
【事前準備】スクリプトIDの確認
現在お使いのスプレッドシート、もしくは、新規のスプレッドシートを作成して、スクリプトエディタを開きます。GASのコードはあとで書くので、とりあえず空っぽでOKです。
スクリプトエディタで「ファイル → プロジェクトのプロパティ」を選択し、「スクリプトID」を確認します。後述の連携アプリの登録時に使うので、ここで確認した値をメモ帳などにコピペしておきましょう。
以前が事前準備です。それでは連携アプリを作成します。
freeeAPIにアクセスするための「連携アプリ」を作成する
freeeAPI経由でデータサーバーにアクセスするための「クライアントアプリ」を作成します。このクライアントアプリのことを、この記事では「連携アプリ」と呼びます。
(引用元:freee APIのアクセストークンを取得する)
freeeアプリストアへアクセスし、右上のログインをクリックします(※すでにfreeeにログイン済みの場合、ログイン画面は出ません)
freeeアカウントでログインします(普段のログイン方法でOKです)
事業所アカウントを選択します。
※アカウントに紐づくすべての事業所を操作できるようになるので、複数事業所をお持ちの場合、ここで選択する事業所はどれでもかまいません。よく使う事業所を選択しておくとよいでしょう。
画面右上の「アプリ管理」をクリックします。
「連携アプリ」を作成する
連携アプリを作成します。「新規追加」をクリックします。
アプリ名・概要を入力し、利用規約を読んで同意にチェックし、「作成」をクリックします。※基本情報はあとから変更できます。
連携アプリが作成されて、「Client ID」と「Client Secret」が発行されます。これは、freeeAPIにアクセスするためのIDとパスワードのようなものです(後で紹介するGASのスクリプト内に記述します)
コールバックURLの登録
つづいて、連携アプリに「コールバックURL」を設定します。コールバックURLとは、連携完了後の遷移先URLです。
コールバックURLの形式がこちらです。スクリプトIDの部分に、先ほど調べた「スクリプトID」をあてはめましょう。
https://script.google.com/macros/d/スクリプトID/usercallback
コールバックURLの初期値を変更(上書き)して「下書き保存」をクリック
以上で連携アプリの登録が完了しました!
GASとfreee連携アプリを認証をする
それではGASと連携アプリを認証します。
認証用ライブラリ(OAuth2)の追加
スクリプトエディタを開き、「リソース → ライブラリ」を選択して、認証用ライブラリ(OAuth2)を追加します。
ライブラリのプロジェクトキーがこちらです。
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
「ライブラリを追加」の欄に貼り付けして「追加」をクリックします。
「このライブラリ登録をする時点の最新バージョン」を選択して、「保存」をクリックします。
GASで連携認証をする
先ほど作成した連携アプリの「Client_ID」と「Client_Secret」を、認証作業に使用します。
以下が、認証用のスクリプトです。
スクリプトエディタに貼り付けて、変数「Client_ID」と「Client_Secret」に連携アプリの値を設定したら、alertAuth関数を実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
/* 参照ライブラリ title |OAuth2 project_key |1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF */ //連携アプリ情報 const Client_ID = 'ここに連携アプリの「Client ID」を設定'; const Client_Secret = 'ここに連携アプリの「Client Secret」を設定'; //認証のエンドポイント function alertAuth() { var service = getService(); var authorizationUrl = service.getAuthorizationUrl(); Logger.log(authorizationUrl);//認証用URLがログ出力される } //freeeAPIのサービスを取得 function getService() { return OAuth2.createService('freee') .setAuthorizationBaseUrl('https://accounts.secure.freee.co.jp/public_api/authorize') .setTokenUrl('https://accounts.secure.freee.co.jp/public_api/token') .setClientId(Client_ID) .setClientSecret(Client_Secret) .setCallbackFunction('authCallback') .setPropertyStore(PropertiesService.getUserProperties()) } //認証コールバック関数 function authCallback(request) { var service = getService(); var isAuthorized = service.handleCallback(request); if (isAuthorized) { return HtmlService.createHtmlOutput('認証に成功しました。タブを閉じてください。'); } else { return HtmlService.createHtmlOutput('認証に失敗しました。'); } } |
認証URLにアクセスする
alertAuth関数を実行すると、認証URLがログに出力されます。このURLをコピーして、ブラウザのURL欄に貼り付けてアクセスします。
「許可する」をクリックします。
成功メッセージが出れば完了です。
おつかれさまでした。以上で認証作業が完了です。
事業所IDを確認する
連携認証が済みました。これで、クライアントアプリからfreeeのデータサーバにアクセスできるようになりました。
さて、これでfreeeAPIを使えるようになったのですが、今後freeeAPIを使ってデータ取得、送信をするためには「事業所ID」が必要です。
この事業所IDはfreeeの画面では確認できないので、下記のスクリプトを実行して確認しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function getMyCompanies() { const accessToken = getService().getAccessToken(); const requestUrl = 'https://api.freee.co.jp/api/1/companies'; const params = { method : 'get', headers : {'Authorization':'Bearer ' + accessToken} }; const response = UrlFetchApp.fetch(requestUrl,params); Logger.log(response); } |
このようなログが出力されます。idの値が「事業所ID」です。
1 |
{"companies":[{"id":xxxxxxx,"name":"もり個人事務所","name_kana":"モリコジンジムショ","display_name":"もり","role":"admin"},{"id":xxxxxxx,"name":"法人テスト環境","name_kana":"ホウジンテストカンキョウ","display_name":"法人ベーシックプラン: 開発用テスト環境","role":"admin"},{"id":xxxxxxx,"name":"顧問先1","name_kana":"コモンサキ1","display_name":"顧問先1","role":"admin"}]} |
GAS×freeeAPIの記事は「カテゴリ:会計freee」で紹介しています。ぜひご覧ください。