▍AI Dev Lab
NestFund

NestFund ができるまで — 退職金と年金と iDeCo をまとめる

老後資金シミュレーターの開発ログ。 退職所得控除・累進所得税・老齢基礎年金と厚生年金の計算式・ 繰上げ繰下げ・iDeCo の複利をひとつにまとめ、 退職後から 100 歳までの収支を出すまでを記録しています。

NestFund は、退職金・公的年金・iDeCo をひとつにまとめて、退職後から 100 歳までの資金推移を出す老後資金シミュレーターです。マネー計算の中でも扱う制度がいちばん多く、どこまで正確にやり、どこから割り切るかの線引きに一番時間を使いました。

#🎯 バラバラに計算しても意味がない

退職金の手取り、年金の受給額、iDeCo の残高 ── それぞれを出す計算機は既にたくさんあります。でも本当に知りたいのは、

結局、何歳まで持つのか

です。3 つを別々に出しても、その答えにはなりません。だから「全部足して、寿命まで月次で回す」ことを最初の要件にしました。

#💼 退職所得控除 ── 勤続 20 年で傾きが変わる

退職金の税金は、給与とはまったく違う計算をします。まず控除額が勤続年数で決まります。

ts
export function retirementDeduction(years: number): number {
  if (years <= 20) return Math.max(80, 40 * years)   // 万円

  return 800 + 70 * (years - 20)
}

20 年を境に、1 年あたり 40 万円から 70 万円へ増えます。 長く勤めた人ほど有利になる設計です。最低保証の 80 万円があるので、短期でも Math.max が要ります。

そして控除を引いたあと、さらに 1/2 になります。

ts
const taxable = Math.max(0, (gross - deduction) / 2)

この「1/2 課税」があるおかげで、退職金は同じ額の給与よりずっと税金が軽い。たとえば勤続 38 年なら控除は 800 + 70 × 18 = 2,060 万円。そこまでは非課税で、超えた分の半分だけが課税対象です。

ここを知らずに「退職金 2,000 万円 = 数百万円が税金」と思っている人は多くて、実際に計算して数字が出ると驚かれる部分だと思います。

税額は累進の速算表をそのまま実装しました。

ts
if (t <= 195) return t * 0.05
if (t <= 330) return t * 0.10 - 9.75
if (t <= 695) return t * 0.20 - 42.75
...

控除額(9.75 / 42.75 …)は、税率が切り替わる境目で税額が連続になるように決まっている値です。表を写すだけですが、写し間違えると境目で段差が出るので、境界値で連続性を確かめました。

最後に復興特別所得税 2.1% と住民税 10% を足します。

#🏛️ 年金 ── 基礎と厚生で式が別

公的年金は 2 階建てで、計算式がまったく違います。

老齢基礎年金は加入月数の比例配分だけです。

ts
const basic = BASIC_PENSION_FULL * (npMonths / 480)

480 月 = 40 年で満額。単純です。

老齢厚生年金は報酬比例で、係数が決まっています。

ts
const salary = (inputs.monthlyIncome * 5.481 * inputs.pensionPaidMonths) / 1000

5.481 / 1000 という乗率が公式の定数です。円で計算する式を万円単位に直すところで桁を間違えやすいので、コードにその変換をコメントで残しました。

年額(円) = 平均標準報酬月額(円) × 5.481/1000 × 加入月数
→ 年額(万円) = monthlyMan × 5.481 × months / 1000

単位変換は式のそばに書き残しておく、というのはマネー計算機を何本か作って身についた習慣です。

#⏩ 繰上げ・繰下げは月単位

受給開始を早めると減り、遅らせると増えます。これは月単位の調整です。

ts
const diffMonths = (inputs.pensionStartAge - baseAge) * 12
if (diffMonths < 0) adjustment = 1 + diffMonths * 0.004   // 繰上げ -0.4%/月

else                adjustment = 1 + diffMonths * 0.007   // 繰下げ +0.7%/月

60 歳受給なら -24%、75 歳まで待てば +84%。増減率が非対称(-0.4% と +0.7%)なのがポイントで、待てる人ほど有利になる制度設計です。

「何歳から受け取るのが得か」は寿命次第なので断定できません。だからこのサービスでは受給開始年齢をスライダーにして、資金推移がどう変わるかを見てもらう形にしました。答えを出すのではなく、比較できるようにする方針です。

#📉 月次で回して「何歳で尽きるか」を出す

ここが本題です。退職時点の資産(退職金の手取り + iDeCo 残高)を初期値にして、毎月

  • 生活費を引く
  • 年金受給が始まっていれば足す

を寿命(100 歳)まで繰り返します。残高が 0 を割る月があれば、そこが尽きる時点です。

年単位ではなく月単位にしたのは、年金の受給開始が年の途中に来るからです。年で丸めると、繰上げ・繰下げの効果が正しく出ません。

#😓 苦労したところ

制度の細部をどこまで入れるか。 在職老齢年金による支給停止、加給年金、振替加算、企業年金の形態差 ── 入れ始めるとキリがありません。入れるほど正確になりますが、入力項目も増えて誰も使えなくなります。

線引きとして 「多くの人に共通して効くもの」だけ入れることにしました。退職所得控除、累進税、基礎+厚生、繰上げ繰下げ、iDeCo。それ以外は概算であることを明示しています。

「概算です」と書くだけでは足りない。 金額が出るサービスは、数字が独り歩きします。どの前提で計算したか(令和 7 年度の税率、iDeCo は年 3% 想定、など)を結果のそばに置くようにしました。前提が見える場所にないと、数字だけ切り取られます。

6 プリセットで入力の負担を下げる。 13 項目を空欄から埋めさせると誰も完走しません。大企業 / 中小企業 / 公務員 / 自営業 / 早期退職 / 定年延長 70 の 6 つを用意して、そこから自分の状況に近いものを選んで微調整する導線にしました。

#🔭 今後の拡張

  • 在職老齢年金(働きながら受け取ると年金が減る仕組み)
  • 配偶者の年金を含めた世帯単位の試算
  • インフレ率を織り込んだ実質価値での表示
  • 医療費・介護費が増える後半のカーブ

#💡 このサービスから言えること

制度を扱う計算機は、正確さと使いやすさが正面から衝突します。 全部入れれば正確ですが誰も使えず、削れば使えますが概算になる。この綱引きに正解はなく、どこで切ったかを利用者に見せることでしか誠実になれないと思っています。

もうひとつ、公式の係数や控除額は、必ず式のそばに出典と単位を書き残すこと。5.481 / 1000 のような数字は、半年後の自分には意味が分かりません。

[ ./next_action ]

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

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

[ ./related_logs ]

関連する開発ログ

all logs →
ShadowTwin

立体パズルの別解を作る:同じ影と最少の積み木

ShadowTwinの開発記録。3方向の図から別々の最少配置を2つ探す仕組み、5問の独立全探索、スマホの横並び比較、保存・再編集と入力検査を解説します。実照明の計算や能力診断ではありません。

read log →
SlitCard

スリットアニメーションを作る:4コマの合成と透明原稿の設計

SlitCardの開発記録。4コマの帯を交互に合成し、すき間と黒帯で別のコマを見せる仕組みを解説。同縮尺の台紙・透明シートSVG、50mm確認線、手動プレビュー・初期非表示、再編集と実出力検査を整理します。

read log →
WindowLight

日当たりシミュレーションを作る:窓の光を床へ投影する幾何モデル

WindowLightの開発記録。太陽位置近似から窓の4隅を床へ投影し、凸多角形を部屋で切り取る設計を解説。国立天文台の16時刻との限定照合、大気差・低高度・実際の採光との違い、SVGと設定の再編集を整理します。

read log →
GridLights

電源構成の比較を作る:割合と実量を100個の電球で読み解く

電源構成比較GridLightsの開発記録。12か国の年次発電データを最大剰余法で100個の電球に変換し、割合とTWhを比較する設計を解説。欠損を0補完しない7分類、予想と実値、出典付きSVGと実データ検証を整理します。

read log →
SoundLoom

音のお絵かきを作る:実WAVから絵を測り直す設計

音のお絵かきの開発記録。描画を正弦波のPCMとWAVへ変換し、保存音声の周波数をGoertzel法で測って比較する仕組みを解説。音量・測定窓・量子化の限界と、編集・離脱時の古い結果を抑止する検証を整理します。

read log →
MazeLoom

宝探し迷路を作る:寄り道まで含めた最短ルートの探索

宝探し迷路の開発記録。通路を木として生成し、現在地と3つの宝の取得状態を組み合わせて最短ルートを探す仕組みを解説。問題コードの版固定、画面と解答付きPDFの一致、手数と印刷の検証を整理します。

read log →