クラウド会計APIの限界を1つずつ測った日、最後に結論がひっくり返った

開発eurekapu-nuxt4

「使えない」のではなく、探す前に作り直そうとしていた

キャッシュフロー計算書の教材は、ずっとExcelの仕訳帳から組み立ててきた。クラウド会計に直接仕訳を流し込めれば、帳簿の形はソフトが作ってくれる。前からそう思ってはいた。ただ、会計ソフトAのAPIは以前に見て使えなかったはずだ、という記憶が引っかかっていた。それで手を出さずにいた。

この日、その記憶を確かめるところから始めた。まずAPI連携の認証を取らせる。OAuthアプリの登録は0件だった。一度も取っていない。

取らせたら、あっさり通った。

「なんで使えないんでしたっけ」の答えは、使えないのではなく、既存の資産を見つける前にゼロから作り直そうとしていただけ、というものだった。テスト用の法人が2つとも実在することも、同じ流れで確認できた。前提が記憶のまま止まっていた期間のほうが長い。

一括削除のAPIは存在しない

最初に知りたかったのは、仕訳の一括削除だった。教材用のテストデータは何度も入れ直す。消し方が決まらないと、そもそも投入を始められない。

一括削除のエンドポイントは無かった。DELETE /api/v3/journals/{id} の1件ずつだけで、しかも3リクエスト/秒の制限がつく。一括削除は画面側の帳簿管理にしかない。

このときは、入れるのが速ければ消すのは多少遅くてもいい、と考えていた。後で逆だったと分かる。

無料プランでもAPIは全部通った

次に疑ったのは料金プランだった。検証用の法人は仕訳のCSV出力ができない。有料プランに入らないと使えない機能らしい。だとすればAPIも塞がれているのではないか。

実測すると、そうではなかった。契約履歴のない無料の法人で、読み取りも登録も削除も通る。設立出資の仕訳を1本登録すると、件数が1になった。直後にDELETEすると204が返り、仕訳検索は0件に戻る。テスト法人に痕跡は残らない。

CSVエクスポートの制限とAPIの可否は連動していない。入口の管理はずいぶんザルなんだな、と思った。

量にはゲートがあった。50件でぴたりと止まる

入口がザルなら、量のほうはどうなのか。300件を一気に流させようとしたら、今度はこちら側の安全機構に止められた。許可を出して流させる。

止まった。無料プランの法人は、仕訳50件でぴたりと打ち切られる。ザルなのは入口だけで、量にはちゃんとゲートがあった。

しかもこの50件は、1会計年度につきの上限だった。事業者を増やさなくても、同じ法人で次年度繰越をすれば年度ごとに50件ずつ積める。テスト用に事業者を量産する前に、もっと軽い手が見つかった形になる。

171件目で落ちたのは、プランではなく接続だった

1ヶ月の無料トライアルを開始した。50件の壁は消えて、投入は素通しで進むようになった。そのまま300件を流させる。

171件目でネットワークがタイムアウトして落ちた。プランの制限ではなく接続断で、170件は正常に登録されている。この時点で合計221件(50 + 170 + 1)が入っていた。

速く投げても速くならない

1秒1件のペースが遅いのではないかと思い、レート制限どおり3リクエスト/秒でまとめて投げ直すことにした。非常識なスピードで殴るつもりはないが、制限の範囲で詰めるぶんには問題ないはずだ。

401件、全部入った。失敗0、リトライ0。

予想外だったのはここからで、ボトルネックはこちらの投げる間隔ではなく、サーバー側の応答時間だった。詰めて投げると1件あたりの遅延がそのぶん伸び、最後は接続タイムアウトまで届く。トータルの所要時間はほとんど変わらない。

だったら1秒1件のままでいい。この結論はキャッシュフロー教材を作るときに効いてくるので、メモとして2箇所に残しておいた。

次年度繰越のボタンは、押さなくてよかった

期首残高をつなぐには次年度繰越が要る。公開APIの全17エンドポイントを確認させたが、繰越はどこにもなかった。画面のボタンを押すしかない、という結論になった。

ただ、公開APIに無いだけで内部APIにはあるはずだ、という当てはあった。以前に別プロジェクトで内部API仕様のドキュメントを書かせてある。見に行かせたら、ちゃんと残っていた。POST /term/close で繰越は押せる。画面をポチポチする必要はない。

その場で、繰越の仕様をそのドキュメントに追記させた。

403仕訳のうち、当年度に入るのは2件だけだった

準備が整ったので、Excelの「出力_インポート_仕訳」シートから403仕訳を投入させた。

入らなかった。403仕訳のうち、今の会計年度に収まるのは2件だけだったからだ。残りは過去の年度に属している。会計年度そのものを遡って作らないと、投入の前提が成立しない。

画面側なら作れる。事業者と年度の管理画面で、対象事業者の行にある「前年度 / 切替」を押すたびに1期ずつ遡って作られる。2022年度まで作らせたところで仕組みが読めたので、残りは自分で押して2021年度まで作った。画面を触ったほうが速い場面は、まだ普通にある。

勘定科目と補助科目は、足りないぶんをAPIで作らせた。そこから403仕訳を全件投入。走り出した直後に件数を見ると、全然入っていないように見えた。確認させたら、20秒で9件増えていた。目視で遅いと感じるだけで、実際には進んでいた。

最終的に403件すべてが失敗0で入り、繰越を4回かけて、期首残高が5年度きれいに繋がった。

36秒と22分

ここで、朝に置いた前提がひっくり返った。

APIが遅い。この速度で入れるくらいなら、CSVで流し込んだほうが早いのではないか。そう言ってから測らせた。

内部API経由の一括削除は36秒だった。1件ずつのAPI削除は22分かかる。約37倍の差がついた。しかも内部APIの一括削除は、画面と同じタグでの抽出フィルターが使える。テストデータにタグを付けて投入しておけば、そのタグのぶんだけをまとめて消せる。

CSVインポートのほうも内部APIから叩ける実装が既にあり、ページ遷移なしのfetch-chain方式まで入っていた。つまり年度をまたいでループで回せる。ドキュメントが実装に追いついていなかったので、そちらも更新させた。

朝に「一括削除のAPIは無い」と分かった時点で、消すのは多少遅くてもいいと片付けていた。実際は、入れるのも消すのも公開APIが一番遅い、というのが答えだった。

税抜経理でも、入力は税込のままでよかった

最後に、教材の経理方式を決めるために一点だけ確かめた。

税抜経理にすると仕訳の投入が面倒になった記憶があった。実務の標準は税抜だが、手間が増えるなら税込で作ってもいい。

確かめると、記憶のほうが古かった。会計ソフトAは税抜経理でも入力は税込で、内税として自動で分離してくれる。仕訳投入の手間は税込経理と変わらない。1円も違わないことまで確認したので、投入の手間を理由に税込を選ぶ必要はなくなった。

教材の見た目としては、税込330万のように0が揃っているほうが読みやすい。税抜の内税のまま進めることにした。ついでに、税区分を「対象外」にして入れ直すと消費税の欄が完全に消えることも確認できた。税込経理、税抜の内税、税抜の外税で仕訳とAPIパラメータがどう変わるかは、別途1本のコンテンツにする。

今日の学び

  • 「使えない」の中身は、たいてい「まだ探していない」だった。認証の登録が0件のまま、記憶で可否を判断していた
  • 入口の制限と量の制限は別物で、どちらも実測しないと分からない。無料プランでAPIが全部通ることと、50件で止まることは両立する
  • レート制限に合わせて速く投げても、相手の応答が遅ければ全体は速くならない
  • 公開APIに無い操作でも、内部APIなら通ることがある。新しく調べる前に、手元のドキュメントを先に見る
#クラウド会計#API#OAuth#仕訳データ#レート制限#開発日記