Skip to content

Repository files navigation

MoneyForward ME 資産トラッカー

マネーフォワード ME の「資産」画面から1日1回データを取得し、資産の推移・分析・将来予測を行う個人用ツール。

目的

  • 毎日の資産状況をスナップショットとして記録する
  • 口座別・銘柄別・資産クラス別の増減を把握する(前日/前月/前年比較)
  • 保有株式の業種分散と配当予測を確認する
  • モンテカルロ・シミュレーションで将来の資産レンジを推定する
  • Gemini API(無料)で資産データを分析し、AIコメントを表示する

全体の流れ

[ Playwright (ブラウザ自動操作) ]
    ↓  HTML / Screenshot 保存
[ raw/ ディレクトリ ]
    ↓  パース
[ SQLite DB ]
    ↓  分析・予測
[ Web ダッシュボード / CLI ]

サイトへのアクセスは1日1回のみ。取得した raw データを元にすべての分析を行い、再アクセスはしない。

セットアップ

ワンコマンドインストール(推奨)

# Linux / macOS / WSL
bash install.sh

# Windows PowerShell
powershell -ExecutionPolicy Bypass -File install.ps1

Python 3.11+ の確認 → uv インストール → 仮想環境作成 → 依存インストール → Playwright Chromium インストールを一括実行する。

手動セットアップ

# 仮想環境の作成と依存インストール
uv venv .venv
source .venv/bin/activate
uv pip install -e .

# Playwright のブラウザをインストール
playwright install chromium

システムに Chromium の依存ライブラリが足りない場合: sudo playwright install-deps chromium

使い方

1. 初回ログイン(手動)

ブラウザが開くので、マネーフォワードに手動でログインする。 ログイン完了後、ターミナルで Enter を押すとセッション情報が .auth/storage_state.json に保存される。

python -m src.scraper.login

2. 日次データ取得(毎日1回)

取得 → パース → DB保存 を1コマンドで実行する。 前回からデータに変化がない場合は自動的に一括更新をリクエストし、待機後に再取得する。

同じ認証済みセッションでMoneyForwardの口座詳細も確認し、カードの「引き落とし予定額」 (引落日・金額)を自動取得する。取得に失敗した日は前回の自動取得値を保持し、 設定ページの「投資可能額」に計画期間内の予定だけを反映する。

python -m src.daily                # デフォルト(更新待ち60秒)
python -m src.daily --wait 30      # 更新待ちを30秒に変更
python -m src.daily --no-refresh   # 一括更新を行わない(従来動作)

raw データは raw/YYYY-MM-DD_HHMMSS/ に保存され、解析結果が data/assets.db に格納される。

3. 配当データ更新

Yahoo Finance Japan から各銘柄の年間予想配当(1株配当)を自動取得し data/dividends.json に保存する。 ETF や Yahoo に dps が未掲載の銘柄は dps: null で記録され、ダッシュボードでは「取得エラー」と表示される(集計には含まれない)。 セカンダリ取得経路(minkabu 等)の追加は Issue #77 で追跡中。

python -m src.data.dividend_fetcher           # 全銘柄を取得
python -m src.data.dividend_fetcher 5401 9433  # 指定銘柄のみ

4. ダッシュボード表示

python -m src.web.server
# → http://localhost:8080

起動時の自動更新: 当日の資産データや配当データがなければ、サーバー起動前に自動で取得を実行する。 手動で事前に src.dailysrc.data.dividend_fetcher を実行する必要はない。

python -m src.web.server               # 自動更新あり(推奨)
python -m src.web.server --skip-update  # 自動更新をスキップ

ダッシュボードの機能:

  • 資産総額と資産クラス別内訳(円グラフ + ホバー詳細)
  • AI分析コメント(Gemini API、設定時のみ)
  • リスク指標カード(ボラティリティ・最大ドローダウン・集中度)
  • 前日比 / 前月比 / 前年比の変動表示
  • 口座一覧(残高順)
  • 保有銘柄一覧(クラス別グループ、評価損益・各比較期間の差分付き)
  • 株式の業種別内訳(円グラフ + ホバー詳細)
  • 年間配当予測(利回り別内訳・業種別配当つき)
  • 金融用語の解説(? ボタン)
  • ライフプランページ・設定ページへのリンク
  • 日付セレクタで過去データの閲覧

5. 家計簿分析

ダッシュボード右上の「家計簿 →」からアクセスできる。

ページ構成:

  • サマリーカード — 支出合計・収入合計・収支
  • カテゴリ別支出 — 大項目別の円グラフ+テーブル(ホバーで中項目詳細表示、予算対比付き)
  • 高額支出 TOP15 — 金額順の支出リスト
  • 月別支出推移 — 収入・支出の棒グラフ(カテゴリ別月次推移も表示)
  • 予算残りカード — カテゴリごとの予算消化率をプログレスバーで表示
  • 収入内訳 — 給与・副業・配当等の中項目別内訳+月別推移
  • 固定費・変動費分析 — 自動検出した固定費の一覧と固定費率
  • AI分析コメント — Gemini API による家計アドバイス(設定時のみ)
  • 過去月ダウンロード管理 — 未取得月のCSVをオンデマンドでダウンロード

各カードには折りたたみボタン付き。折りたたみ状態は localStorage に保存される。

当月のCSVは日次パイプライン(python -m src.daily)で自動取得される。

6. ライフプランニング

ダッシュボード右上の「ライフプラン →」からアクセスできる。

ページ構成:

  • AI分析コメント(Gemini API、設定時のみ)
  • 日次資産推移 — 過去6ヶ月の資産クラス別エリアチャート
  • 月次資産推移 — スナップショットから月末総資産の折れ線グラフ + テーブル
  • 月次収支 — 月次の収入・支出・収支テーブル + 棒グラフ(支出には積立投資を含む旨の注記付き)
  • 配当・分配金実績 — 月別棒グラフ+年別サマリーテーブル
  • 成長予測(追加投資なし) — モンテカルロ・シミュレーション(P10/P50/P90)
  • 成長予測(積立込み) — 月額積立額を設定して再計算可能(設定は DB に保存)

積立額は /plan?contrib=80000 のように変更すると DB に永続化され、次回以降もその値が使われる。

7. AI分析コメント(Gemini API)

ダッシュボード右上の「設定」から Gemini API キーを登録すると、資産データの AI 分析コメントが有効になる。

  • コスト: 無料(Gemini 2.5 Flash 無料枠: 250リクエスト/日、この機能は最大3回/日)
  • API キーは Google AI Studio で無料取得
  • 環境変数 GEMINI_API_KEY でも設定可能

コメントはバックグラウンド更新完了後に自動生成し DB に保存される。同日のコメントが既にあれば再生成しない。 設定ページでキーを保存すると、即座にコメント生成が開始される。

ダッシュボード・ライフプラン・家計簿の3ページそれぞれに分析コメントが表示される。

8. CLI レポート

python -m src.cli.report

9. デモモード(ダミーデータ)

実データを使わず架空のポートフォリオで表示する。SNS共有などに。

python -m src.web.server --demo

10. 静的HTMLビルドと Cloudflare Pages デプロイ

dist/ に静的HTMLを生成し、Cloudflare Pages(または GitHub Pages)に公開できる。

# デモデータで静的HTML生成(GitHub Pages 用デモバナー付き)
python -m scripts.build_static --mode demo --output dist

# 実データで静的HTML生成(バナーなし、本人閲覧用)
python -m scripts.build_static --mode live --db-path data/assets.db --output dist

# 日次取得→ビルド→Cloudflare Pages デプロイを一括実行
python -m src.daily --build-static --deploy --deploy-project-name <PROJECT_NAME>

Cloudflare Pages デプロイの前提:

  • wrangler CLI が PATH 上にあること(npm install -g wrangler または npx wrangler
  • 以下のいずれかで Cloudflare の認証を済ませておく:
    • wrangler login で対話的にログイン(推奨)
    • 環境変数 CLOUDFLARE_API_TOKEN(および必要なら CLOUDFLARE_ACCOUNT_ID)を設定(CI 用)
  • --deploy-project-name で Cloudflare Pages の project name を指定(省略時は wrangler のデフォルト挙動)
  • 認証失敗・wrangler 未インストール時はビルド成果物(dist/)は残るが、デプロイのみが失敗する

⚠️ --mode livedist/ に実データを書き出すため、生成物をそのまま公開リポジトリにコミットしないこと。Cloudflare Pages 経由でのみ配信する想定。

プロジェクト構成

money_forward/
├── pyproject.toml
├── .gitignore
├── raw/                            # raw データ(git管理外)
├── data/                           # SQLite DB・配当JSON(git管理外)
├── .auth/                          # セッション情報(git管理外)
├── src/
│   ├── scraper/
│   │   ├── login.py                # 手動ログイン → storageState 保存
│   │   └── fetch.py                # Playwright でページ取得・raw 保存
│   ├── parser/
│   │   ├── normalize.py            # 資産 HTML → 構造化データ
│   │   ├── cashflow.py             # 月次収支 HTML → 収入・支出データ
│   │   └── cf_csv.py               # 家計簿 CSV → 取引明細データ
│   ├── db/
│   │   ├── schema.py               # SQLite スキーマ定義・初期化
│   │   └── repository.py           # スナップショット・月次収支・設定の保存・取得
│   ├── analysis/
│   │   ├── compare.py              # 前日/前月/前年比較
│   │   ├── metrics.py              # ボラティリティ・ドローダウン等
│   │   └── ai_comment.py           # Gemini API による AI 分析コメント
│   ├── prediction/
│   │   └── montecarlo.py           # モンテカルロ成長予測
│   ├── data/
│   │   ├── stock_master.py         # 銘柄マスタ(業種・配当)
│   │   └── dividend_fetcher.py     # Yahoo Finance から配当自動取得
│   ├── cli/
│   │   └── report.py               # CLI レポート
│   ├── web/
│   │   └── server.py               # Web ダッシュボード
│   └── daily.py                    # 日次パイプライン
└── tests/
    ├── test_repository.py         # DB クエリ関数のテスト
    ├── test_server_html.py        # HTML 生成・UI テスト
    └── test_e2e_budget.py         # 予算機能 E2E テスト

技術スタック

項目 技術
ブラウザ自動操作 Playwright (Chromium, headless=False)
HTML パース BeautifulSoup4 + lxml
データベース SQLite (WAL モード)
Web サーバー Python 標準ライブラリ (http.server)
フロントエンド vanilla HTML/CSS/JS, Canvas 円グラフ
配当データ取得 Yahoo Finance Japan (urllib.request)
成長予測 モンテカルロ・シミュレーション (stdlib random)
AI 分析 Google Gemini 2.5 Flash(無料枠)
パッケージ管理 uv

外部フレームワーク不使用。Web ダッシュボードは stdlib の HTTPServer で動作する。

成長予測について

モンテカルロ・シミュレーションで 1年/3年/5年 後の資産額を P10(悲観)/ P50(中央)/ P90(楽観)のレンジで推定する。

  • リスク資産(株式・投信・株式型年金)のみ市場変動の対象としてシミュレーション
  • 安全資産(預金・不動産・保険型年金)は変動なしで固定加算
  • 年金は銘柄名から株式型(iDeCo・確定拠出等)/ 保険型を自動判定
  • 幾何ブラウン運動(対数正規モデル)で月次リターンを生成、10,000回実行
  • パラメータは過去の日次リターンから推定(データ5日未満の場合は資産クラス別デフォルト値の加重平均を使用)
  • 「積立込み」モードでは月額積立額を指定可能

ダッシュボードの ? ボタンから詳細な説明を確認できる。

ロードマップ

マネーフォワード ME 資産形成アドバンスコースの機能を Web で再現することを目指している。

実装済み

資産ダッシュボード (/)

機能 備考
資産クラス別内訳(円グラフ) 5クラス分類
株式の業種別内訳(円グラフ) 国内株+米国株対応
年間配当予測(銘柄別内訳) Yahoo Finance から DPS 自動取得
配当利回り表示 現在値ベース+取得単価ベースの2種類
配当利回り別・業種別配当内訳 低/中/高配当の円グラフ+業種別テーブル
前日比 / 前月比 / 前年比 総額・クラス別・銘柄別
ボラティリティ・ドローダウン リスク指標カード
円グラフのホバー詳細表示 全グラフでツールチップ対応
日付セレクタ 過去データの閲覧
セッション切れ通知 自動検知して赤バナー表示
データエクスポート CSV / JSON 形式で資産データをダウンロード

家計簿分析 (/cf)

機能 備考
カテゴリ別支出・収入分析 大項目/中項目別の円グラフ+テーブル
高額支出 TOP15 金額順リスト
月別支出推移 収入・支出の棒グラフ
カテゴリ別月次推移 カテゴリごとの棒グラフ (#1)
予算設定と予算対比 カテゴリごとの予算+消化率プログレスバー (#2)
AI分析コメント 家計アドバイス(Gemini API) (#3)
固定費・変動費の自動検出 金額ブレ10%以内で判定 (#4)
収入内訳・月別推移 給与・副業・配当等の内訳
CSVダウンロード管理 過去月のオンデマンドDL (#12, #15)

ライフプランニング (/plan)

機能 備考
日次資産推移 過去6ヶ月のクラス別エリアチャート (#18)
月次資産推移 月末総資産の折れ線グラフ
月次収支 収入・支出・収支テーブル+棒グラフ
配当・分配金実績 月別棒グラフ+年別サマリー (#6)
モンテカルロ成長予測 P10/P50/P90 レンジ推定
積立シミュレーション 月額設定をDBに永続化
AI分析コメント ライフプランアドバイス(Gemini API)

設定・インフラ

機能 備考
AI分析コメント(3ページ対応) Gemini 2.5 Flash 無料枠
AIチャット連携 DBデータをエクスポートして外部AIで分析 (#33)
レスポンシブ対応 モバイル表示に最適化 (#7)
折りたたみ対応(全ページ) カード縮小方式 (#11, #14)
ナビゲーションバー ツールバー形式 (#13)
セキュリティ対策 XSS対策・入力検証・CSRF対策 (#21-#23)
DB最適化 busy_timeout・WAL・接続管理 (#25, #26, #29)
ロギング 構造化ログ出力 (#28)
米国株対応 業種マスタ・配当データ・USD→JPY変換 (#5)
テスト pytest による自動テスト (#8)

未実装・検討中

機能 優先度 内容
締め日設定 月の集計開始日をカスタマイズ(例: 25日始まり) (#17)
ライフイベント計画 結婚・住宅購入等の大型支出を予測に反映 (#20)
ライフプラン詳細化 資産クラス別リターン・ボラの調整UI (#19)
投資信託のグラフ表示 投資信託のリターン推移 (#34)
カード払い明細の家計簿化 要検討 カード引き落とし時の二重計上問題 (#16)
資産タグ付け 非対応 本家アプリ独自の UI 機能

注意事項

  • サイトへのアクセスは1日1回を厳守し、サーバーへの負荷を最小化する
  • .auth/(セッション情報)、raw/(生データ)、data/(DB)は git 管理外

About

個人資産ダッシュボード — 日次スナップショット・分析・AI コメント・将来予測

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages