【概要】
Smart Investor はPHPの学習を初めて1週間の頃に開発をスタートしたものです。
Smart Investorは金融庁のデータベースから上場企業10年分財務状況全てのデータを取得し、バリュー投資に必要な情報を提供するためのサービスです。
金融庁が提供しているEDINET APIを叩き、上場企業4000社全ての有価証券報告書10年分のデータを元に、過去10年間常に自己資本利益率が15%を上回る好成績な企業をランキング化して表示しています。
初めてLaravel(PHPフレームワーク)を使い、非常に混乱しながら作ったものですが、同時に仮想環境構築やLaravelの基礎(マイグレーション 、ORM, テンプレート, ミドルウェアなど)に触れ多くの学びがありました。学んだ点については後述します。
【仕様技術】
Web Framework : Laravel
今回初めて使用するフレームワークです。MVCの概念について学習し、O/R Mapperが使いこなせるように意識しながら作成しました。
データ収集 : Python
金融庁が提供している電子開示システムEDINETから有価証券報告書(企業1年間の財務資料)を収集するために利用しました。EDINETがクロスドメイン通信を許可していないため、また収集したデータの後処理にPandasを用いるためにPythonを選択しました。
環境 : Vagrant + Virtual Box + Homestead
Laravelの開発環境にはHomesteadを用いました。Homesteadを動かすのに、Vagrantを用意しました。この辺の開発環境に関しては、大変学びが深かったので、チュートリアルとしてまとめました。
【開発】
開発期間は2週間、内訳は以下のようになっています。
- 1日目 : コンセプト / ゴール地点の決定。VagrantやLaravel、Homesteadの学習
- 2日目: 金融庁データベースEDINETの仕様理解
- 3日目: 有価証券報告書XRBLの仕様理解。タクソノミについての調査
- 4日目~11日目 : Pythonを用いた企業財務データの収集
- 12日目~14日目: Laravelにてサイト構築
上記のようにEDINET APIを用いてデータを収集する作業がもっとも時間がかかりました。
理由としては以下のように挙げられます。
- 各企業で有価証券報告書の記述に揺らぎがある
- 有価証券報告書が記述されているXBRL形式の仕様が難解(プログラムにXBRLの定義を理解させる必要がある)
- 15MBのzipファイルを展開しながら目的のデータを探索する必要がある
- EDINET APIの仕様が独特で、1つのデータを取得するのに2回リクエストを投げる必要がある
- これらの制約を解消しながら効率的にプログラムを回す必要がある
実際に、企業ごとに違う書式やタクソノミの定義など、いくつかの不特定因子に対して処理するようにプログラムを書いてはテストしての繰り返しでした。最終的にコードの量は1000行を上回り大規模なものになりました。
以前からEDINETやXBRLの仕様で困っている方が多かったのか、10年分のデータが収集できた様子を投稿したところ、大きな反響を受けました。
これらの収集したデータをMySQLに挿入して、DBの構築を行いました。
DBと言っても当時はDB設計については勉強する前だったので、単純に膨大なデータをExcelのように扱っているのみです。
このDBの情報をもとに、もっとも好成績な企業をランキング形式で表示。企業名をクリックすることで、企業情報を表示できるようにしました。