FileMakerからfreee会計へ登録する方法

webAPIを使用し、FileMakerからfreee会計へ取引の登録を行う方法をまとめました。両システムの連動をすることで、独自の資金繰り表作成や、未回収表の作成ができるようになります。記事内で画像も交えて方法を詳しく解説しております。ご興味がある方には無料相談も行っています!

freeeとFileMakerとの連動ができれば、独自に資金繰り表を作成したり、
未回収表の作成を行うことができるようになります。
興味がある方は、無料で相談に応じますので、
お気軽にお問合せください。

はじめに

こちらのブログでは、FileMakerとfreeeを連携し、
以下の図の動きをFileMakerに取り入れ、収支情報をfreeeへ登録する方法を記載しています。

freeeで設定する内容

freeeでアカウントを作成し、freeeにログインできるようにしておきましょう。
次にfreeeアプリストアを開き[開発者ページ]を開いてください。
今すぐアプリを作成を押すと以下の様な画面が開きますので、
基本情報を入力し、作成ボタンを押してください。

新しいアプリの作成が完了すると、アプリの基礎情報が表示されますので、

  • コールバックURL → jsonを返すためのURL
  • Client ID → clientを識別するためのID
  • Client Secret → アクセスするために必要な情報
  • Webアプリ認証用URL → ユーザー本人か認識するための情報

以上の4つの情報をメモしておいてください。

FileMakerで設定する内容

これからFileMakerに実装する方法を説明させていただきます。
設定する項目が多く、サンプルがないと分かりずらいと思いますので、
ぜひ下記のボタンからアプリをダウンロードして、
サンプルファイルを見ながら設定方法をご覧ください。

ダウンロードはこちら

それではfreeeで取得した情報を、実際にFileMakerに実装してみましょう。

アクセストークンの取得
1.access token → スクリプトを動かす際に必要
2.refresh token → アクセストークンの再取得を行う際に必要
3.返ってくるjson → 1・2の取得ができているのか確認する際に必要

jsonで帰ってくる情報を今後も使用するため、
上の3つを記録するためのjson記録用テーブルとフィールドを作成してください。

*以降、テーブル名を『テーブルjson』と記入します。

*access tokenとは
アプリケーションとユーザー間で、データの利用を許可することを示すものです。

*refresh tokenとは
アクセストークンを再取得するためのものです。

※アクセストークンには情報漏洩のリスクを減らすため、有効期限があります。
リフレッシュトークンを使用し、アクセストークンを新しく取得できますので、
次のアクセストークンを取得するため、現在のリフレッシュトークンも記録しておく必要があります。

freeeで取得したWebアプリ認証用URLから、認可コードを取得してください。
(認可コードは使用期限が10分のため、使用期限を過ぎてしまった場合は再取得してください。)

FileMakerのテーブルjsonで、1回目(リフレッシュトークンがない場合)の
アクセストークンを取得するボタンを作成します。

  • スクリプト内容
    • 以下にスクリプトと内容を記載しました。
    • []にfreeeアプリ作成で取得した情報を入力してください。
      • (例 -d“redirect_uri=[コールバックURI]” → -d“redirect_uri=urn:ietf:wg:oauth:2.0:oob” )
スクリプト内容
テキストを挿入
ターゲット:$curl
-i -X POST \
-H “Content-Type:application/x-www-form-urlencoded” \
-d “grant_type=authorization_code” \
-d “client_id=[Client ID]” \
-d “client_secret=[Client Secret]” \
-d “code=[認可 code]” \
-d “redirect_uri=[コールバックURI]” \
URLから挿入
ターゲット:$結果
cURLのオプション:$curl
“https://accounts.secure.freee.co.jp/public_api/token”
フィールド設定
テーブルjson::返ってくるjson
JSONFormatElements ( $結果 )
フィールド設定
テーブルjson::access token
JSONGetElement ( $結果 ; “access_token” )
フィールド設定
テーブルjson::refresh token
JSONGetElement ( $結果 ; “refresh_token” )

以下は実際に設定したスクリプトの写真です。

作成した3つのフィールド
1.access token
2.refresh token
3.返ってくるjson に値が返ってきた場合成功しています。
(エラーなどで返ってこなかった場合、認可コードを再取得してもう一度入力し直してください。)

2回目の情報取得

  • スクリプト内容
    • 以下にスクリプトと内容を記載しました。
    • []にfreeeアプリ作成で取得した情報を入力してください。
      • (例 -d“redirect_uri=[コールバックURI]” → -d“redirect_uri=urn:ietf:wg:oauth:2.0:oob” )

※1回目のアクセストークン取得スクリプトは今後使用しない
(次回からリフレッシュトークンを使用する)ため、
フィールドのみを残し、スクリプトは新しく作成してください。

スクリプト内容
テキストを挿入
ターゲット:$curl
-i -X POST \
-H “Content-Type:application/x-www-form-urlencoded” \
-d “grant_type=refresh_token” \
-d “client_id=[Client ID]” \
-d “client_secret=[Client Secret]” \
-d “refresh_token={refresh_ token}”\
-d “redirect_uri=[コールバックURI]”
変数を設定
名前:$cURL
Substitute ( $curl ; “{refresh_ token}” ; テーブルjson::refresh_token )
変数を設定
名前:$curl
Substitute ( $curl; ¶ ; “” )
URLから挿入
ターゲット:結果
cURLオプション:$curl
“https://accounts.secure.freee.co.jp/public_api/token”
フィールド設定
テーブルjson::access token
JSONGetElement ( $結果 ; “access_token” )
フィールド設定
テーブルjson::refresh token
JSONGetElement ( $結果 ; “refresh_token” )

以下は実際に設定したスクリプトの写真です。

1回目で取得したaccess tokenとrefresh tokenが変更されていれば成功です。
(エラーなどで値が返ってこなかった場合、認可コードを再取得して、
再度こちらより試していただければと思います。 )

freeeに登録する際に必要となる情報の取得方法を説明します。

必要な情報は以下の4点です。

①事務所情報
②取引先情報
③勘定科目情報
④税区分情報

事務所情報
事務所情報を取得するため、以下のフィールドを作成してください。

1.事務所json → 事務所の一覧情報が正しく返ってきているか確認する際に必要

  • スクリプト内容
    • 以下にスクリプトと内容を記載しました。
スクリプト内容
テキストを挿入
ターゲット:$curl
-i -X GET \
-H “Authorization:Bearer {access_token}” \
-H “Content-Type:application/json” \
変数を設定
名前:$curl
Substitute ( $curl ; “{access_token}” ; テーブルjson::at_accesst )
URLから挿入
ターゲット:$結果
cURLオプション:$curl
“https://api.freee.co.jp/api/1/users/me?companies=true”
フィールド設定
テーブルjson::事務所json
JSONFormatElements ( $結果 )

以下は実際に設定したスクリプトの写真です。

作成した事務所jsonフィールドにjson形式で値が返ってきたら成功です。
ここで返ってくる“id”は、会社番号になります。
念の為、idを記録しておいてください。

取引先情報

取引先を登録するには取引先idが必要になります。
既に取引先をfreeeから登録している場合、取引先idをFileMakerで新しく記憶させる必要があるため、

1.取引先
2.取引先id

以上2つを記録するための取引先登録用テーブルとフィールドを作成してください。

*以降、テーブル名を『テーブル取引先』と記入します。

また、取引先idを取得するため、テーブルjson

1.取引先json
グローバルフィールドを作成してください。

  • スクリプト内容
    • 以下にスクリプトと内容を記載しました。

※取引先情報の登録内容なので、新しく取引先情報取得用のスクリプトを作成してください。

スクリプト内容
レイアウト切り替えテーブルjson
テキストを挿入
ターゲット:$curl
-i -X GET
-H “Authorization:Bearer {access_token}”
-H “Content-Type:application/json”
変数を設定
名前:$curl
Substitute ( $curl ; “{access_token}” ;テーブルjson::access token )
変数を設定
名前:$会社id
JSONGetElement ( テーブルjson::事務所json ; “user.companies[0].id” )
URLから挿入
ターゲット:$結果
オプション:$curl
“https://api.freee.co.jp/api/1/partners?company_id=”&$会社id
変数を設定
$取引先json
JSONFormatElements ( $結果 )
レイアウト切り替えテーブル取引先
変数を設定
名前:$数
0
変数を設定
名前:$jsonL
JSONListKeys ( $取引先json ; “partners” )
変数を設定
名前:$MAX
ValueCount ( $JSONL )
Loop
Exit Loop If$数 ≥ $Max
新規レコード/検索条件
フィールド設定
テーブル取引先::取引先
JSONGetElement ( $取引先json ; “partners[” & $数 & “].name” )
フィールド設定
テーブル取引先::取引先id
JSONGetElement ( $取引先json ; “partners[” & $数 & “].id” )
変数を設定
名前:$数
$数 + 1
End Loop
レコード/検索条件確定

以下は実際に設定したスクリプトの写真です。

(エラーなどで値が返ってこなかった場合、
アクセストークンの再取得を行っていただければと思います。
それでも動かない場合は、
$会社idの箇所に事務所情報で取得した会社番号を手入力いただければと思います。)

次に取引先をFileMakerから新規登録した際に、取引先idを自動で取得する方法を説明します。

テーブルjsonへ新規に下記2点のフィールドを作成してください。
1.取引先get
2.取引先取得結果

設定内容は以下です。
1.取引先get

配置したフィールドに直接手入力で
JSONGetElement ( 取引先json ; “partner.id” ) と、値を挿入してください。

2.取引先取得結果
計算フィールドにし、計算内容は
Case(
Left( JSONFormatElements ( Evaluate(取引先get) ); 1) = “?”;
Evaluate(取引先get);
JSONFormatElements ( Evaluate(取引先get) ))
と、計算式を入力してください。

以下は実際に設定した計算フィールド内容の写真です。

  • スクリプト内容
    • 以下にスクリプトと内容を記載しました。
    • *[]*にfreeeアプリ作成で取得した情報を入力してください。
      • (例 -d“redirect_uri=*[コールバックURI]*” → -d“redirect_uri=urn:ietf:wg:oauth:2.0:oob” )

※取引先フィールド押下でスクリプトを動かすため、ボタンは作成せず、スクリプトトリガ設定のOnObjectExitで新しいスクリプトを設定してください。

スクリプト内容
IfisIsEmpty (テーブル取引先::取引先id )
変数を設定
名前:$取引先
テーブル取引先::取引先
レイアウト切り替えテーブルjson
変数を設定
名前:$会社id
JSONGetElement ( テーブルjson::事務所json ; “user.companies[0].id” )
テキストを挿入
ターゲット:$curl
-i -X POST \
-H “Content-Type:application/
x-www-form-urlencoded” \
-d “grant_type=refresh_token” \
-d “client_id=*[Client ID]*” \
-d “client_secret=*[Client Secret]*” \
-d “refresh_token={refresh}”\
-d “redirect_uri=*[コールバックURI]*”
変数を設定
名前:$curl
Substitute ( $curl ; “{refresh}” ;
テーブルjson::refresh token )
変数を設定
名前:$curl
Substitute ( $curl; ¶ ; “” )
URLから挿入
ターゲット:$結果
オプション:$curl
“https://accounts.secure.
freee.co.jp/public_api/token”
フィールド設定
テーブルjson::access token
JSONGetElement
( $結果 ; “access_token” )
フィールド設定
テーブルjson::refresh token
JSONGetElement
( $結果 ; “refresh_token” )
変数を設定
名前:$access
テーブルjson::access token
テキストを挿入
ターゲット:$curl
-X POST -H “accept: application/json”
-H “Authorization: Bearer {access_token}”
-H “Content-Type: application/json”
-H “X-Api-Version: 2020-06-15”
-d “{\”company_id\”:{会社id},
\”name\”:\”{name}\”
,\”code\”:\”{name}\”,
\”shortcut1\”:\”\”,\”shortcut2\”:\”
\”,\”org_code\”:null,\
“country_code\”:\”JP\”,
\”long_name\”:\”
\”,\”name_kana\”:\”\”,
\”default_title\”:\”御中\”,\”phone\”:\”\”,
\”contact_name\”:\”\”,\”email\”:\”\”}”
変数を設定
ターゲット:$curl
Substitute ( $curl ; “{access_token}” ; $access )
変数を設定
ターゲット:$curl
Substitute ( $curl ; “{会社id}” ; $会社id )
変数を設定
ターゲット:$curl
Substitute ( $curl ; “{name}” ; $取引先 )
URLから挿入
ターゲット:テーブルjson::取引先json
cURLオプション:$curl
“https://api.freee.co.jp/api/1/partners”
変数を設定
名前:$id
テーブルjson::取引先取得結果
レイアウト切り替え元のレイアウト
フィールド設定
テーブル取引先::取引先id
$id
End If

以下は実際に設定したスクリプトの写真です。

勘定科目情報

勘定科目については、科目が多くjsonから取得することが難しいため、
一度FileMaker内に勘定項目を登録し、
登録内容から検索して、勘定idを取得しようと思います。

そのため、
1.勘定科目
2.勘定科目id
以上2つを記録するための勘定科目登録用テーブルとフィールドを作成してください。

*以降、テーブル名を『テーブル勘定』と記入します。

  • スクリプト内容
    • 以下にスクリプトと内容を記載しました。

※勘定科目の登録内容のため、新規に勘定科目取得用のスクリプトを作成してください。

スクリプト内容
レイアウト切り替えテーブルjson
変数を設定
名前:$会社id
JSONGetElement (テーブルjson::事務所json ;
“user.companies[0].id” )
テキストを挿入
ターゲット:$curl
-X GET -H “accept: application/json”
-H “Authorization: Bearer {access_token}”
-H “X-Api-Version: 2020-06-15”
変数を設定
名前:$curl
Substitute ( $curl ; “{access_token}” ;
テーブルjson::access token )
URLから挿入
ターゲット:$結果
cURLオプション:$curl
“https://api.freee.co.jp/api/1/account_items?company_id=”&$会社id
レイアウト切り替え元のレイアウト
変数を設定
名前:$数
0
変数を設定
名前:$JSONL
JSONListKeys ( $結果 ; “account_items” )
変数を設定
名前:$MAX
ValueCount ( $JSONL )
Loop
Exit Loop If$数 ≥ $Max
新規レコード/検索実行
フィールド設定
テーブル勘定::勘定科目
JSONGetElement ( $結果 ; “account_items[” & $数 & “].name” )
フィールド設定
テーブル勘定::勘定科目id
JSONGetElement ( $結果 ; “account_items[” & $数 & “].id”)
変数を設定
名前:$数
$数 + 1
End Loop
レコード/検索条件確定

以下は実際に設定したスクリプトの写真です。

(エラーとなった場合は、$会社idの箇所に事務所情報で取得した会社番号を手入力してください。)

税区分情報

税区分については項目が多く、jsonから取得することが難しいため、
一度FileMaker内に勘定項目を登録し、
登録内容から検索して、勘定idを取得します。

そのため、
1.税区分
2.税区分id
以上2つを記録するための税区分登録用テーブルとフィールドを作成してください。

*以降、テーブル名を『テーブル税区分』と記入します。

  • スクリプト内容
    • 以下にスクリプトと内容を記載しました。

※税区分の登録内容のため、新しく税区分取得用のスクリプトを作成してください。

スクリプト内容
レイアウト切り替えテーブルjson
テキストを挿入
ターゲット:$curl
-X GET -H “accept: application/json”
-H “Authorization: Bearer {access_token}”
-H “X-Api-Version: 2020-06-15”
変数を設定
名前:$curl
Substitute ( $curl ; “{access_token}” ;テーブルjson::access token )
URLから挿入
ターゲット:$結果
cURLオプション:$curl
“https://api.freee.co.jp/api/1/taxes/codes”
レイアウト切り替え元のレイアウト
変数を設定
$数
0
変数を設定
$JSONL
JSONListKeys ( $結果 ; “taxes” )
$MAXValueCount ( $JSONL )
Loop
Exit Loop If$数 ≥ $Max
新規レコード/検索条件
フィールド設定
テーブル税区分::税区分id
JSONGetElement ( $結果 ; “taxes[” & $数 & “].code”)
フィールド設定
テーブル税区分::税区分
JSONGetElement ( $結果 ; “taxes[” & $数 & “].name_ja” )
変数を設定
$数
$数 + 1
End Loop
レコード/検索条件確定

以下は実際に設定したスクリプトの写真です。

freeeへの登録方法

以上でfreee連携に必要な情報は取得できましたので、実際にfreeeに登録してみます。

1.発生日
2.取引先
3.勘定科目
4.金額
5.税区分
以上の5つを記録するための取引登録用テーブルとフィールドを作成してください。

*以降、テーブル名を『テーブル取引』と記入します。

  • スクリプト内容
    • 以下にスクリプトと内容を記載しました。
    • []にfreeeアプリ作成で取得した情報を入力してください。
      • (例 -d“redirect_uri=[コールバックURI]” → -d“redirect_uri=urn:ietf:wg:oauth:2.0:oob” )
スクリプト内容
変数を設定
名前:$発生日
Substitute ( GetAsDate (テーブル取引::発生日 );”/”;”-“)
変数を設定
名前:$取引先
テーブル取引::取引先
変数を設定
名前:$勘定
テーブル取引::勘定科目
変数を設定
名前:$金額
テーブル取引::金額
変数を設定
名前:$税区分
テーブル取引::税区分
IfIsEmpty ( $発生日 ) or IsEmpty ( $取引先 )
or IsEmpty ( $勘定 ) or IsEmpty ( $金額 )
カスタムダイアログを表示“顧客名・日付・勘定科目・金額は入力必須項目となります。
再度ご確認をお願いします。”
現在のスクリプト終了
End If
レイアウト切り替えテーブル取引先
検索モードに切り替え
フィールド設定
テーブル取引先::取引先
“==” & $取引先
エラー処理オン
検索実行
変数を設定
名前:$結果
Get ( 最終エラー )
エラー処理オフ
If$結果 = 401
カスタムダイアログ取引先情報がありませんでした。
全レコードを表示
全スクリプト終了
End If
変数を設定
名前:取引先id
テーブル取引::取引先id
レイアウト切り替えテーブル勘定
検索モードに切り替え
フィールド設定
テーブル勘定::勘定科目
$勘定
エラー処理オン
検索実行
エラー処理オフ
If$結果 = 401
カスタムダイアログ勘定科目情報がありませんでした。
全レコードを表示
全スクリプト終了
End If
変数を設定
名前:勘定id
テーブル取引::勘定id
レイアウト切り替えテーブル税区分
検索モードに切り替え
フィールド設定
テーブル税区分::税区分
$税区分
エラー処理オン
検索実行
エラー処理オフ
If$結果 = 401
カスタムダイアログ入力されている税区分の情報がありませんでした。
全レコードを表示
全スクリプト終了
End If
変数を設定名前:税区分id
レイアウト切り替えテーブルjson
変数を設定
名前:$会社id
JSONGetElement (テーブルjson::事務所json ; “user.companies[0].id” )
テキストを挿入
ターゲット:$curl
-i -X POST \
-H “Content-Type:application/
x-www-form-urlencoded” \
-d “grant_type=refresh_token” \
-d “client_id=[Client ID]” \
-d “client_secret=[Client Secret]” \
-d “refresh_token={refresh}”\
-d “redirect_uri=[コールバックURI]”
変数を設定
名前:$curl
Substitute ( $curl ; “{refresh}” ; テーブルjson::refresh token )
変数を設定
名前:$curl
Substitute ( $curl; ¶ ; “” )
URLから挿入
ターゲット:$結果
cURLオプション:$curl
“https://accounts.secure.freee.co.jp/public_api/token”
フィールド設定
テーブルjson::access token
JSONGetElement ( $結果 ; “access_token” )
フィールド設定
テーブルjson::refresh token
JSONGetElement ( $結果 ; “refresh_token” )
レコード/検索条件確定
テキストを挿入
ターゲット:$curl
-X POST
-H “accept: application/json”
-H “Authorization: Bearer {access_token}”
-H “Content-Type: application/json”
-H “X-Api-Version: 2020-06-15”
-d “{\”issue_date\”:\”{day}\”,\”type\”:\”income\”,
\”company_id\”:{会社id},\”partner_id\”:{取引先},
\”ref_number\”:\”null\”,\”details\”:[{\”tax_code\”:{税区分},
\”account_item_id\”:{勘定},\”amount\”:{金額},
\”section\”:[],\”tag_ids\”:[],\”description\”:\”\”}]}”
変数を設定
名前:$curl
Substitute ( $curl ; “{access_token}” ; テーブルjson::access token )
変数を設定
名前:$curl
Substitute ( $curl ; “{会社id}” ; $会社id )
変数を設定
名前:$curl
Substitute ( $curl ; “{day}” ; $発生日 )
変数を設定
名前:$curl
Substitute ( $curl ; “{内容}” ; “” )
変数を設定
名前:$curl
Substitute ( $curl ; “{金額}” ; $金額 )
変数を設定
名前:$curl
Substitute ( $curl ; “{取引先}” ; $取引先id )
変数を設定
名前:$curl
Substitute ( $curl ; “{税区分}” ; $税区分id )
変数を設定
名前:$curl
Substitute ( $curl ; “{勘定}” ; $勘定id )
URLから挿入
ターゲット:$結果
cURLオプション:$curl
“https://api.freee.co.jp/api/1/deals”
フィールド設定
テーブルjson::返ってくるjson
JSONFormatElements ( $結果 )
レイアウト切り替え元のレイアウト

以下は実際に設定したスクリプトの写真です。

ここまでできたら完成です。
実際に動作するか確認します。
FileMakerで以下の情報を作成しました。

FileMakerで「freeeへ登録」スクリプトを動かした後に、freee会計のサイトを更新すると、

この様に反映させることができました。

まとめ

APIを使用して、FileMakerからfreee会計へ取引情報を登録する方法を紹介いたしました。
私がFileMaker初心者というのもあり、試行錯誤した結果このような内容になりました。
参考にしていただけたら嬉しいです。

お問い合せ

freeeとFileMakerとの連動ができれば、独自に資金繰り表を作成したり、
未回収表の作成を行うことができるようになります。
興味がある方は、無料で相談に応じますので、
お気軽にお問合せください。

お問い合わせ

関連する情報

担当者

yamaru

LET's GET SOCIAL