この連載の読む順番
TDnet①〜④で、書類の役割からXBRLの解析・グラフ化までを順に扱います。その後、EDINET①〜④へ進みます。共通の基本操作はTDnet編を参照し、EDINET編では違いを確認します。
- TDnet解析① TDnetとは?決算短信・適時開示とEDINETの違い
- TDnet解析② XBRLとは?決算短信のPDFと数値データを図解(この記事)
- TDnet解析③ XBRLの値を比較する前に、期間・単位・欠損を確かめる(準備中)
- TDnet解析④ 累計と四半期単独、実績と予想を分けてグラフにする(準備中)
- EDINET解析① EDINETとは?有価証券報告書から企業を理解する
- EDINET解析② XBRLとは?有価証券報告書の構造とタグの仕組みを理解する
- EDINET解析③ TDnetの次に読むXBRL――ファイル・タグ・コンテキストの違いを確かめる(準備中)
- EDINET解析④ 財務データを継続的な分析に使う(準備中)
XBRLは、報告の内容をコンピューターで扱いやすくするための形式です。PDFから数字の文字列を拾う方法とは、確認できる情報が違います。
この回では、決算短信に触れるときに見かけるPDF・HTML・XBRLの関係を整理します。JPXの公式サンプルの実際のタグと、理解を助ける架空の図を併用します。両者を明記し、ZENITH CodeのAPI応答とは区別します。
この回のゴールと、読み進め方
この回のゴールは、公式サンプルの売上高1について「どの期間の、どの範囲の、何円の値か」を説明できることです。まず目でタグを読み、プログラムでの抽出はTDnet解析③で行います。
必要なのは、公式サンプルを保存するフォルダーと、文字を検索できるテキストエディタです。テキストエディタは、文書を装飾するワープロではなく、ファイルの文字をそのまま読むための道具です。今回はファイルを書き換えず、検索して確認します。
PDF・HTML・XBRLは何が違う?
人が書類を読むときは、表の見出しや注記から意味を理解できます。コンピューターにとっては、数字の位置だけでその意味を判断するのは簡単ではありません。
| 形式 | 主な見方 | 注意する点 |
|---|---|---|
| ページのレイアウトに沿って読む | 文字を抽出できても表の意味が揃うとは限らない | |
| HTML | ブラウザで文書を読む | HTMLであることだけではXBRLのタグがあるとは言えない |
| XBRL | 項目と、その値の条件を読む | タグが見つかっても目的の値かを確かめる |
| Inline XBRL | 人が読む文書に埋め込まれたタグを読む | 表示された文字と数値の解釈を区別する |
PDFをXBRLへ変換すれば全て解決する、という関係ではありません。そもそも対象部分がどの形式で提供されるかを、書類と仕様で確認します。
JPXは決算短信等のXBRLに加え、決算短信の目次以降のHTMLについても説明しています。対象期間や書類による違いがあるため、過去のファイルにも同じ形式を仮定しません。JPXの仕様一覧
図1:JPX「XBRLデータの仕様」の実画面(2026年10月25日撮影)。上段はサマリーの作成要領、下段はタクソノミの設定規約・解説・項目リストです。目的の項目や構造を調べる際は、こうした資料の種類を見分けます。出典:JPX公式ページ。
図:Inline XBRLは、読むための表示と機械向けの意味をつなぎます。表示値は架空例です。
TDnet、XBRL、APIはそれぞれ何の名前か
解析の記事には複数の用語が登場します。役割を分けると、どこで何をしているかが見えやすくなります。
| 用語 | この記事での位置付け |
|---|---|
| TDnet | 会社情報を開示する仕組み |
| 決算短信 | 開示される書類の種類 |
| XBRL | 報告項目と値、その条件などを機械で扱う形式 |
| API | プログラムから情報をやり取りするための窓口 |
| グラフ | 取得した情報を人が理解できるように表示した結果 |
APIで取得できたからといって、必ず解析済みの数値が返るとは限りません。サービスによって、書類の情報、ファイル、整形済みの数値など、返される内容が違います。利用するAPIの応答仕様を読む必要があります。
一方、XBRLを読めるようになっても、それだけで決算短信の全ての文章やグラフを同じ形式で扱えるわけではありません。何を取得し、どの部分を解析し、どんな表示を作るかを順番に決めます。
サマリーと詳しい財務諸表を分けて考える
決算短信の冒頭で見たい業績の概要と、財務諸表の細かな科目を読みたい場合では、探す項目が違います。JPXの仕様一覧でも、サマリーに関する資料と財務諸表に関する資料が分かれています。JPXのXBRL仕様一覧
まず欲しい数値が概要の項目なのか、詳しい表の一項目なのかを確認します。「売上高を一つ読む」と「全ての財務諸表を再構成する」では、必要な作業の広さが大きく変わります。最初の学習例は、前者に絞ると結果を確かめやすくなります。
表示された10,000と、扱いたい値を区別する
架空の表に「単位:百万円」「売上高:10,000」と表示されていれば、人はこの二つを合わせて100億円と読みます。プログラムも、数字とその意味を結び付けなければなりません。
PDFから10,000という文字列を取り出すだけでは、単位や期間がまだ決まっていません。XBRLではタグや参照情報を使って確認できますが、今度はどのタグ・条件を採用するかを読む必要があります。ファイル形式が変わることで、確認すべき情報の置き場所が変わると考えると理解しやすくなります。
まず公式サンプルのファイルを開く
ここからは架空の図だけでなく、JPXが公開しているサンプルインスタンスの実際のタグを読みます。利用したのは配布ZIPの通期決算短信にある、次のファイルです。
tse-acedjpsm-10270-20240718553471-ixbrl.htm
tse-acedjpsm-10270-20240718553471.xsd
tse-acedjpsm-10270-20240718553471-def.xml
サンプルは実在企業の業績分析に使うデータではありません。JPXも、開示科目の妥当性や数値の整合性を意識したサンプルではないと説明しています。ここでは、ファイルと参照関係を読む練習に使います。
出典:JPX「決算短信提出書類ファイル仕様書」表2-2(PDFの9ページ目、2026年10月26日確認)。該当箇所の抜粋です。
.htmには表示内容とInline XBRLの値、.xsdにはタクソノミへの参照、-def.xmlには定義リンクが入っています。これは決算短信サマリーの説明です。添付の財務諸表や、別の年度・種類のファイルまで必ず同じ構成だと決め付けません。配布サンプルZIPの整理用フォルダーと、実際の提出用ZIPのフォルダー構成も区別します。
ファイルを開くまでを、操作に分ける
- 上のJPX公式ページで、決算短信等の「サンプルインスタンス」のZIPを取得します。「四半期財務諸表」のサンプルとは分かれているので、リンク名を確かめます。
- ZIPを展開します。ZIPは、複数のファイルをまとめた入れ物です。展開すると、中のファイルを個別に開けます。後のコード例でも使うため、元のZIPも残します。
- 展開先で、上に示した
-ixbrl.htmで終わるファイル名を探します。最初は.xsdや-def.xmlを開く必要はありません。 - その
.htmをテキストエディタで開きます。ダブルクリックでブラウザが開く場合は、エディタの「開く」操作から対象ファイルを選びます。 - 検索機能で
tse-ed-t:NetSalesを探します。Macでは多くのエディタでCommand+F、WindowsではCtrl+Fが検索の入口です。
ブラウザで開くと人が読む表、テキストエディタで開くと表を作るための文字とタグが見えます。同じファイルを、違う見方で確認しています。サンプルの更新で上記ファイルがない場合は、別のファイルを同じものと決め付けず、配布版と対象のサンプルを確認してください。
山括弧・属性・値の読み方
これから出てくる<...>は「タグ」です。開始タグから終了タグまでのまとまりを「要素」と呼びます。終了タグには</...>のようにスラッシュが付きます。タグ内の名前="内容"という組は「属性」で、その要素に追加の情報を付けます。
次の売上高の例では、<ix:nonFraction ...>が開始タグ、</ix:nonFraction>が終了タグで、その間にある1が今回読む文字です。改行や字下げは読みやすく整えています。どの行に書かれたかではなく、どの要素の中にあるかを見ます。
売上高のタグを一つ見つける
上の.htmをテキストエディタで開き、tse-ed-t:NetSalesを検索します。次は公式サンプルから必要な属性を抜粋し、改行を整えたものです。
<ix:nonFraction
name="tse-ed-t:NetSales"
contextRef="CurrentYearDuration_ConsolidatedMember_ResultMember"
unitRef="JPY"
decimals="-6"
scale="6"
format="ixt:numdotdecimal">1</ix:nonFraction>
ここで読めた文字は1ですが、まだ「売上高1円」とは言えません。nameが項目、contextRefが対象・期間・区分への参照、unitRefが単位への参照です。そしてscaleが表示された値の桁を戻すための情報です。次の順にたどると、この1の意味が確定します。
タグを一行ずつ日本語にする
| 記述 | 最初の読み方 | 今すること |
|---|---|---|
ix:nonFraction |
Inline XBRLで数値を表す要素の一種 | この中の文字を数値候補として読む |
name="tse-ed-t:NetSales" |
報告項目はこの名前の売上高 | 何の項目かを確認する |
contextRef="..." |
対象や期間は、この名前のコンテキストを参照 | 引用符の中身を控える |
unitRef="JPY" |
単位は、この名前の定義を参照 |
JPYの定義を探す |
scale="6" |
表示の桁を戻すときに10の6乗倍 | 単位の確認後に計算する |
decimals="-6" |
報告された数値の精度に関する指定 | 倍率として使わない |
Refはreference(参照)を表します。「この場所に全部書いてある」ではなく、「詳しい内容はこの名前の場所を見る」という意味です。この仕組みがあるため、数値のすぐ横に開始日や単位の説明がなくても、別の場所へたどれます。
コンテキスト情報はどこを見るのか
同じファイル内で、id="CurrentYearDuration_ConsolidatedMember_ResultMember"を検索します。ファクト側のcontextRefと、コンテキスト側のidが一致する場所です。今回のサンプルではix:headerのix:resources内に定義されています。
見つけるときは、次の順で操作します。
- 売上高のタグから、
contextRefの引用符内だけをコピーします。 - 同じファイルを
id="コピーした文字列"で検索します。contextRef=を探し続けると、定義ではなく別の数値が見つかることがあります。 - 検索結果が
<xbrli:context ...>で始まることを確認します。 - 対応する
</xbrli:context>までを一つのまとまりとして読みます。
ix:headerやix:resourcesは、表示本文とは別に参照情報などを置くための構造です。ブラウザで見える表だけを探すと見つからないので、ここではファイルの文字を検索しています。
<xbrli:context id="CurrentYearDuration_ConsolidatedMember_ResultMember">
<xbrli:entity>
<xbrli:identifier scheme="http://www.tse.or.jp/sicc">10270</xbrli:identifier>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2023-04-01</xbrli:startDate>
<xbrli:endDate>2024-03-31</xbrli:endDate>
</xbrli:period>
<xbrli:scenario>
<xbrldi:explicitMember dimension="tse-ed-t:ConsolidatedNonconsolidatedAxis">
tse-ed-t:ConsolidatedMember
</xbrldi:explicitMember>
<xbrldi:explicitMember dimension="tse-ed-t:ResultForecastAxis">
tse-ed-t:ResultMember
</xbrldi:explicitMember>
</xbrli:scenario>
</xbrli:context>
名前空間の宣言は省略しています。実行可能な独立ファイルではなく、サンプル内の該当部分です。entityで主体、periodで2023年4月1日から2024年3月31日までの期間、scenarioで連結・実績を確認できます。
長いコンテキストを、三つの質問に分ける
| 質問 | 読む場所 | このサンプルで分かったこと |
|---|---|---|
| 誰の情報? |
entityの中のidentifier
|
主体の識別値は10270
|
| いつの情報? |
periodの中のstartDateとendDate
|
2023年4月1日〜2024年3月31日 |
| どんな区分? |
scenarioの中の軸とメンバー |
連結、実績 |
dimensionに書かれる「軸」は質問の種類、要素の中にある「メンバー」はその答え、と考えると読みやすくなります。
-
ConsolidatedNonconsolidatedAxisは「連結か個別か」という区分で、ConsolidatedMemberがこの例の答えです。 -
ResultForecastAxisは「実績か予想か」という区分で、ResultMemberがこの例の答えです。
答えだけでなく質問の種類もセットで保存するのは、どの区分についての答えかを失わないためです。後のEDINET解析では、区分を明示しない場合の規則も出てきます。まずは、このTDnetサンプルの二組を読めれば十分です。
次の仕様書の表では、「期間」の行と「時点」の行を見比べてください。startDateとendDateは始まりと終わり、instantは一つの時点です。売上高のような期間の値を読む今回の例では、開始日と終了日の二つを確認します。
出典:JPX「決算短信サマリー報告書インスタンス作成要領」2-3-4-3(PDFの18ページ目、2026年10月26日確認)。該当箇所の抜粋です。
CurrentYearDurationという名前だけで、具体的な日付は分かりません。別の年度の書類でも同じ名前を使うからです。IDは参照をつなぐ鍵として使い、実際の日付と軸・メンバーは中身を読みます。
また、PreviousCurrentAxisの前回・今回と、PriorYearDurationの前年度は別の話です。文字列に「Previous」があるから前年度、といった部分一致だけにすると、予想修正の比較などを誤るおそれがあります。どの軸に属するメンバーかを一緒に保持します。コンテキストIDの規約と軸の一覧
単位はどこを見るのか
次にunitRef="JPY"から、xbrli:unitのid="JPY"を探します。今回のサンプルでは、次の定義に行き着きます。
<xbrli:unit id="JPY">
<xbrli:measure>iso4217:JPY</xbrli:measure>
</xbrli:unit>
JPYというIDの文字を眺めるだけでなく、参照先のmeasureが日本円を表していることまで確認します。1株あたりの金額なら、円を株数で割った単位になるので、最初のmeasureだけを読んでは足りません。
出典:JPX「決算短信サマリー報告書インスタンス作成要領」表2-9(PDFの20ページ目、2026年10月26日確認)。該当箇所の抜粋です。
scaleとdecimalsは役割が違う
このサンプルの売上高は、表示文字が1、scale="6"です。表示形式に従って数値を読み、1 × 10^6として、円単位では1,000,000になります。
10^6は「10を6回掛けた数」で、1,000,000です。今回の計算を日本語で追うと、次のようになります。
ファイル内で読めた文字 1
scale=6 による倍率 1,000,000倍
単位の定義 日本円
解釈した数値 1 × 1,000,000 = 1,000,000円
人向けに百万円単位で表示 1百万円
unitRefは「円など、何の単位か」、scaleは「表示文字からどの桁に戻すか」です。円という単位が分かっただけでは、表示の1をそのまま1円としてよいかは決まりません。
出典:JPX「決算短信サマリー報告書インスタンス作成要領」表2-15(PDFの24ページ目、2026年10月26日確認)。該当箇所の抜粋です。
| 確認する場所 | このサンプル | 読み取ること |
|---|---|---|
| 要素の中の文字 | 1 |
表示されている数値 |
unitRefの参照先 |
iso4217:JPY |
単位は円 |
scale |
6 |
表示値を10の6乗倍する |
decimals |
-6 |
百万円の位までの精度を表す |
format |
ixt:numdotdecimal |
数字の文字列をどう解釈するか |
decimals="-6"をもう一度100万倍する指示として使わないでください。精度と倍率を混同すると、二重に桁を変えてしまいます。負の値ではsign、欠損ではxsi:nilも確認します。変換済みの通常のXBRLインスタンスを読む場合と、Inline XBRLの表示文字を読む場合でも、処理は異なります。
このように、同じタグからでも、項目 → コンテキスト → 単位 → 数値表現を順に確認します。以下の架空例では、この読み方が候補の選択やグラフにどう影響するかを整理します。
一つの数値を「意味のある値」にする
次の表は、架空の会社の売上高を、読み間違えにくい形へ整理したものです。
| 要素 | 架空例 |
|---|---|
| 項目 | 売上高 |
| 値 | 10,000,000,000 |
| 単位 | 円 |
| 期間 | 2025-04-01〜2026-03-31 |
| 範囲 | 連結 |
| 区分 | 実績 |
この例なら、当該期間の連結売上高が100億円と読めます。しかし値だけを保存すると、単位や対象期間を後から確かめられません。
「連結」は、会社単体だけでなく企業グループを対象にする考え方です。同じ会社名でも、連結と個別の数字を混ぜると、増減の理由を誤解することがあります。
図2:同じ売上高でも、期間と対象範囲で選ぶ値が変わります。この架空例ではBが目的に合います。色に加え、枠・矢印・採用理由で対応を示しています。
実績・予想・修正前後を並べない
架空の会社が、通期売上高予想を110億円から105億円へ変更したとします。どちらも実績ではなく、同じ期間に対する見通しです。
同じ対象期間の会社予想
前回発表:110億円 → 今回発表:105億円
ここで「105億円は110億円より減った」と言うことはできます。しかし「前年より売上が減った」とは、この情報だけでは言えません。比較しているのは、前回予想と今回予想だからです。
グラフでは、横軸が「対象年度」なのか「予想を発表した日」なのかも明示します。図をきれいにする前に、何を比較する図なのかを決めます。
四半期の「累計」と「3か月」を見分ける
四半期の数値を扱う際は、書類の名前に四半期と書かれていることだけで、全ての数値が3か月分だと判断しないようにします。どこからどこまでを合計した値かが重要です。
次は、4月に年度が始まる架空の会社の売上高です。同じ連結範囲・会計上の扱いで、期間だけが違う例とします。
| 期間 | 売上高 | 表しているもの |
|---|---|---|
| 4月から6月 | 20億円 | 最初の3か月 |
| 4月から9月 | 45億円 | 年度初めから6か月の累計 |
| 7月から9月 | 25億円 | 後半の3か月 |
45億円をそのまま「7月から9月の売上高」として棒グラフに置くと、20億円から45億円へ急増したように見えます。しかしこの例で7月から9月に対応する値は、45−20=25億円です。
図3:横方向は金額ではなく時間です。同じ条件で集計した累計値なら、この例の7〜9月は45−20=25億円。6か月累計を、そのまま後半3か月の値として描かないようにします。
引き算で作った値には、そのことを残す
この差分計算が使えるのは、二つの累計値の比較条件が揃っている場合です。資料の訂正や対象範囲・会計上の扱いの違いなどがあると、機械的な引き算は適切でない可能性があります。
また、売上高のような期間の値の考え方を、期末の資産残高にそのまま当てはめてはいけません。6月末の資産と9月末の資産の差は残高の変化であって、「7月から9月の資産」という期間合計ではありません。
学習用の表でも「資料から読み取った値」と「二つの値から計算した結果」は区別します。後から疑問が出たとき、元資料に25億円と書いてあったのか、自分が計算したのかが分かるからです。グラフの説明にも「累計差分による算出」と書けば、読み手が結果を追えます。
単位と精度を取り違えない
画面の表には「百万円」と書かれていても、処理の途中では円単位へ直すことがあります。記事やアプリでは、元の表記、取得した値、画面の単位を分けて説明します。
XBRLの decimals は数値の精度を表す情報です。値を何倍にするかを、その属性だけで決めてはいけません。Inline XBRLの scale など、表示から値を解釈する情報とは区別します。詳細は対象の仕様に従います。XBRL Internationalのタグ付け解説
また、取得できない値をゼロに置き換えないようにします。「値がない」と「値がゼロ」は意味が違います。図では空白や注記にするなど、読者が区別できる表示にします。
ファイルからグラフまでを六つの工程に分ける
小さな解析例でも、取得から表示までを一つの作業にすると、どこで間違えたか分かりにくくなります。ここでは処理の中身を増やすより、工程を区切って考えます。
| 工程 | 行うこと | 確かめる結果 |
|---|---|---|
| 1 書類を選ぶ | 会社・対象期間・書類の種類を決める | 欲しい書類を選べているか |
| 2 内容を読む | ファイルの形式に合う方法で読む | 読取りに成功したか |
| 3 候補を集める | 目的の項目に対応する値を探す | 何件の候補があるか |
| 4 条件を確認する | 期間・範囲・単位などを確認する | 欲しい条件に合うか |
| 5 表示用に整える | 並べ替えや単位換算を行う | 元の値との対応が追えるか |
| 6 図にする | ラベル・単位・欠損を示す | 読者が意味を誤解しないか |
「読取りに成功した」と「正しい売上高を選んだ」は違います。逆に、候補が見つからないことも、必ずしもプログラムの故障ではありません。対象の書類に目的の項目が含まれるかを確認する必要があります。
途中結果を一つだけ目で確認する
最初の練習では、グラフを先に完成させるより、抽出後の一行を見ます。青葉製作所の売上高100億円なら、会社、項目、期間、連結・個別、単位、実績・予想が説明できる状態にします。
次に、表示単位を億円にするため値を換算します。元の値が円単位で10,000,000,000なら、100,000,000で割って100です。元の値を上書きせず、表示用の値を別に扱うと、換算を二度行うミスにも気付きやすくなります。
試しに間違った候補を混ぜてみる
候補が一件だけの例では、条件を確認しなくても正しい結果になってしまうことがあります。学習用データには、前年の値や次期予想を一つ加え、「必要な条件で区別できるか」を確かめると効果的です。
例えば、当期実績100億円と次期予想110億円が並んでいても、先頭にある値を選ぶのではなく、条件を説明して100億円を選べることを確認します。候補の順番を入れ替えても結論が変わらなければ、並び順への依存を一つ減らせます。
ここで確かめるのは、この小さな例での動作です。一例の成功から全社・全年度に対応したとは判断せず、実践編でも対象と確認範囲を明記します。
最初の解析は、対象を狭くして確かめる
初めての例では、対象期間と範囲を決めた売上高一つから始めると、検証する内容を整理できます。
- 何の項目を読むか決める。
- 対象期間と連結・個別を確かめる。
- 単位と実績・予想を確認する。
- 期待した値と条件が一致するか確認する。
この順序は一般的な理解のためのものです。会社ごとの例外を自動で解消する完全な解析器ではありません。TDnet解析③では、この公式サンプルから一つの値と参照先を読み取る短いコードを扱います。
確認問題: 前年の年間実績と、今年の半年累計を並べて「売上が半減」と説明してよいでしょうか。
答えは、そのままでは比較できません。期間の長さが違うためです。数値の抽出と、比較可能なデータへの整理は、別の作業だと分かります。
続けて読む
- 前の記事:TDnet解析① TDnetとは?決算短信・適時開示とEDINETの違い
- 次の記事:TDnet解析③ XBRLの値を比較する前に、期間・単位・欠損を確かめる(準備中)
私たち株式会社Crabgrassは、財務データAPI「ZENITH Code」を開発・提供しています。
本記事は技術とデータの読み方の解説です。投資判断や特定銘柄の売買を推奨しません。







