こんにちは。
「おけまる投資開発室」です。
株式投資に使う銘柄分析アプリの開発過程を、YouTubeとブログで記録しています。
前回までに、これから作る株アプリの画面構成や、搭載したい機能について考えてきました。
今回は画面を作り始める前に、次の内容を整理しました。
- どこからデータを取得するのか
- 取得したデータをどこへ保存するのか
- どのような指標を計算するのか
- ユーザーが入力した情報をどのように管理するのか
- 最終的にどのデータを画面へ表示するのか
また、必要なデータを保存するためのER図も作成しています。
今回の動画
今回作成した設計資料
今回の記事で紹介した資料は、以下から確認できます。
画像では文字が小さく見える場合があるため、詳しく確認したい方はPDF版をご覧ください。
※現在の開発段階での設計案です。実装を進める中で変更する可能性があります。
今回作成したデータフロー図
まず、アプリ全体のデータの流れを図にまとめました。
このアプリでは、外部サービスから取得するデータと、ユーザーが自分で入力するデータの両方を扱います。
外部サービスから取得した株価や財務情報を使って投資指標を計算し、お気に入りや投資ストーリーなどのユーザー情報と組み合わせて、Reactの画面に表示する流れです。
外部サービスからデータを取得する
株アプリで使用する情報は、主にJ-QuantsとEDINETから取得する予定です。
J-Quantsから取得するデータ
J-Quantsからは、主に次の情報を取得します。
- 株価
- 発行済株式数
取得したデータは、それぞれ次のテーブルに保存する予定です。
stock_price_historiesshare_counts
株価は、日付ごとの履歴として保存します。
発行済株式数についても、株式分割や自己株式の取得などによって変化する可能性があるため、適用日ごとに保存する設計にしています。
EDINETから取得するデータ
EDINETからは、企業が提出する決算書類をもとに、次のような情報を取得する予定です。
- 財務数値
- 業績予想
- 配当
- 大株主情報
取得したデータは、主に次のテーブルへ保存します。
financial_reportsfinancialsforecastsdividendsshareholders
決算書類の基本情報をfinancial_reportsに保存し、その決算書類に紐づく形で、財務数値や業績予想、配当情報などを管理します。
TDnetへの対応は将来追加する予定
将来的には、TDnetの適時開示情報も利用したいと考えています。
株式分割、増資、自己株式消却などによって発行済株式数が変化しても、決算情報へ反映されるまでに時間がかかる可能性があります。
そのため、TDnetから発表内容を取得し、発行済株式数を早めに更新できる仕組みがあると便利です。
ただし、最初から対応すると開発が複雑になるため、TDnetへの対応はMVP完成後に追加する予定です。
取得したデータから投資指標を計算する
J-QuantsやEDINETから取得したデータは、そのまま表示するだけではありません。
株価、発行済株式数、財務数値、業績予想などを組み合わせて、銘柄分析に使用する指標を計算します。
現時点では、次のような指標を考えています。
- 時価総額
- PER
- ネットキャッシュ
- ネットキャッシュ比率(NCR)
- キャッシュニュートラルPER(CN-PER)
- PEG
- 財務安定性に関する数値
計算した指標は、銘柄一覧画面や銘柄詳細画面へ表示する予定です。
ユーザーが入力するデータ
このアプリでは、自動取得するデータだけでなく、利用者が自分で入力する情報も扱います。
現時点では、次のような機能を考えています。
お気に入り
気になる銘柄を、お気に入りとして登録します。
保存先はuser_favoritesテーブルです。
会社ステータス
銘柄ごとに、次のような情報を設定できるようにします。
- ピーター・リンチの銘柄分類
- 企業の成長段階
- 投資中、調査中などの投資ステータス
保存先はcompany_statusesテーブルです。
投資ストーリー
数字だけでなく、その企業へ投資する理由や、今後の見通しも記録できるようにします。
例えば、次のような内容です。
- その会社の魅力
- 今後利益が増えると考える理由
- どこまで成長できそうか
- 考えられるリスク
- 決算を確認したときのメモ
ストーリーの項目名はstory_titles、実際の記録内容はstory_itemsに保存する予定です。
手入力補正
取得した数値が古い場合や、シミュレーションを行いたい場合に、数値を手入力できる機能も考えています。
保存先はmanual_inputsテーブルです。
手入力された補正値がある場合は、自動取得した数値より補正値を優先して計算する設計を考えています。
ただし、この機能は将来追加する予定です。
保存フィルター
よく使う検索条件を保存できる機能も考えています。
例えば、次のような条件です。
- 時価総額500億円以下
- NCRが0.3以上
- PERが15倍以下
こうした条件を保存し、すぐに同じ条件で検索できるようにします。
保存先はsaved_filtersテーブルです。
こちらも将来対応する予定です。
ER図を作成してデータベースの構成を整理
データの流れを整理した後、必要なテーブルと、テーブル同士の関係をER図にまとめました。
今回のER図では、主に次の3種類のデータを分けて管理しています。
企業・株価に関するデータ
companiesstock_price_historiesshare_counts
companiesを企業情報の中心として、株価履歴や発行済株式数を紐づけます。
決算・財務に関するデータ
financial_reportsfinancialsforecastsdividendsshareholders
企業ごとの決算書類をfinancial_reportsで管理し、その決算に対応する財務情報、業績予想、配当、大株主情報を保存します。
ユーザーが登録するデータ
userscompany_statusesuser_favoritesstory_titlesstory_itemsmanual_inputssaved_filters
利用者ごとに、お気に入り、会社の分類、投資ストーリー、補正値、保存した検索条件を分けて管理します。
テーブル数は多いけれど、最初から全部は作らない
ER図にしてみると、想像していた以上にテーブル数が多くなりました。
ただし、最初からすべての機能を実装するわけではありません。
まずはMVP(必要最低限の機能)として、次のような流れを優先します。
- 企業情報を取得する
- 株価と発行済株式数を取得する
- 財務情報を取得する
- 投資指標を計算する
- 銘柄一覧と詳細画面に表示する
お気に入り、投資ストーリー、手入力補正、保存フィルターなどは、開発状況に応じて少しずつ追加していく予定です。
設計は今後変更する可能性があります
今回作成したデータフロー図とER図は、現時点での設計案です。
実際に開発を始めると、次のような修正が出てくると思います。
- このテーブルは分けない方がよい
- 別の項目が必要になる
- MVPには不要な機能がある
- データ取得方法を変更する
最初から完璧な設計を目指すのではなく、実際に作りながら必要に応じて変更していく予定です。
まとめ(動画・資料)
今回の記事で紹介した動画、資料は、以下から確認できます。
画像では文字が小さく見える場合があるため、詳しく確認したい方はPDF版をご覧ください。
※現在の開発段階での設計案です。実装を進める中で変更する可能性があります。
次回から画面開発へ
今回は、コードを書き始める前に、アプリ全体のデータの流れとデータベースの構成を整理しました。
図にしてみることで、次の内容が見えやすくなりました。
- どのサービスから何を取得するのか
- どこにデータを保存するのか
- どの情報から指標を計算するのか
- ユーザー入力をどのように管理するのか
次回からは、いよいよ実際の画面開発へ進む予定です。
まだ設計どおりに作れるかは分かりませんが、ChatGPTにも相談しながら、必要な部分から少しずつ進めていきます。

コメント