有報ナビ
有価証券報告書を、業種や財務指標の条件で探して比べられる公開サイト「有報ナビ」の解説です。「株価分析」(決算短信・有価証券報告書・株価データを使った分析)の関連サイトです。
- 決算・株価データ検証:記事の一覧
- 記事ごとのコード:github.com/minnanosaiban/blog
このページは、有報ナビの使い方と、その仕組み、作るうえで判断したことの解説です。
有報ナビとは:有価証券報告書を、探して・比べる
東証の主要企業(約500社)の有価証券報告書(EDINET)をもとに、企業を探し、セグメント・財務指標・キャッシュフローを比べられるサイトです。ブラウザだけで動き、サーバーはありません。
記事で扱った分析のうち、有価証券報告書だけで足りるもの(事業の構成、収益性、キャッシュフローの型)を、誰でも触れる形にしました。「ENEOS以外の会社も見てみたい」という読者の方が、自分で探せることを目指しています。
| ページ | できること |
|---|---|
| 企業を探す | 業種・会計基準・ROE・PER・自己資本比率・営業CFの符号などで絞り込み、並べ替え、CSVで保存。結果をそのまま図で見られる |
| 財務の推移 | 会社ごとの、売上・利益・ROE・1株の指標・キャッシュフローの時系列。最大5社を重ねて比べられる |
| 会社を比べる | 最大5社の最新の数値(規模・利益率・ROE・自己資本比率・1株指標・CF)を、表と棒グラフで並べて比べる |
| バリュエーション散布図 | 財務指標を好きな2軸でプロット。業種で色分け、中央値の十字線、外れ値の除外、会社の強調 |
| CFパターン | 営業・投資・財務CFの符号で、経営フェーズを8パターンに分類。業種ごとの内訳も |
| 業界ポートフォリオ | 会社ごとの、事業セグメント別の利益を Treemap で並べる |
| セグメント推移 | 1社の、セグメントごとの推移を小さなグラフで並べる |
使い方
- 対象を決める:「おすすめ(商社・石油13社)」「業種から選ぶ」「会社を検索して選ぶ」「全社」から選びます。
- 条件で絞り込む:「企業を探す」で、数値の範囲やキャッシュフローの符号を指定します。たとえば「ROE 10%以上・PER 15倍以下・日本基準」で72社に絞れます。
- 図で見る:該当した会社を、散布図・CFパターン・ポートフォリオにそのまま移して見られます。
- 会社を選んで、推移を見る・並べて比べる:「財務の推移」で、会社ごとの売上・利益・ROE・キャッシュフローの時系列を見られます。最大5社を重ねて比べることもできます。「会社を比べる」では、最大5社の最新の数値を、表と棒グラフで並べます。各ページ末尾の「次に見る」から、ページを行き来できます。



条件はURLに入る
選んだ会社・条件・軸は、すべてURLに保存されます。そのまま共有でき、記事から条件つきで直接リンクできます。
- 商社・石油のROEとPER:…/#/valuation?m=preset&x=roe&y=per
- 卸売業のキャッシュフローの型:…/#/cashflow?m=ind&ind=卸売業
- ROE 10%以上・PER 15倍以下・日本基準の会社:…/#/?roe=10..&per=..15&std=JP
- 三菱商事と三井物産を並べて比べる:…/#/compare?cc=E02529,E02513
?embed=1 を付けると、ヘッダを省いた埋め込み用の表示になります(出典の表示は残ります)。
全体の構成
ビルド工程のない素のHTML / CSS / JavaScript で、図には Apache ECharts を使っています。ECharts はリポジトリに同梱し、外部のCDNには頼りません。
docs/
index.html
assets/
lib/ データの読み込み・絞り込み・CFパターン・図のデータ処理(画面に依存しない部分)
pages/ 各ページ
vendor/ Apache ECharts(同梱)
data/
companies.json 会社の一覧(約60KB)
financials.json 全社・全期の財務指標(約0.8MB。配信時に圧縮されて約0.2MB)
segments/<コード>.json 会社ごとのセグメント(選んだ会社の分だけ読む)
データは、最初に会社の一覧と財務指標を全部ブラウザに読み込みます。約500社なら小さいので、検索や絞り込みはサーバーに問い合わせず、その場で終わります。セグメントだけは、選んだ会社の分を、そのつど読みます。
データの出どころと、規約
元データは、金融庁の EDINET に提出された有価証券報告書(XBRL)です。手元で取得・変換してJSONにし、公開用に同期しています。
- 公共データ利用規約(第1.0版)にもとづき、出典を表示し、加工した旨と加工した者を明記しています。全ページの下部に出ます。埋め込み表示でも省きません。
- 政府が作成した情報そのものではなく、元の提出書類と異なる場合があります。
- 株価データは使っていません。Yahoo や楽天証券のデータは、規約上、再配布できないため、このサイトには載せていません。サイトにあるのは、有価証券報告書に書かれた数字だけです。PERやROEも、報告書の「主要な経営指標等」の値で、株価から計算したものではありません。
- EDINETのAPIは、規約に沿って、1秒の間隔を空けて取得しています。
作るうえで判断したこと
Streamlit をやめて、静的サイトにした
最初は、手元の分析アプリ(Streamlit)の4ページを、そのまま公開することを考えました。しかし、無料で公開できる Streamlit の置き場所は、アクセスがない間にスリープし、開くまで待たされます。年に数回しか変わらないデータに、動かし続けるサーバーは、必要以上に重い仕組みです。
そこで、ブラウザの中だけで動く静的サイトに作り直しました。サーバーがないので、スリープも、落ちる心配もありません。スマホでも軽く動き、ブログと同じ GitHub Pages に置けます。手元の分析アプリは、そのまま使い続けています。
Python の結果と照合して、不具合を見つけた
作り直しで怖いのは、手元の Python と、公開の JavaScript で、計算が食い違うことです。そこで、絞り込み・CFパターンの分類・Treemap・セグメント推移・外れ値の範囲を、Python(pandas)で別に実装して期待値を作り、JavaScript の結果と照合するテストを書きました。計算が一致していることを確かめる、144件のテストです。
このテストは、実際に3つの不具合を見つけました。
- 「◯期前」の数え方がずれていた:セグメントがない期を飛ばしていたため、INPEXなどで期の対応がずれていました。
- 名前順の並びが、環境で変わる:ブラウザの言語設定で並びが変わる書き方でした。コード順に固定しました。
- スマホで横にはみ出す:425社の長い名前で、会社の選択欄が広がっていました。
画面の見た目だけでは気づけない、数字のずれを、テストが拾ってくれました。
連結・個別、会計基準の違いは、隠さずに示す
- 個別財務諸表のみの会社(連結を作らない会社)は、数字が個別のものです。連結の会社とは基準が異なるため、表に「個別」と表示し、図の下に注記を出しています。
- **金融(銀行・保険・証券)**は、売上の定義が違います。一般の会社の「売上」と混ぜず、売上の欄を空にしています。
- 米国基準・IFRS・日本基準では、報告書の項目名が少しずつ違います。それぞれの項目名に対応させて、取り込んでいます。
「売上」の呼び名は、会社ごとに違う
当初は「売上高」と「売上収益」だけを「売上」として取り込んだため、取得できたのは 83% でした。残りを調べると、原因は主に3つでした。
- 「営業収益」と呼ぶ会社(陸運・小売・不動産など約50社)。JR各社やイオンなどです。
- IFRSの会社で、経営指標の一覧に売上がなく、損益計算書にだけある(ソニー・トヨタなど)。トヨタは会社独自の項目名でした。
- 日本ハムのように、IFRSなのに「売上高(IFRS)」と呼ぶ会社。
それぞれの項目名を、優先度の低い補完として追加し、93% まで取得できるようになりました。補完は、もともと取れていた会社の値を変えない(空欄だけを埋める)ように作り、変更前後の全データを比べて、既存の値が変わらないことを確かめています。
残りは銀行・保険などの金融です。売上の代わりに「経常収益」で報告されるため、一般の会社の売上と混ぜず、別の欄に入れています。
見やすさ・押しやすさも、数字で確かめた
画面は、見た目だけで「良さそう」と判断せず、できるところは数字で確かめました。
- 押せる範囲は、44px以上にした:ボタン・ナビ・入力欄・チェックボックス・会社タグの「×」まで、画面の幅によらず、指で押しやすい大きさにしました。ナビが2行に折り返して画面を占めすぎないよう、1行に収め、約980pxより狭い画面では横にスクロールさせています。
- ダークモードの文字は、背景との明るさの差を計算した:画面内のすべての文字を、背景色との比で測り、読みにくい所を探しました。
- Treemap の文字が、薄い色のタイルで読めなかった:文字がいつも白だったため、黄色のタイルでは、白い文字が1.56:1しか差がありませんでした。タイルの色ごとに、白か濃い灰色の、差が大きい方を選ぶようにしました。
- ツールチップが、ダークモードで白く浮いていた:ページが
tooltipを一部だけ指定すると、共通の配色が消え、ECharts の既定(白い背景)に戻ってしまう作りでした。共通の設定を、項目ごとに重ねるようにして、直しました。明るい表示・暗い表示の両方で、スマホ幅でも、画面の外にはみ出さないことを確かめています。 - 古いCSS・JSが使われ続けないようにした:ファイルのURLに、内容から作る更新番号(
?v=...)を付け、直したはずの見た目が、読者の画面に反映されない事態を避けています。
できないこと・注意点
- 対象は東証の主要企業(約500社)です。それ以外の会社は、載っていません。
- 有価証券報告書は年1回なので、最新の四半期の数字は載っていません。最新期は、会社ごとの直近の有報です。
- セグメントの名称は、各社が報告書に付けた日本語の名称です。年度によって区分が変わった会社は、旧区分と新区分が別のセグメントとして並びます。
- 「売上」は、売上高・売上収益・営業収益のいずれかです。最新期で、約93%の会社(463/497社)で取得できています。残りは銀行・保険などの金融で、経常収益などの別の項目で報告されるため、「売上」は空欄です。
- 投資の助言ではありません。
更新
データは、手元で有価証券報告書を取得・変換し、公開用に同期して更新します。有報は年1回なので、更新は年に数回の予定です。更新日は、サイトの「データと注意」のページに出ています。