こんにちは。ITライターのもり(@moripro3)です!
「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。
前回の記事では、freeeAPIから取得したデータをスプレッドシートに出力する方法を紹介しました。
こんにちは。ITライターのもり(@moripro3)です! 「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。 前回の記事では、GASでfreeeAPIを使うための作業手順を紹介しました[…]
今回の記事では、スプレッドシートのデータを、freeeAPIを使ってfreeeに登録する方法を紹介します。このような方にオススメです。
- freeeのデータ登録で、csvファイルを経由する手間を省いて、スプレッドシートのデータをワンクリックで登録したい人
- freeeAPIの公式リファレンスを読めるようになりたい人
スプレッドシートのデータをfreeeAPIで登録する
この記事では、「スプレッドシートのデータを元にした登録」の題材として「部門の作成」を紹介します。他にも、取引・請求書・勘定科目一覧・品目一覧など、色々なデータをfreeeAPIで登録することができます。
※freeeには、部門等の各種マスタを一括作成できる「csvインポート機能」もありますが、この記事のテーマである「部門の作成」は処理がシンプルなので、練習題材として使用しています。ぜひこの記事を活用して他のスクリプトを作ってみてください。
まずはfreeeAPIの情報を確認していきましょう。
APIを使ったデータ作成のメソッドを確認する
APIを使ったデータの作成(登録)は、HTTPリクエストのPOSTメソッドを使用します。
処理 | メソッド |
---|---|
データの取得 | GET |
データの作成 | POST |
データの更新 | PUT |
データの削除 | DELETE |
freeeAPIにアクセスするリクエストURLを確認する
APIを使う上でポイントになるのが「リクエストURL」です。リクエストURLとは、APIにアクセスする宛先のことで、freeeAPIでは下記の3つを結合して作ります。
- ①APIエンドポイント(固定値) = https://api.freee.co.jp/
- ②個別URL = ※リファレンスで確認
- ③パラメータ = ※リファレンスで確認
①+②+③を結合した文字列が、目的のリクエストURLです。
「部門の作成」について②③の値を確認します。まず「②個別URL」です。
「③パラメータ」は無しです(No parameters)
以上の情報から「部門の作成」のリクエストURLはこうなります。
- ①APIエンドポイント = https://api.freee.co.jp/
- ②個別URL = /api/1/sections
- ③パラメータ = 無し
スプレッドシートにデータを用意する
APIに送信して登録するデータのことを「リクエストボディ」と呼びます。freeeAPI公式リファレンスの「Request body」の欄の「Model」をクリックして、データ登録に必要な項目を確認します。
赤文字の*は、必須指定の項目です。それ以外は任意指定です。
上記の項目説明を見ながら、スプレッドシートにデータを用意します(必須項目の事業所IDはスクリプト内に記述します)
スプレッドシートのデータをfreeeAPIに送信するスクリプト
これで準備ができたので、スクリプトを書いていきます。この記事では処理のポイント部分のみ解説します。
ポイント:スプレッドシートのデータ(配列)をJSONデータにする
APIへの送信データ本文(payload)は、JSONデータを指定します。スプレッドシートに用意したデータは「配列」として取得されるので、「配列」を「JSONデータ」に変換する処理が必要です。下記の2ステップでJSONデータを作ります。
- 【ステップ1】「配列」を「オブジェクト」にする
- 【ステップ2】「オブジェクト」を「JSONデータ」にする
スプレッドシートから取得したデータはこのような配列です。
[ '開発部', 'システム開発部', 'KAI', 'DEV' ]
この配列から、 {キー : 値} のセットであるオブジェクトを作ります。これが1件の部門です。
{ company_id: 'xxxxxxx', name: '開発部', long_name: 'システム開発部', shortcut1: 'KAI', shortcut2: 'DEV' }
上記のオブジェクトを、JSON.stringify()メソッドでJSONデータに変換します。
(参考)公式リファレンスでリクエストボディ(JSONデータ)のExample Valueを確認できます。
スクリプトまとめ
スプレッドシートのデータをfreeeAPIに送信してデータ登録するスクリプトです。
function createSections() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("登録"); const access_token = getService().getAccessToken(); const url = "https://api.freee.co.jp/api/1/sections"; //リクエストURL const values = sheet.getDataRange().getValues(); for (let i = 1; i < values.length; i++) { const json = createJSON_(values[i]); postfreeeAPI_(access_token, json, url); } } /** * 配列からJSONデータを作成する * * @param {Object} array 1件分の配列 * @return {Object} obj JSONデータ */ function createJSON_(array) { const company_id = "事業所IDを設定"; //事業所ID const obj = { company_id: company_id, name: array[0], long_name: array[1], shortcut1: array[2], shortcut2: array[3] } for (let key in obj) { //値無しのキーを削除 if (obj[key] == null || obj[key] === "") delete obj[key]; } //オブジェクトをJSONデータに変換 const json = JSON.stringify(obj); return json; } /** * freeeAPIにPOSTリクエストを送信する * * @param {string} access_token アクセストークン * @param {Object} json リクエストボディ * @param {string} url リクエストURL */ function postfreeeAPI_(access_token, json, url) { const params = { method: "POST", contentType: "application/json", headers: { "Authorization": "Bearer " + access_token }, payload: json, muteHttpExceptions: true //エラー発生時にログ出力 } const response = UrlFetchApp.fetch(url, params); Logger.log(response); Utilities.sleep(1000); //短時間の連続アクセスを回避 }
スクリプト実行結果
スクリプトを実行すると、登録結果をログで確認できます。何らかのエラーが発生した場合も、エラーが出力されます。
スプレッドシートのデータ(5件)がfreeeに登録されました。
各部門の詳細画面です。
【まとめ】GAS×freeeAPIでスプレッドシートのデータをfreeeに登録する
この記事では、freeeAPIを使用したデータ登録の題材として「部門の作成」をしました。紹介したスクリプトの下記2つを変更することで、他の種類のデータ登録にも流用できます。
- リクエストURL = APIエンドポイント + 個別URL + パラメータ
- リクエストボディ = スプレッドシートにデータ(配列)を用意して、JSONデータに変換したもの
csvインポート機能を使わずワンクリックでfreeeにデータ登録できるので、同じ作業を定期的に実施する場合は、このようにGASでスクリプトを書いておくとよいでしょう。