コンテンツにスキップ

決算・株価データ検証

無料で手に入る株価・決算短信・有価証券報告書をもとに、元売株・資源株を分析した連載記事のサイトです。取得、決算データでの分析、機械学習の3部と番外編で、18本の記事と用語集があります。静的サイトジェネレーターの Zensical で作り、GitHub Pages で公開しています。サーバーもデータベースもありません。

このページは、記事の中身(分析の内容)ではなく、図とコードと記事をどうつないで作ったかの解説です。記事のもとになるデータの取得は株価データ取得ツール、有価証券報告書を探して比べる姉妹サイトは有報ナビ、見た目の考え方はウェブサイトデザインにあります。

全体の構成

記事のサイトと、分析のコードを、別のリポジトリに分けています。

置き場所 中身
kessan-kabuka(サイト) 記事の Markdown、図(PNG)、用語集、共通デザイン。公開されるのはここだけです
blog(分析コード) 記事ごとのフォルダ。図を作る Python スクリプト、サムネイルを作るスクリプト、1-1〜2-2 の Streamlit アプリ
自分のパソコンの data/ 株価・決算・有報のデータ。再配布できないので、どこにも公開しません
記事 2-3 の例
  データ(自分のパソコン)  ──►  blog/02-03_accrual/06_accrual_make_images.py
                                        │ 図(PNG)を書き出す
                                        ▼
  kessan-kabuka/docs/posts/img/02-03_accrual_analysis/*.png  ◄── 記事の Markdown が参照
                                        │ git push
                                        ▼
                    GitHub Actions が Zensical でビルド → GitHub Pages

記事の図は、手で作った画像ではなく、スクリプトで生成した画像です。数値を直したいときは、スクリプトを直して実行し直せば、図がすべて作り直されます。

図の文字サイズを、記事をまたいでそろえる

連載では100枚を超える図を載せています。図の幅がバラバラだと、記事に載せたときの縮小率が図ごとに変わり、グラフの中の文字の大きさが記事ごとにばらつきます。画面上の文字サイズは、次の式で決まるためです。

画面上の文字サイズ = 画像内の文字の大きさ(px) × (本文の幅 ÷ 画像の横px)

そこで、全スクリプトが共有する _blog_style.py で、図の幅を1つに固定しました。

  • 幅は13インチ、解像度は144dpi(横1872px)に統一します。高さだけは図ごとに自由です
  • 横に入り切らない内容は、図を広げず、行を増やすか列を減らして対応します。広げると、文字が相対的に小さくなるためです
  • 保存は savefig_uniform を通します。余白を切り詰めたあと、左右に白を均等に足して、横幅をちょうど1872pxにそろえます。切り詰めの揺れを、ここで吸収します
  • 切り詰めたあとの幅が1872pxを超えた図(軸の外にはみ出したラベルなど)は、比率を保って縮小し、警告を出します。その図だけ文字が少し小さくなるのを、見逃さないためです

色も、緑(健全)・赤みのある色(警戒)・青(純利益)・灰色(中立)と、意味を決めて使っています。サイトの見た目(紺と無彩色)と合うよう、強い色は避けました。

再現性:データの時点を固定する

図は、特定の日までに入手できたデータで作っています。各スクリプトの冒頭に基準日の定数があります。

AS_OF = "2026-05-31"   # この日付以前のデータだけで図を作る

別の時点で作り直すなら、この値を変えて実行し直します。ただし、細かい決めごとがあります。

  • 有報・決算短信は、会計期末ではなく提出日で切ります。 3月期末の会社でも、6月に提出された有報は、5月31日時点では存在しないデータです。期末で切ると、未来の情報が混ざります
  • 5分足は、あとから取り直せません。 取得元が保持するのが約60日分なので、基準日に合わせた再生成ができません。日足は期間を指定して再現できます
  • 対話型アプリ(1-1〜2-2)は、基準日を固定していません。 実行時に最新のデータを取るので、記事中の図と数値が一致しないことがあります
  • CAR(累積異常リターン)は、5月末に近い決算の一部が未完了のまま載っています。 決算後20営業日の窓が、基準日までに埋まりきっていないためです

「いつのデータで作った図か」を、図の下の出典書きと、このリポジトリの README の両方に書いています。

記事の部品と体裁

記事のサイトは、Zensical の標準機能とCSSだけで作っています。記事で繰り返し使う部品は、次のとおりです。

部品 使いどころ
keypoint 式や結論を1行で強調する(例:アクルーアル比率の定義)
fig-meta 図の使用データ、「クリックで拡大」の注記
ref-card 用語の外部の解説へのリンク。目立たない細枠にしています
目次のカード トップの記事一覧。部ごとの見出しの下に2列で並べます
  • 図の拡大は、プラグイン(glightbox)の代わりに、自前の小さなJS(lightbox.js)にしています。Zensical は MkDocs のプラグインを読まないためです。本文の画像をクリックすると、全画面で拡大します
  • 見出しの装飾(┃ や │ の縦棒)は、CSSの疑似要素で描いています。下線や罫線で区切らず、余白で区切る方針です
  • サムネイルは、記事ごとに thumb.py で生成します。紺の地に、連載の番号と題名、中身を示す小さな図を置きます。Xで共有したときのカード画像にもなります
  • 用語集は、記事で出てくる財務・会計・機械学習の用語を、50音順に平易に解説したページです。専門用語に詰まった読者が、記事から戻れる場所にしています

公開の仕組み

公開は、リポジトリの main に push するだけです。GitHub Actions がサイトをビルドして、GitHub Pages に置きます。deploy.bat が、その前後の手間を引き受けます。

  1. ビルドの確認:手元で Zensical のビルドを通します。失敗したら、push せずに止まります
  2. push:新しいコミットがあるときだけ送ります。失敗したら最大3回まで、2回目からは HTTP/1.1 に切り替えて再試行します(ネットワークの一時的な不調対策)
  3. 公開の完了待ち:wait_deploy.ps1 が GitHub の実行状況を見て、成功・失敗を知らせます。GitHub Pages は、最後の段階で止まることがあります。240秒たっても終わらなければ、実行を取り消して自動で1回やり直します。そのあいだも、前の版のサイトは見え続けます

ビルドに使うパッケージは、すべてバージョンを固定しています(pip freeze の結果)。手元で確認したものと、GitHub が作るものが、同じになります。Actions の実行環境(Ubuntu)も、バージョンを固定しています。

個人情報の混入を、自動で検出する

push のたびに、privacy-check が走ります。次のものがリポジトリに入っていないかを調べ、見つかれば失敗にします。

  • ユーザー名や、ユーザーフォルダーの絶対パス(C:\Users\…)
  • __pycache__ や .pyc(実行すると絶対パスが埋め込まれる、自動生成のファイル)

図を作るスクリプトは、自分のパソコンの絶対パスを使って書かれるため、公開するコードに紛れ込みやすいからです。気づかずに公開するのを、人の注意ではなく、仕組みで防いでいます。

作るうえで判断したこと

コードとデータは分けて、データは載せない

株価・決算・有報のデータは、提供元の規約で再配布できません。そのため、公開するのはコードだけで、データの取得方法は各フォルダの README に書いています。読者は、自分で取得して同じ手順をたどれます。

プラグインやフックに頼らない

最初の版は、MkDocs のフック(記事ページだけに体裁のクラスを付ける)に頼っていました。Zensical はフックを読まないので、記事のサイト全体に同じCSSを当てる作りに変えました。トップと記事で別々の見た目にしたいときは、ページ側の目印で分けます。

整理中の記事は、公開しない

番外編の2本(5分足の超短期の検証)は、ソースにありますが、exclude_docs で公開から外しています。整理がついたら、ナビと一覧に戻します。ファイルを消すのではなく、「公開しない」だけを設定で切り替えているので、あとから戻すのが簡単です。

tomo から切り出した

この連載は、もともとこのサイト(tomo)の中にありました。記事が増えたため、2026年10月11日に別のサイトとして分けました。旧URLからの転送ページは、しばらく置いたあとに削除しました。

限界と使うときの注意

  • 分析コードは、そのままでは動きません。 図を作るスクリプトは、自分のパソコンのフォルダ構成(データの置き場所)に依存しています。別の環境で動かすには、データの読み込み部分を書き換える必要があります
  • データは載せていません。 再現するには、各自で取得してください
  • 図は静止画です。 拡大はできますが、数値にマウスを乗せて読んだり、条件を変えたりはできません。条件を変えて探せるものは、姉妹サイトの有報ナビにあります
  • これは投資の助言ではありません。 検証は学習・参考用です。投資判断は、自己責任でお願いします

更新

  • 2026年10月11日:tomo から別サイトとして分離