AI Dev Lab
GradFund

GradFund ができるまで — 教育費と毎月の積立額を逆算する

教育費シミュレーターの開発ログ。 進学コース 4 通り × 大学 5 種別の費用表を組み、 目標額から毎月の積立額を逆算する計算と、 古い学校資料のような見た目に寄せた設計を記録しています。

·decision改善·stage公開中

GradFund は 教育費 シミュレーター。 子供の年齢 + 進学コース + 大学種別 + 自宅 / 下宿 + 月積立 + 想定年利 から、 残り教育費総額 + 不足額 + NISA 積立必要額 を試算。 ラボ 38本目、 計算ツール ジャンル 6本目 (CoinStack NISA / RoofFund 住宅 / GiftCap ふるさと納税 / SideTax 副業税 / StorkCast 育休 / GradFund 教育費、 マネー計算機 6 本 で子育てイベントの 「育休 → 教育費」 が連続)。

#なぜこの形にしたか

外部 AI が提示した 90+α 案 (アプローチ B 案 51) のうち、 「無料で運営できて (¥0/月)、 PV ボリュームが大きい」 候補のトップとして 教育費 シミュレーター を選定。 「教育費 シミュレーション」 「教育費 計算」 「中学受験 費用」 系の検索ボリュームは子育て世帯ほぼ全員に刺さる規模で、 純計算 + 静的データで完結。

#技術スタック

#学習費 データテーブル (令和 5 年 文科省 調査)

ts
const ANNUAL_COST = {
 kinder: { public: 8.4, private: 16.6 }, // 万円/年
 elem: { public: 35.3, private: 167.0 },
 junior: { public: 53.9, private: 143.6 },
 high: { public: 51.3, private: 105.4 },
} as const

const UNIV_4Y_COST: Record<UnivType, number> = {
 "national-arts": 250, "national-sciences": 250,
 "private-arts": 408, "private-sciences": 551,
 "private-medical": 2400,
}

const LIVING_4Y_COST = 576 // 下宿 月 12 万 × 12 × 4

ソース: 令和 5 年 文部科学省 「子供の学習費調査」 + 日本政策金融公庫 「教育費負担の実態調査」 + JASSO 「学生生活調査」。

#NISA 月複利 逆算

ts
// 月複利 FV: FV = PMT * (((1+r)^n - 1) / r)
const monthlyRate = annualRate / 12
const months = remainingYears * 12
const savingFV = monthlySaving * ((Math.pow(1 + monthlyRate, months) - 1) / monthlyRate)

// 不足額を 残り月数 で複利逆算 → 月積立必要額
// PMT = FV * r / ((1+r)^n - 1)
const monthlyRequired = (shortfall * monthlyRate) / (Math.pow(1 + monthlyRate, months) - 1)

CoinStack の月複利 FV 知見を再利用。 年利 0 / 1 / 3 / 5 / 7% の 5 段階。

#年齢別 棒グラフ (SVG)

tsx
{result.yearly.map((y, i) => {
 const x = (i / result.yearly.length) * 720
 const h = (y.annualCost / maxAnnual) * 170
 const fill = y.age < input.childAge ? "#c8b894" // 既経過 (灰)
 : y.school === "大学" ? "#7a2a2a" // maroon
 : y.school.includes("私立") ? "#b8923a" // gold
 : "#1f3a8a" // navy (公立)
 return <rect x={x} y={185 - h} width={w} height={h} fill={fill} />
})}

22 歳までの 23 本の棒を 720×200 SVG に描画、 公立=navy / 私立=gold / 大学=maroon / 既経過=灰の 4 色で塗り分け。

#見た目の方針

ヴィンテージ アカデミア / 卒業証書 モチーフ:

  • 配色: cream parchment #f1e7c8 + ink navy #1a2a4a + maroon ribbon #7a2a2a + gold seal #c89a3a + ivy green #3a5a3a
  • モチーフ: 巻物 + 卒業証書 + 上部 maroon ribbon banner + 大型 gold 円形 seal stamp 「教 / 育」 (rotate -8deg) + 3px double maroon border + inset gold border
  • typography: Instrument Serif italic (diploma feel) + Space Grotesk 800 (display) + JetBrains Mono (numerics)

既存 マネー計算機 5 本 (coin-stack midnight navy / roof-fund cyan blueprint / gift-cap 墨朱和風 / side-tax ledger green / stork-cast baby pink mint 母子手帳) と完全別軸。 唯一の 「卒業証書 / 大学アカデミア」 モチーフ。

#6 プリセット

  • 0歳 / オール公立 / 国立大 (最小コース)
  • 5歳 / 公立 → 私立文系 (定番)
  • 8歳 / 中学受験 + 私立理系
  • 0歳 / オール私立 / 私大文系
  • 10歳 / 私立医歯薬 + 下宿 (最大コース)
  • 15歳 / 国立大 下宿 (残り 7 年で逆算)

#まだやっていないこと

  • 塾代 (中学受験塾 / 大学受験 予備校) の上乗せ計算
  • 私立 vs 国立 の同時比較表示
  • 複数子供 の合算シミュ
  • 学資保険 vs NISA の比較
  • 児童手当 + 出産育児一時金 の収入側計上
  • 奨学金 + 教育ローン の選択肢

[ ./next_action ]

読んだら、 GradFund を実際に動かす。

この開発ログは GradFund をどう作ったかの記録です。 読み終わったらそのままサービス本体へ戻って、 実物で価値を確かめてください。

[ ./related_logs ]

関連する開発ログ

all logs →
ToonCast

ToonCast ができるまで — AnimeGANv2 をブラウザで動かす

AnimeGANv2 の小さな ONNX (約9MB) を onnxruntime-web (単一スレッド WASM=COOP/COEP不要、 color-revive で承認済みライブラリの再利用) で実行。 512x512・[-1,1] 正規化で推論し、 結果を元解像度に戻して表示する設計記録。 写真は端末内処理。

read log →
ColorRevive

ColorRevive ができるまで — onnxruntime-web で白黒写真をカラー化

DeOldify の量子化 ONNX を onnxruntime-web (CDN side-load・単一スレッド WASM=COOP/COEP不要) で実行。 256x256 でモデル推論し、 輝度は元写真・色だけ AI を YCbCr で再合成して輪郭を保つ設計記録。 写真は端末内処理。

read log →
PhotoTwin

PhotoTwin ができるまで — CLIP画像埋め込みで似た写真を見つける

CLIP (Xenova/clip-vit-base-patch32) の image-feature-extraction を transformers.js の CDN ESM で side-load し、 各写真を正規化ベクトル化。 cosine 類似度で重複・似た写真をブラウザ内で検出する設計記録 (新ライブラリ追加なし=what-cam と同じ CLIP の再利用)。

read log →
AkinFind

AkinFind ができるまで — ブラウザ内で完結する embeddings 意味検索

多言語の文章埋め込みモデル (Xenova/multilingual-e5-small) を transformers.js の CDN ESM で side-load し、 各文を正規化ベクトル化。 cosine 類似度で意味検索と似ている文ペア検出を全て端末内で行う設計記録。

read log →
WhatCam

WhatCam ができるまで — CLIP のゼロショット画像分類をブラウザで動かす

CLIP (Xenova/clip-vit-base-patch32) を transformers.js の CDN ESM で side-load し、 写真と候補ラベルの近さをブラウザ内で計算。 日本語ラベルを英語プロンプトに変換し、 図鑑と自由入力の両モードで「これ何?」を判定する設計記録。

read log →
DepthCast

DepthCast ができるまで — 1枚の写真をAIの深度推定で立体にする

Depth Anything (transformers.js) を CDN ESM で side-load し、 1枚の写真から深度マップを推定。 WebGL2 フラグメントシェーダで深度に比例した視差 (iterative backward parallax) を作り、 赤青アナグリフ / WebM 書き出しまで端末内で完結させた設計記録。

read log →