freee会計API連携を設計—最初は参照専用


会計APIは、便利さと事故の影響が同時に大きい連携です。最初から取引登録を自動化せず、事業所、勘定科目、税区分、取引一覧を読むところから始めました。

先に決めた安全境界

設計時に、次のルールを固定しました。

  • 初期値はFREEE_ENABLE_WRITES=false
  • トークンは専用ファイルへ保存し、権限を絞る
  • AIの回答へアクセストークンやrefresh tokenを出さない
  • 一件あたりの登録金額に上限を設ける
  • API呼び出し結果と失敗を監査ログへ残す
  • 削除APIは最初の版に入れない

「使わなければ安全」ではなく、「使おうとしても拒否される」状態をコード側で作ることが重要です。

OAuth 2.0で接続する

freee会計APIはOAuth 2.0を使用します。アプリを登録し、クライアントID、クライアントシークレット、redirect URIを取得します。記事では必ずダミー値を使います。

FREEE_CLIENT_ID=YOUR_CLIENT_ID
FREEE_CLIENT_SECRET=YOUR_CLIENT_SECRET
FREEE_COMPANY_ID=123456
FREEE_ENABLE_WRITES=false

認可後のトークンは失効や更新を前提に扱います。ブラウザに表示された認可コードを会話履歴へ貼るのではなく、必要なツールへ一度だけ渡し、ログへ残さない設計にします。

読み取りで確認する順番

  1. 接続状態と書き込み無効を確認する
  2. 自分がアクセスできる事業所を一覧する
  3. 対象事業所IDが想定どおりか確認する
  4. 勘定科目と税区分を取得する
  5. 期間と件数を絞って取引を取得する

AIに「最近の取引を全部見せて」と頼むのではなく、対象期間、件数、必要項目を限定します。データ最小化は、応答速度だけでなくプライバシー面でも有効です。

API仕様は変化する

freee公式の2026年4月27日告知では、取引作成・更新時の明細行上限が40行から100行へ拡大されました。これは非破壊的変更ですが、APIレスポンスへ任意項目が追加されることもあります。未知のプロパティが増えても壊れない実装と、公式変更情報の定期確認が必要です。

再現チェック

  • [ ] OAuthアプリのredirect URIを確認した
  • [ ] 書き込みフラグは初期値false
  • [ ] トークンをソースコードへ書いていない
  • [ ] 対象事業所IDを人が確認した
  • [ ] 取得期間と件数を制限した
  • [ ] 削除機能を公開していない

次回は、取引登録を将来可能にする場合でも誤登録を防ぐ、確認コード方式を紹介します。

参考にした一次情報


Back to top