[{"data":1,"prerenderedAt":355},["ShallowReactive",2],{"content-/edinet-api-accounting-sw-comparison":3,"all-pages-for-dir":353,"og-image-/edinet-api-accounting-sw-comparison":354},{"id":4,"title":5,"body":6,"category":332,"description":333,"extension":334,"meta":335,"navigation":336,"ogImage":337,"path":338,"project_name":339,"published":340,"publishedAt":341,"seo":342,"stem":343,"tags":344,"todo":351,"unpublished":340,"updatedAt":337,"__hash__":352},"pages/2026-03/2026-03-25/edinet-api-accounting-sw-comparison.md","EDINET API で会計ソフト4社の財務データを取得・比較した記録",{"type":7,"value":8,"toc":305},"minimark",[9,14,18,22,87,91,94,97,102,110,114,117,121,125,128,131,134,137,148,151,154,158,161,165,168,172,175,178,181,185,188,191,204,208,211,214,218,221,224,227,288,291],[10,11,13],"h1",{"id":12},"edinet-api-で会計ソフト4社の財務データを取得比較","EDINET API で会計ソフト4社の財務データを取得・比較",[15,16,17],"p",{},"朝、EDINET DB APIのドキュメントを開いた。昼、Windowsシェルの引数長制限に2回ぶつかった。夜、OBCの一人当たり売上高がクラウド会計A社/クラウド会計B社の5倍という数字をスプレッドシートで眺めていた。EDINET APIから有報の財務データを引っ張り出し、会計ソフト4社の損益構造を並べるまでの一日の記録。",[19,20,21],"h2",{"id":21},"対象4社",[23,24,25,41],"table",{},[26,27,28],"thead",{},[29,30,31,35,38],"tr",{},[32,33,34],"th",{},"社名",[32,36,37],{},"証券コード",[32,39,40],{},"セグメント",[42,43,44,56,65,76],"tbody",{},[29,45,46,50,53],{},[47,48,49],"td",{},"クラウド会計A社",[47,51,52],{},"-",[47,54,55],{},"クラウドSaaS",[29,57,58,61,63],{},[47,59,60],{},"クラウド会計B社",[47,62,52],{},[47,64,55],{},[29,66,67,70,73],{},[47,68,69],{},"オービックビジネスコンサルタント（OBC）",[47,71,72],{},"4733",[47,74,75],{},"パッケージ+クラウド",[29,77,78,81,84],{},[47,79,80],{},"オービック",[47,82,83],{},"4684",[47,85,86],{},"SI+パッケージ",[19,88,90],{"id":89},"edinet-apiからのデータ取得","EDINET APIからのデータ取得",[15,92,93],{},"EDINET DB APIのv2エンドポイントで、各社の有価証券報告書からXBRLタグ付き財務データを取得した。",[15,95,96],{},"取得項目は売上高・売上原価・販管費・営業利益・経常利益・当期純利益・従業員数。期間は取得可能な全年度分。",[98,99,101],"h3",{"id":100},"user-agent問題で403","User-Agent問題で403",[15,103,104,105,109],{},"最初のリクエストが ",[106,107,108],"code",{},"403 Forbidden"," で返ってきた。原因はUser-Agentヘッダの未設定。EDINET APIはブラウザ以外からのアクセスに対してUser-Agentを要求する。ヘッダーに適当な文字列を設定して再実行し、正常にレスポンスが返った。",[98,111,113],{"id":112},"apiレスポンス-ローカルjson-スプレッドシートの2段階方式","APIレスポンス → ローカルJSON → スプレッドシートの2段階方式",[15,115,116],{},"当初はAPIレスポンスをそのままスプレッドシートに書き込んでいたが、デバッグのたびにAPIを叩くのは無駄が多い。途中からローカルにJSONファイルとして保存し、スプレッドシートへの書き込みはローカルJSONから行う2段階方式に切り替えた。これでAPI呼び出し回数が減り、書き込みロジックの修正時にAPIを叩かずに済むようになった。",[19,118,120],{"id":119},"googleスプレッドシートへの書き込み","Googleスプレッドシートへの書き込み",[98,122,124],{"id":123},"windowsシェルの引数長制限","Windowsシェルの引数長制限",[15,126,127],{},"4社×複数年度の財務データをGoogle Sheets APIに一発で渡そうとしたら、コマンドライン引数がWindowsの8191文字制限を超えた。エラーメッセージが出るわけではなく、引数が途中で切れてJSONパースに失敗するという地味な壊れ方をする。",[15,129,130],{},"対処としてデータをチャンク分割し、複数回のAPI呼び出しに分けて書き込むようにした。1チャンクあたり数年度分に収まるサイズに調整。",[98,132,133],{"id":133},"日本語シート名のエンコーディング問題",[15,135,136],{},"シート名を「年次業績」のような日本語にしたところ、Windows環境でcp932エンコーディングとの衝突が発生した。Google Sheets APIに渡すURLエンコード済みの日本語シート名がcp932の制約で化ける。",[15,138,139,140,143,144,147],{},"回避策としてシート名をASCII（",[106,141,142],{},"Annual",", ",[106,145,146],{},"Quarterly","等）に統一した。中身のデータは日本語でも問題なく書き込める。シート名だけの制約。",[98,149,150],{"id":150},"四半期データの追加取得",[15,152,153],{},"年次データに加えて四半期データも取得し、別シートに追加。四半期の推移を見ることで、季節性や成長の加速・減速がより細かく見えるようになった。",[19,155,157],{"id":156},"saas-vs-オンプレの損益構造差","SaaS vs オンプレの損益構造差",[15,159,160],{},"売上高が近い年度同士を並べてPL実額を比較した。",[98,162,164],{"id":163},"クラウド会計b社-vs-obc330億円規模","クラウド会計B社 vs OBC（~330億円規模）",[15,166,167],{},"両社とも売上高330億円前後の年度を持つ。粗利率はほぼ同水準。ところが販管費がクラウド会計B社はOBCの約2倍に膨らんでおり、営業利益に大きな差がついていた。",[98,169,171],{"id":170},"クラウド会計a社-vs-obc500億円規模","クラウド会計A社 vs OBC（~500億円規模）",[15,173,174],{},"クラウド会計A社の売上高が500億円に達した年度とOBCの同規模年度を比較しても、構造は同じ。粗利は近いのに販管費がクラウド会計A社は2倍以上、結果としてクラウド会計A社は営業赤字、OBCは営業黒字。",[98,176,177],{"id":177},"構造差の正体",[15,179,180],{},"SaaS企業（クラウド会計A社/クラウド会計B社）は顧客獲得コスト（CAC）を販管費に積み込んで成長を買っている。広告宣伝費・営業人件費が販管費を押し上げる。一方、OBC/オービックはパートナー経由の販売モデルで、販管費を抑えたまま売上を伸ばせる構造になっている。",[19,182,184],{"id":183},"一人当たり売上高rpeの比較","一人当たり売上高（RPE）の比較",[15,186,187],{},"RPE（Revenue Per Employee）を各社で算出し、日米SaaSベンチマークと並べたSVGチャートを作成した。",[98,189,190],{"id":190},"数字が語ったこと",[192,193,194,198,201],"ul",{},[195,196,197],"li",{},"OBCのRPEはクラウド会計A社/クラウド会計B社の約5倍の水準から出発している",[195,199,200],{},"クラウド会計A社/クラウド会計B社のRPE改善率（CAGR）はOBCと同程度。改善のペース自体は似ているが、出発点が5倍違う",[195,202,203],{},"日米SaaSベンチマークと比較すると、クラウド会計A社/クラウド会計B社は米国SaaS企業の中央値にまだ届いていない",[98,205,207],{"id":206},"gtmモデルの違いがrpeに効く","GTMモデルの違いがRPEに効く",[15,209,210],{},"OBCはパートナー制度（販売マージン+保守契約収入をパートナーに付与）で間接販売を回す。パートナーの営業人員はOBCの従業員数にカウントされないため、RPEが構造的に高くなる。",[15,212,213],{},"クラウド会計A社/クラウド会計B社は直販中心のGTMモデル。営業・カスタマーサクセスの人員を自社で抱えるため、従業員数が膨らみRPEが下がる。どちらが「正しい」ではなく、モデルの違いがそのまま数字に表れている。",[19,215,217],{"id":216},"saasがオンプレを駆逐したは起きていない","「SaaSがオンプレを駆逐した」は起きていない",[15,219,220],{},"最も意外だった発見。OBCは同期間で+59%成長、オービックは+64%成長。SaaS企業だけが伸びているのではなく、会計ソフト市場全体が拡大し、オンプレ/パッケージ勢も着実に売上を伸ばしている。",[15,222,223],{},"ゼロサムの奪い合いではなく、市場拡大の中でSaaSとオンプレが棲み分けている構図が数字から浮かび上がった。中小企業のクラウド移行でSaaSが新規市場を開拓する一方、中堅以上の既存顧客基盤ではOBC/オービックがしっかり維持・成長している。",[19,225,226],{"id":226},"試行錯誤まとめ",[23,228,229,242],{},[26,230,231],{},[29,232,233,236,239],{},[32,234,235],{},"#",[32,237,238],{},"問題",[32,240,241],{},"対処",[42,243,244,255,266,277],{},[29,245,246,249,252],{},[47,247,248],{},"1",[47,250,251],{},"EDINET APIで403",[47,253,254],{},"User-Agentヘッダを設定して解決",[29,256,257,260,263],{},[47,258,259],{},"2",[47,261,262],{},"コマンドライン引数が長すぎてJSON壊れる",[47,264,265],{},"データをチャンク分割して複数回書き込み",[29,267,268,271,274],{},[47,269,270],{},"3",[47,272,273],{},"日本語シート名がcp932で化ける",[47,275,276],{},"シート名をASCIIに統一",[29,278,279,282,285],{},[47,280,281],{},"4",[47,283,284],{},"APIデバッグのたびに呼び出し回数が増える",[47,286,287],{},"ローカルJSON保存の2段階方式に変更",[19,289,290],{"id":290},"学んだこと",[192,292,293,296,299,302],{},[195,294,295],{},"EDINET DB APIは有報のXBRLデータを構造化して返してくれるので、財務データの横比較に向いている。ただしUser-Agentが必要な点はドキュメントに目立つ記載がなく、403で初めて気づいた",[195,297,298],{},"Windowsのコマンドライン引数長制限（8191文字）は、大量データをCLI経由で渡すときに静かに壊れる。エラーではなく「途中で切れる」のが厄介",[195,300,301],{},"SaaS企業の販管費の大きさは「非効率」ではなく、直販GTMモデルのコスト構造がそのまま反映されたもの。パートナーモデルとの構造差を理解しないと、PLの読み方を間違える",[195,303,304],{},"「SaaS vs オンプレ」を二項対立で捉えていたが、実際は市場拡大の中で両方が伸びている。データを並べて初めて、自分の思い込みが数字に否定された",{"title":306,"searchDepth":307,"depth":307,"links":308},"",2,[309,310,315,320,325,329,330,331],{"id":21,"depth":307,"text":21},{"id":89,"depth":307,"text":90,"children":311},[312,314],{"id":100,"depth":313,"text":101},3,{"id":112,"depth":313,"text":113},{"id":119,"depth":307,"text":120,"children":316},[317,318,319],{"id":123,"depth":313,"text":124},{"id":133,"depth":313,"text":133},{"id":150,"depth":313,"text":150},{"id":156,"depth":307,"text":157,"children":321},[322,323,324],{"id":163,"depth":313,"text":164},{"id":170,"depth":313,"text":171},{"id":177,"depth":313,"text":177},{"id":183,"depth":307,"text":184,"children":326},[327,328],{"id":190,"depth":313,"text":190},{"id":206,"depth":313,"text":207},{"id":216,"depth":307,"text":217},{"id":226,"depth":307,"text":226},{"id":290,"depth":307,"text":290},"dev","EDINET DB APIを使ってクラウド会計A社・クラウド会計B社・OBC・オービックの有報データを取得し、Google スプレッドシートに書き出すまでの試行錯誤。Windowsシェル制限やエンコーディング問題への対処、SaaS vs オンプレの損益構造差の発見を記録","md",{},true,null,"/edinet-api-accounting-sw-comparison","financial-data-saas",false,"2026-03-25T00:00:00.000Z",{"title":5,"description":333},"2026-03/2026-03-25/edinet-api-accounting-sw-comparison",[345,346,347,348,349,80,350],"EDINET API","財務分析","SaaS","クラウド会計","OBC","Google Sheets API","memo","gHDFAMeE07XpN0X_fnZBnaPBEvh5DldrnhyU6d9aKGU",[],"https://log.eurekapu.com/og/blog/edinet-api-accounting-sw-comparison.png?v=2026-03-25T00%3A00%3A00.000Z&title=EDINET%20API%20%E3%81%A7%E4%BC%9A%E8%A8%88%E3%82%BD%E3%83%95%E3%83%884%E7%A4%BE%E3%81%AE%E8%B2%A1%E5%8B%99%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%83%BB%E6%AF%94%E8%BC%83%E3%81%97%E3%81%9F%E8%A8%98%E9%8C%B2&author=Kei%20Komatsu&sig=281fdf7a95463589",1782528820639]