AIにトヨタの有報を読ませる前に――「売上高」を正しいXBRLファクトへ結び付ける
議論参加:ハナ (投資を始めたばかりの読者) / リョウコ (企業開示を読む個人投資家) / ユウタ (XBRLデータの実務経験者) / ケイ (AI活用を支援するデータ技術者) / テツオ (企業開示を検証する編集担当)
XBRLをはじめる #3/下書き・未公開
「AIにトヨタの有価証券報告書を読ませれば、すぐ分析できる」。半分は正しい。もう半分は危ない。AIが数字を見つけても、それが連結なのか単体なのか、通期なのか四半期なのかを取り違えれば、答えは役に立たない。
第2回で開いたトヨタ自動車の第121期有価証券報告書(2025年3月期、2025年6月18日提出)を、今度は Arelle CLI で処理してみた。Arelle CLIは、画面で開くArelleをターミナルから動かす方法だ。人が画面で読むためのiXBRLを、AIが扱える一覧へ変換する。
まだXBRLそのものが曖昧なら、先にArelleの前提も紹介した第1回「XBRLは数字と文章の住所」を、画面操作を確認したいならArelleで開く第2回「無料ツールでXBRLを開く」を読んでから戻ってくるとよい。
結論:AIに丸ごと渡す前に、数値ファクトを「何の値・いつの値・どの範囲・どの単位か」で絞る。 AIが数字の住所を返せないなら、その答えは採用せず保留する。
この記事を読み終えたときの到達点は、次の三つだ。
- 報告書全体を表す
manifest_PublicDoc.xmlから、Arelle CLIで一覧を作れる。 - 自分の「売上高を知りたい」という質問を、原本の表とXBRLのファクトへ対応付けられる。
- AIの答えを採用する前に、原本へ戻って確認できる。
まず、何を処理したのか
対象はトヨタ自動車の2025年3月期有価証券報告書だ。ここでいうiXBRLは、ふだんブラウザで読むHTMLの報告書に、機械が読めるタグを重ねた形式を指す。ファクトは、その中の「項目名・値・期間・単位」をひと組にしたデータだ。
EDINETのXBRLパッケージには、報告書を構成する複数のiXBRLファイルの目次である manifest_PublicDoc.xml がある。今回はこのマニフェストを入口にした。
EDINETの設計資料でも、一つの報告書は複数のインラインXBRLファイルから構成されるとしている。個別のHTMLを一枚だけ開くのではなく、マニフェストを渡す理由はここにある。EDINETのフレームワーク設計書は、複数のiXBRLファイルで報告書インスタンスを作る仕組みと、コンテキスト・ユニット・精度の設定を説明している。
| 今回確認したもの | 結果 | 読み方 |
|---|---|---|
| 対象書類 | 第121期有価証券報告書 | 2025年3月期、2025年6月18日提出 |
| マニフェストに列挙されたiXBRL | 24ファイル | 報告書全体を読むための入口 |
| Arelle出力 | 2,173ファクト | 数値・文章のどちらも含むため、そのままAIへ渡さない |
参考:この書類の出力には数値1,469件、文章など704件(うちHTMLを含む文章ブロック136件)が含まれた。件数は処理の規模を示す補足であり、分析の結論ではない。
一覧を作る:実行したコマンド
第2回で使ったパッケージの XBRL/PublicDoc に移動し、次のように実行した。初めてなら、ここではコマンドのすべてを暗記する必要はない。目的は、manifest_PublicDoc.xml を入力にして、AIへ渡す前の確認用CSV toyota-facts.csv を作ることだ。Arelleのコマンドライン機能には、ファクト一覧を書き出す --facts と、出力列を選ぶ --factListCols がある。Arelleのコマンドライン説明では、これらの出力オプションを確認できる。
arelleCmdLine \
--plugins /Applications/Arelle.app/Contents/Resources/plugin/inlineXbrlDocumentSet.py \
--file XBRL/PublicDoc/manifest_PublicDoc.xml \
--facts toyota-facts.csv \
--factListCols Label,Name,contextRef,unitRef,Dec,Prec,Lang,Value
ここで大切なのは、--plugins の指定だ。マニフェストは複数のiXBRLを束ねるため、Inline XBRL Document Set を有効にせずに開くと、実質的に何も展開されず、空に近い一覧になる。実際、プラグインなしではヘッダーだけのCSVになり、プラグインを有効にして初めてファクトが出力された。
表の数字を、XBRLの住所付きデータにする
CSVから次の行を取り出せた。
| ラベル | コンセプト名 | コンテキスト | ユニット | decimals | 値 |
|---|---|---|---|---|---|
| 営業収益 | jpcrp030000-asr_E02144-000:OperatingRevenuesIFRSKeyFinancialData | CurrentYearDuration | JPY | -6 | 48,036,704,000,000 |
| 営業活動によるキャッシュ・フロー | jpigp_cor:NetCashProvidedByUsedInOperatingActivitiesIFRS | CurrentYearDuration | JPY | -6 | 3,696,934,000,000 |
この二つの値は、いずれも2025年3月期の通期として表示される値と照合できた。つまり、前者は 480,367億円(約48.0兆円)、後者は 36,969億円(約3.7兆円) だ。ただし、これを「AIが見つけたから正しい」とは言えない。
なぜなら、同じ営業収益や営業キャッシュフローでも、要約表と財務諸表で別のコンセプトとして現れることがあるからだ。今回も営業キャッシュフローには、要約表用とIFRS財務諸表用の二つのコンセプトがあり、同じ値を示していた。
ラベルは人が読むための表示名、コンセプトは機械が識別する定義である。 同じラベルでも、コンセプトが異なれば、参照する会計基準・集計範囲・定義が違う場合がある。数字が同じであっても、AIが勝手に一つへ統合してよいわけではない。
EDINETのタクソノミ説明は、項目名などはタクソノミで、期間や通貨単位はインスタンスで設定すると説明する。EDINETタクソノミの概要説明を読むと、数字に「何の値か」と「いつ・どの通貨か」という別々の情報が付く構造を確認できる。
decimals=-6は「百万単位に丸めた情報」を示す属性で、通貨そのものを百万円に変える命令ではない。 表示の「百万円」とCSVの円額を混ぜると、AIでも人でも桁を誤る。
「売上高」と聞いたのに、なぜ「営業収益」が出るのか
会計に詳しくない読者が「売上高を出して」と頼むのは、まったく自然だ。実際、会社四季報オンラインの「売上高」の説明は、決算短信に記載がある場合の**売上高を「営業上の収益」**として掲載すると説明している。投資家にとっての「売上高」は、事業のいちばん上の収益を見るための分かりやすい呼び名だ。
一方、トヨタはIFRSで財務諸表を作っており、連結損益計算書やXBRLのラベルは 「営業収益」 になっている。今回Arelleが返した SalesRevenuesIFRS と OperatingRevenuesIFRSKeyFinancialData も、表示ラベルはともに「営業収益」だった。
これはAIが「売上高」を見つけ損ねたのではない。読者の言葉と、会社が使う会計上の表示ラベルが違う例だ。ただし、どんな会社でも「売上高=営業収益」と機械的に置き換えてはいけない。金融業などでは、収益の構成や表示が大きく異なる。四季報の説明も、金融業では一部項目の扱いが異なることを注記している。長期業績の見方は、会計基準別の表示と、売上高にその他営業収益を含む場合があることを説明する。
最初のラベルは、誰がどう見つけるのか
結論から言えば、最初の一度は人間が、レンダリングされた連結損益計算書を見るのが安全だ。CSVだけを上から検索して「営業収益」を採用するのではない。
- EDINETから取得した書類を、ブラウザまたはArelleのiXBRL Viewerで開く。
- **「連結損益計算書」**という表題を確認する。ここで「連結」であることと、通期の列を同時に見る。
- 表のいちばん上の収益項目を読む。トヨタの場合は「営業収益」だった。これが、読者の「売上高」に対応する候補になる。
- そのセルをArelleで選ぶ、または対応するファクト一覧で探し、ラベルだけでなくコンセプト名・コンテキスト・ユニットを記録する。同じラベルの候補が複数なら、ラベルでは選ばず、それぞれのコンセプトの定義と表の位置を比べる。
読者の言葉からXBRLのファクトへ
図は本記事の編集上の整理。最初の対応付けは表を見て行い、二回目以降はその対応表をAIへの指示に含める。
AIには、次のように頼むとよい。
「売上高」に対応する候補を探してください。ただし、ラベルが売上高と完全一致しない場合は、連結損益計算書での表示ラベル、コンセプト名、連結/単体、対象期間、単位を並べてください。同じラベルでもコンセプトが異なる候補は、同一項目として統合せず、定義・表の位置・期間範囲の違いを説明してください。候補が複数なら選ばず、違いを説明してください。
この手順なら、人間が毎回タグの名前を暗記する必要はない。人間が原本の表から一度だけ意味を確定し、AIはその対応付けを再利用して検索・比較を手伝う。人間が見る前提なのは、最初の意味づけと最終確認であって、全2,173ファクトを目視することではない。
なぜ「AIに全部任せる」では足りないのか――5人の議論
ハナ(投資を始めたばかりの読者)は、「2,173件でも、どれが会社全体の通期の数字なのかを自力で選べない」と不安を示した。
ユウタ(XBRLデータの実務経験者)は、最初に確認するべきものを四つに絞った。コンセプト(何の項目か)、コンテキスト(誰の、いつの、どの範囲か)、ユニット(円・株など)、decimals(丸めの精度)だ。
ケイ(AI活用を支援するデータ技術者)は、AIに全CSVを渡して「重要な数字を教えて」と尋ねるより、まず数値だけを選び、対象期間と連結範囲を固定してから質問するほうが再現できると主張した。
一方、テツオ(企業開示を検証する編集担当)は、数値だけに狭めすぎることにも反対した。本文には会計方針、リスク、数値の増減理由が書かれている。文章を消すのではなく、数値を集計する入力と、理由を読む入力を分けるべきだという。
リョウコ(企業開示を読む個人投資家)は、その二つをつなぐ条件として「AIが答えの横に原文へ戻る手掛かりを付けること」を求めた。正しいかもしれない答えより、間違いを自分で発見できる答えの方が、個人投資家には役に立つからだ。
AIに渡すファイルを、二つに分ける
今回の結論を実務的な形にすると、AIへ渡すものは二系統になる。
| 目的 | AIへ渡すもの | AIに求める答え | 人が最後に見るもの |
|---|---|---|---|
| 数字を比べる | 数値ファクトだけのCSV | 項目、期間、範囲、単位、値、前年との差 | 元表とコンテキスト |
| 理由を読む | 本文・注記のテキストブロック | 該当する見出し、要約、反対方向の記述 | 原文の前後段落 |
| 二つを結ぶ | 数値の候補と原文の候補 | 「この増減を説明する可能性がある記述」 | 因果関係の妥当性 |
文章ブロックは不要なノイズではない。たとえばトヨタの有価証券報告書には、収益認識、販売奨励金、無償メンテナンス契約などを説明する本文がある。数字の変化を断定するためではなく、数字が何を意味し、どの条件で変わりうるかを読むために残す。
ここまでできたら、AIへこう頼む
このCSVでは、数値ファクトだけを対象にしてください。対象は2025年3月期の通期で、連結範囲を示せるものに限定します。営業収益と営業活動によるキャッシュフローについて、ラベル、コンセプト名、コンテキスト、ユニット、decimals、値を表にしてください。曖昧な項目、同じラベルで複数ある項目、原文に戻れない項目は結論を出さず「保留」としてください。投資判断・株価予想はしないでください。
この問いは、AIの答えを短くするためではない。間違ったときに、どこを疑えばよいかを残すためのものだ。AIが返した表をそのまま使う前に、次の確認をする。
AIの答えを採用する前の3分チェック
ここまでの流れは、①マニフェストから一覧を作る、②原本の連結損益計算書で「売上高」に当たる行を決める、③AIに候補を出させる、だった。下の六つは、その最後に「この答えを使ってよいか」を判断するためのチェックだ。全部に答えられなければ、AIの結論は保留し、原本に戻る。
manifest_PublicDoc.xmlから開いたか。個別のiXBRL一枚だけを見ていないか。- CSVの物理的な行数を、ファクト数だと数えていないか。長文のセルには改行が入る。
- 数値ファクトと、文章を含むテキストブロックを分けたか。
- AIの数値には、コンセプト・コンテキスト・ユニット・decimalsが添えられているか。
- 同じラベルの複数ファクトを、根拠なく一つに統合していないか。コンセプトが異なるなら、定義・表の位置・会計基準を確認したか。
- 答えの根拠を、元の表または本文へ戻って確認できるか。
まとめ:AIの役割は「答え」ではなく、確認可能な候補を作ること
今回、Arelle CLIでトヨタの有報を読むことで分かったのは、XBRLがあるからAIの分析が自動的に正しくなるわけではない、ということだ。
それでもXBRLは強い。数字が「売上高らしき文字列」ではなく、コンセプト・コンテキスト・ユニット・精度と結び付くため、AIの答えを検査できる。これはPDFや文章だけを読ませる場合には得にくい利点だ。
AIに任せるのは候補出しまで。人が確認するのは、数字の住所と、その数字を説明する文章だ。この役割分担ができれば、2,173件のファクトは「多すぎるデータ」ではなく、有報を迷わず戻れる地図になる。
出典を読むときのポイント
- トヨタ自動車「2025年3月期 有価証券報告書」:本記事で処理した第121期の原本。営業収益、キャッシュフロー、収益認識などの原文を確認するために使った。
- Arelle「Command Line Operation」:ファクト一覧をファイルに書き出す
--factsと、列を選ぶ--factListColsを確認した。 - EDINETタクソノミの概要説明:タクソノミが項目を、インスタンスが期間・通貨単位などを設定する仕組みを確認した。
- EDINETフレームワーク設計書添付:テキストブロックを含むタグ付けや、インラインXBRLの技術上の取り扱いを確認した。
- 会社四季報オンライン「売上高」:投資家向けの「売上高」を、営業上の収益として掲載するという四季報側の整理を確認した。
この記事は下書きです。特定の投資判断を勧めるものではありません。
キーワード:#XBRL#EDINET#Arelle#AI#財務データ
出典
- https://global.toyota/pages/global_toyota/ir/library/securities-report/archives/archives_2025_03.pdf
- https://arelle.readthedocs.io/en/latest/command_line.html
- https://disclosure2dl.edinet-fsa.go.jp/guide/static/disclosure/download/ESE140108.pdf
- https://disclosure2dl.edinet-fsa.go.jp/guide/static/submit/download/ESE140124.pdf
- https://shikiho-info.toyokeizai.net/help/article/%E5%A3%B2%E4%B8%8A%E9%AB%98/