上場企業の平均年収・離職率をランキング化した【kessan-tracker】を作った

読了 約4分 たびすけ
上場企業の年収と離職率をランキング表示する記事のアイキャッチ

「あの会社の平均年収、いくらだろう」。実はその数字、有価証券報告書に載っています。上場企業の決算を全社ぶんまとめて集め、平均年収・勤続年数・離職率などをランキングで見られるWebアプリ 「kessan-tracker」 を作って公開しました。

何を作ったか

EDINET(金融庁の開示システム)のAPIから、全上場企業約3,800社 × 最大10年分の有価証券報告書を取得し、自前のWebアプリで公開しています。見られるのは、企業一覧・決算履歴に加えて、平均給与/平均勤続年数/平均年齢/離職率のランキング。数字はすべて一次情報(有報)が出どころです。

なぜ作ったか

決算情報は公開されているのに、横断で比べる・ランキングで見るのは意外と面倒です。「経理のデータ」を「個人開発」で触ってみる実験として、いちばん興味のある決算×お金をテーマに選びました。

仕組み(ざっくり)

  • 取得バッチ(Python):EDINET APIからXBRL(決算データの構造化フォーマット)を取得・解析
  • 表示(Next.js/TypeScript):サーバー側で直接データベースを読んで描画(SSR)
  • データベース(PostgreSQL):約3,800社・約39,000件の報告書データを格納(容量は25MBほど)

一番ハマったのはXBRLのタグ差異

決算データは会社ごとにバラバラではなく、XBRLという共通形式で公開されています。ところが実際に取り込むと、会計基準や業種でタグが違う。J-GAAPとIFRS、さらに銀行・保険といった業種、単体決算——それぞれ「同じ項目」でもタグ名が変わります。ここを吸収する処理が、このアプリで一番手間のかかった部分でした。

デプロイは「VPS」から「AWS」に方針転換

最初はVPSにセルフホストするつもりでした。でも既存の自分のインフラを確認したら、実際はAWS(Lightsail)ベース。「既存に合わせる」という当初の判断根拠が、そもそもAWSを指していたわけです。そこでAWS Lightsailへ転換しました。

  • 月$7の最小プラン1台に、Web・DB・バッチを同居(DBが小さく低トラフィックなので十分)
  • TLSはCaddyの自動取得(Let’s Encrypt)。CloudFrontは今回は使いませんでした——SSRでフロントとバックが同じプロセスのため分離の旨みが薄く、低トラフィックではコスト差もほぼ無いからです
  • 決算は毎日自動で差分更新(スケジュール実行)

AWS移行で見直した「既存」の意味

「既存パターンに合わせる」は正しい。ただし「“既存”が何か」を事実で確認してからでないと、判断の土台ごとズレます。ここは反省点でした。

AIとの協働(今回も)

分担は前回のテーマ自作と同じなので繰り返しません。今回それより効いたのは、「どのタグをどの項目に対応させるか」の見極めに、経理の実務感覚がそのまま使えたことです。公開されているデータでも、集めて・揃えて・見せ方を工夫すれば価値が変わる。個人開発の題材は、本業の中にありました。

経理×AIの実践は、連載「経理をAIに任せる」(全4回)にまとめています。

経理「経理はAIに任せられない」の先へ——AI前提の統制を、いま設計する「経理はAIに任せられない」はもう古い。本業が経理の筆者が、AIに作業を渡し責任は自分が持つ業務設計と、…