コンテンツにスキップ

有報ナビ

有価証券報告書を、業種や財務指標の条件で探して比べられる公開サイト「有報ナビ」の解説です。「株価分析」(決算短信・有価証券報告書・株価データを使った分析)の関連サイトです。

このページは、有報ナビの使い方と、その仕組み、作るうえで判断したことの解説です。

有報ナビとは:有価証券報告書を、探して・比べる

東証の主要企業(約500社)の有価証券報告書(EDINET)をもとに、企業を探し、セグメント・財務指標・キャッシュフローを比べられるサイトです。ブラウザだけで動き、サーバーはありません。

記事で扱った分析のうち、有価証券報告書だけで足りるもの(事業の構成、収益性、キャッシュフローの型)を、誰でも触れる形にしました。「ENEOS以外の会社も見てみたい」という読者の方が、自分で探せることを目指しています。

ページ できること
企業を探す 業種・会計基準・ROE・PER・自己資本比率・営業CFの符号などで絞り込み、並べ替え、CSVで保存。結果をそのまま図で見られる
財務の推移 会社ごとの、売上・利益・ROE・1株の指標・キャッシュフローの時系列。最大5社を重ねて比べられる
会社を比べる 最大5社の最新の数値(規模・利益率・ROE・自己資本比率・1株指標・CF)を、表と棒グラフで並べて比べる
バリュエーション散布図 財務指標を好きな2軸でプロット。業種で色分け、中央値の十字線、外れ値の除外、会社の強調
CFパターン 営業・投資・財務CFの符号で、経営フェーズを8パターンに分類。業種ごとの内訳も
業界ポートフォリオ 会社ごとの、事業セグメント別の利益を Treemap で並べる
セグメント推移 1社の、セグメントごとの推移を小さなグラフで並べる

使い方

  1. 対象を決める:「おすすめ(商社・石油13社)」「業種から選ぶ」「会社を検索して選ぶ」「全社」から選びます。
  2. 条件で絞り込む:「企業を探す」で、数値の範囲やキャッシュフローの符号を指定します。たとえば「ROE 10%以上・PER 15倍以下・日本基準」で72社に絞れます。
  3. 図で見る:該当した会社を、散布図・CFパターン・ポートフォリオにそのまま移して見られます。
  4. 会社を選んで、推移を見る・並べて比べる:「財務の推移」で、会社ごとの売上・利益・ROE・キャッシュフローの時系列を見られます。最大5社を重ねて比べることもできます。「会社を比べる」では、最大5社の最新の数値を、表と棒グラフで並べます。各ページ末尾の「次に見る」から、ページを行き来できます。

企業を探す:条件で絞り込んだ結果の表。会社・業種・ROE・PER・自己資本比率・売上などが並び、見出しで並べ替えられる

バリュエーション散布図:横軸ROE、縦軸PER。業種ごとに色分けされた約480社の点と、中央値の点線。点の大きさは売上

業界ポートフォリオ:双日・伊藤忠商事・丸紅の事業セグメント別の利益を Treemap で並べたところ

条件はURLに入る

選んだ会社・条件・軸は、すべてURLに保存されます。そのまま共有でき、記事から条件つきで直接リンクできます。

?embed=1 を付けると、ヘッダを省いた埋め込み用の表示になります(出典の表示は残ります)。

全体の構成

有報ナビのデータの流れ:EDINETから手元で取得・変換した有報JSONを、公開データとして同期し、GitHub Pages から配信。ブラウザの中で絞り込みと描画をする
有報ナビのデータの流れ:EDINETから手元で取得・変換した有報JSONを、公開データとして同期し、GitHub Pages から配信。ブラウザの中で絞り込みと描画をする

ビルド工程のない素の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つの不具合を見つけました。

  1. 「◯期前」の数え方がずれていた:セグメントがない期を飛ばしていたため、INPEXなどで期の対応がずれていました。
  2. 名前順の並びが、環境で変わる:ブラウザの言語設定で並びが変わる書き方でした。コード順に固定しました。
  3. スマホで横にはみ出す:425社の長い名前で、会社の選択欄が広がっていました。

画面の見た目だけでは気づけない、数字のずれを、テストが拾ってくれました。

連結・個別、会計基準の違いは、隠さずに示す

  • 個別財務諸表のみの会社(連結を作らない会社)は、数字が個別のものです。連結の会社とは基準が異なるため、表に「個別」と表示し、図の下に注記を出しています。
  • **金融(銀行・保険・証券)**は、売上の定義が違います。一般の会社の「売上」と混ぜず、売上の欄を空にしています。
  • 米国基準・IFRS・日本基準では、報告書の項目名が少しずつ違います。それぞれの項目名に対応させて、取り込んでいます。

「売上」の呼び名は、会社ごとに違う

当初は「売上高」と「売上収益」だけを「売上」として取り込んだため、取得できたのは 83% でした。残りを調べると、原因は主に3つでした。

  1. 「営業収益」と呼ぶ会社(陸運・小売・不動産など約50社)。JR各社やイオンなどです。
  2. IFRSの会社で、経営指標の一覧に売上がなく、損益計算書にだけある(ソニー・トヨタなど)。トヨタは会社独自の項目名でした。
  3. 日本ハムのように、IFRSなのに「売上高(IFRS)」と呼ぶ会社。

それぞれの項目名を、優先度の低い補完として追加し、93% まで取得できるようになりました。補完は、もともと取れていた会社の値を変えない(空欄だけを埋める)ように作り、変更前後の全データを比べて、既存の値が変わらないことを確かめています。

残りは銀行・保険などの金融です。売上の代わりに「経常収益」で報告されるため、一般の会社の売上と混ぜず、別の欄に入れています。

見やすさ・押しやすさも、数字で確かめた

画面は、見た目だけで「良さそう」と判断せず、できるところは数字で確かめました。

  • 押せる範囲は、44px以上にした:ボタン・ナビ・入力欄・チェックボックス・会社タグの「×」まで、画面の幅によらず、指で押しやすい大きさにしました。ナビが2行に折り返して画面を占めすぎないよう、1行に収め、約980pxより狭い画面では横にスクロールさせています。
  • ダークモードの文字は、背景との明るさの差を計算した:画面内のすべての文字を、背景色との比で測り、読みにくい所を探しました。
  • Treemap の文字が、薄い色のタイルで読めなかった:文字がいつも白だったため、黄色のタイルでは、白い文字が1.56:1しか差がありませんでした。タイルの色ごとに、白か濃い灰色の、差が大きい方を選ぶようにしました。
  • ツールチップが、ダークモードで白く浮いていた:ページが tooltip を一部だけ指定すると、共通の配色が消え、ECharts の既定(白い背景)に戻ってしまう作りでした。共通の設定を、項目ごとに重ねるようにして、直しました。明るい表示・暗い表示の両方で、スマホ幅でも、画面の外にはみ出さないことを確かめています。
  • 古いCSS・JSが使われ続けないようにした:ファイルのURLに、内容から作る更新番号(?v=...)を付け、直したはずの見た目が、読者の画面に反映されない事態を避けています。

できないこと・注意点

  • 対象は東証の主要企業(約500社)です。それ以外の会社は、載っていません。
  • 有価証券報告書は年1回なので、最新の四半期の数字は載っていません。最新期は、会社ごとの直近の有報です。
  • セグメントの名称は、各社が報告書に付けた日本語の名称です。年度によって区分が変わった会社は、旧区分と新区分が別のセグメントとして並びます。
  • 「売上」は、売上高・売上収益・営業収益のいずれかです。最新期で、約93%の会社(463/497社)で取得できています。残りは銀行・保険などの金融で、経常収益などの別の項目で報告されるため、「売上」は空欄です。
  • 投資の助言ではありません。

更新

データは、手元で有価証券報告書を取得・変換し、公開用に同期して更新します。有報は年1回なので、更新は年に数回の予定です。更新日は、サイトの「データと注意」のページに出ています。