マネーフォワード 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.ps1Python 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
ブラウザが開くので、マネーフォワードに手動でログインする。
ログイン完了後、ターミナルで Enter を押すとセッション情報が .auth/storage_state.json に保存される。
python -m src.scraper.login取得 → パース → 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 に格納される。
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 # 指定銘柄のみpython -m src.web.server
# → http://localhost:8080起動時の自動更新: 当日の資産データや配当データがなければ、サーバー起動前に自動で取得を実行する。
手動で事前に src.daily や src.data.dividend_fetcher を実行する必要はない。
python -m src.web.server # 自動更新あり(推奨)
python -m src.web.server --skip-update # 自動更新をスキップダッシュボードの機能:
- 資産総額と資産クラス別内訳(円グラフ + ホバー詳細)
- AI分析コメント(Gemini API、設定時のみ)
- リスク指標カード(ボラティリティ・最大ドローダウン・集中度)
- 前日比 / 前月比 / 前年比の変動表示
- 口座一覧(残高順)
- 保有銘柄一覧(クラス別グループ、評価損益・各比較期間の差分付き)
- 株式の業種別内訳(円グラフ + ホバー詳細)
- 年間配当予測(利回り別内訳・業種別配当つき)
- 金融用語の解説(? ボタン)
- ライフプランページ・設定ページへのリンク
- 日付セレクタで過去データの閲覧
ダッシュボード右上の「家計簿 →」からアクセスできる。
ページ構成:
- サマリーカード — 支出合計・収入合計・収支
- カテゴリ別支出 — 大項目別の円グラフ+テーブル(ホバーで中項目詳細表示、予算対比付き)
- 高額支出 TOP15 — 金額順の支出リスト
- 月別支出推移 — 収入・支出の棒グラフ(カテゴリ別月次推移も表示)
- 予算残りカード — カテゴリごとの予算消化率をプログレスバーで表示
- 収入内訳 — 給与・副業・配当等の中項目別内訳+月別推移
- 固定費・変動費分析 — 自動検出した固定費の一覧と固定費率
- AI分析コメント — Gemini API による家計アドバイス(設定時のみ)
- 過去月ダウンロード管理 — 未取得月のCSVをオンデマンドでダウンロード
各カードには折りたたみボタン付き。折りたたみ状態は localStorage に保存される。
当月のCSVは日次パイプライン(python -m src.daily)で自動取得される。
ダッシュボード右上の「ライフプラン →」からアクセスできる。
ページ構成:
- AI分析コメント(Gemini API、設定時のみ)
- 日次資産推移 — 過去6ヶ月の資産クラス別エリアチャート
- 月次資産推移 — スナップショットから月末総資産の折れ線グラフ + テーブル
- 月次収支 — 月次の収入・支出・収支テーブル + 棒グラフ(支出には積立投資を含む旨の注記付き)
- 配当・分配金実績 — 月別棒グラフ+年別サマリーテーブル
- 成長予測(追加投資なし) — モンテカルロ・シミュレーション(P10/P50/P90)
- 成長予測(積立込み) — 月額積立額を設定して再計算可能(設定は DB に保存)
積立額は /plan?contrib=80000 のように変更すると DB に永続化され、次回以降もその値が使われる。
ダッシュボード右上の「設定」から Gemini API キーを登録すると、資産データの AI 分析コメントが有効になる。
- コスト: 無料(Gemini 2.5 Flash 無料枠: 250リクエスト/日、この機能は最大3回/日)
- API キーは Google AI Studio で無料取得
- 環境変数
GEMINI_API_KEYでも設定可能
コメントはバックグラウンド更新完了後に自動生成し DB に保存される。同日のコメントが既にあれば再生成しない。 設定ページでキーを保存すると、即座にコメント生成が開始される。
ダッシュボード・ライフプラン・家計簿の3ページそれぞれに分析コメントが表示される。
python -m src.cli.report実データを使わず架空のポートフォリオで表示する。SNS共有などに。
python -m src.web.server --demodist/ に静的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 デプロイの前提:
wranglerCLI が 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 liveはdist/に実データを書き出すため、生成物をそのまま公開リポジトリにコミットしないこと。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 管理外