個人用に作っていた 日本株スクリーニング(yfinance × わが投資術) の続きという感じです。
(気が付けばzenn下の記事を投稿して半年以上経っていた)
EDINET ベースの財務スクリーナー エディスク(edisuku) をオープンソースとして公開しました。
EDINET DBという便利なサイトも出てきたし、今回作ったのをまとめても微妙かなと思いましたが、まあ出してみるだけ無料なので公開してみました。
- サイト: https://edisuku.com/
- リポジトリ: https://github.com/testkun08080/edisuku(MIT License)
きっかけ — Sakana AI の EDINET データを見て
yfinance スクリーナーを作っていたとき、Sakana AI が EDINET のデータも用意して分析していたのを見て、「一回時間を見つけたらやってみよう」と思っていました。
EDINET は金融庁が公開している有価証券報告書などの開示データです。
これは一旦作ってみるのも楽しいかなと思って、作ってみました。
参考にしたのは Sakana AI の edinet2dataset です。
データ取り込みパイプライン(apps/wrapper)はこちらを参照しつつ、自分の用途に合わせて組み直しています(クレジットは CREDITS.md に記載)。
個人用にAIフル回しで作ったが、ぐちゃぐちゃだった
実際に手を動かし始めたのは今年の3月あたりでしょうか。
自分用なのでAI フル回しで一気に prototype を作り、とりあえず動くものはすぐできました。
ただ、正直なところコードも構成もぐちゃぐちゃですし、メンテもよくわからん。といった感じだったので。。
まとめつつ、作り直したのが今回作ったものです。
エディスクでできること
edisuku.com では、EDINET から取得した開示データをもとに、次のような分析が出来るかと思います。
- EDINET 自動収集 — 有価証券報告書・四半期報告書などから XBRL/TSV をパースし、財務データを抽出
- スクリーニング — ROE・PER・PBR・配当利回り・時価総額など 20 以上の指標で銘柄を絞り込み
- 時系列チャート — 売上・営業利益・純利益・配当の推移を 10 年分以上表示
- 財務諸表ビューア — BS / PL / CF を時系列で横並び比較(EDINET 原典へのリンク付き)
- 大株主分析 — 株主構成・持株比率の変化をレポート単位で追跡
ランディングページのキャプチャはこんな感じです。

公開時点では 上場企業 3,900 社超・10 年分の四半期データをカバーしています(サイト上の統計表示ベース)。
アーキテクチャ — GHA で日次更新、Cloudflare で全部サーブ
構成の概要は README にもあるとおり、ざっくり次の流れです。
EDINET API
↓
apps/wrapper(Python: 取得・解析)
↓ SQLite delta
Cloudflare D1
↓ drizzle
apps/api(Hono on Workers)
↓ hono/client(型安全)
apps/web(Vike + React on Workers)
↓
ユーザーデータ取得(GitHub Actions)
daily-refresh.yml が日次更新の要です(現状は workflow_dispatch で手動実行、本番向け cron はコメントアウト済み)。
- D1 から既知の
doc_idを取得 ingest_daily.pyで EDINET から当日提出分を取得・パースpublish_to_d1.pyで SQLite の差分を SQL に変換し、D1 へ反映company_metricsを再構築し、スクリーナー用の指標テーブルを更新- KV のメトリクススナップショットを無効化(次回リクエストで再生成)
Python の wrapper は pnpm workspace の外に置き、取得・解析だけを担当させています。
指標計算(ROE、Piotroski F-Score など)は packages/metrics に集約し、API・Web・バッチが同じロジックを参照する形です。
配信(Cloudflare)
ホスティングはCloudflare Workersの無料枠を前提にしています。
| レイヤ | 技術 | 役割 |
|---|---|---|
| 永続化 | D1(SQLite) | 企業・書類・財務期間・指標・大株主 |
| キャッシュ | KV | スクリーナー用メトリクススナップショット |
| API | Hono on Workers | REST API(drizzle で D1 を参照) |
| フロント | Vike + React on Workers | スクリーナー UI(hono/client で型安全に API 呼び出し) |
apps/web は apps/api の AppType を import するだけで、実行時依存は持たない設計です。API のエンドポイントを変えるとコンパイル時に Web 側の型も追従します。
デプロイは deploy.yml から staging / production を選んで手動実行する形です(main への push 自動デプロイはコメントアウト)。
モノレポ構成
リポジトリを見ていただければわかると思いますが、主要なディレクトリは次のとおりです。
apps/
api/ Hono on Workers(REST API)
web/ Vike + React on Workers(UI)
wrapper/ Python: EDINET 取得・解析
packages/
db/ drizzle schema + 共通クエリ
metrics/ 指標計算・スクリーナー列定義
types/ API/Web 共通 TS 型
infra/
compose.yml ローカル開発(Docker Compose)
render-wrangler-config.sh wrangler テンプレ生成
docs/
ARCHITECTURE.md / modules/ / FORK.md などローカルでは docker compose -f infra/compose.yml up で 11 社分のサンプル DB 付きの UI をすぐ確認できます。
フォークして自分の Cloudflare アカウントに載せる手順は docs/FORK.md にまとめてあります。
その他機能とか、有料機能はまた気が向いたときに
ダウンロード(CSV エクスポート)や追加機能を 有料プランとして切り出すことを想定しています。
全部無料でもいいですけど、もうちょっと整理してお金払えるレベルになったら、それも足そうかなと思います。
ただ、それは また気が向いたときに進めようと思っています。
まずは OSS として動くところまで持っていけたので、使ってみてフィードバックがあれば Issue や PR で歓迎です。
お問い合わせからでも受け付けています。
まとめ
これを使って面白い分析などやってくれたら幸いです。