# 第5号：仮定の積立シミュレーション

調査・計算日：2026-11-06 UTC。実際の市場データや期待リターンではない。

- 月額 10,000 / 30,000 / 50,000 円
- 実効年率 0 / 3 / 5 / 7%、10 / 20 / 30 年、計36条件
- 初期残高0、月末積立、引出し・追加一括投資なし
- 月率 m = (1 + r)^(1/12) - 1。年率/12ではない。
- 最終額 = P × ((1+m)^n - 1) / m。r=0 のとき P×n。
- 円建て名目利回りは継続費用控除後という仮定。購入時費用等は別途ゼロとする。
- 適格なNISA利用を仮定し、投資家の日本での課税はゼロ。外国税・ファンド内部の税・費用の免除を意味しない。
- 運用益は内部で複利運用。現金分配の受取・再買付による枠消費はモデル化しない。
- 他のNISA買付なし。年間最大60万円、取得元本最大1,800万円。評価益による総額超過は取得枠超過ではない。
- 計算途中はDecimal精度50桁、表示時にROUND_HALF_UPで1円単位。差額は最終表示額−元本。
- 市場変動・物価変動を含まない。マイナスリターンや元本割れも実際にはあり得る。

## 再現（リポジトリルート、Python 3.12、標準ライブラリ）

```sh
python scripts/simulate_nisa.py --check
python -m unittest discover -s tests -v
```

ダウンロード用 `simulate_nisa.py.txt` は計算スクリプトの完全な写し。
再実行時はリポジトリ内の `scripts/simulate_nisa.py` として使用する。
JSON・CSV・記事中の36行は `python scripts/simulate_nisa.py` で生成する。
独立検算は `tests/test_nisa_simulation.py`。別の月率計算（自然対数・指数）と
60桁の逐次残高 B[t] = B[t-1] × (1+m) + P を使い、全36件の最終円額を照合。
0%、1か月、負の年率のモデル挙動、年率を12で割らないことも確認する。

グラフの再生成だけは任意依存 matplotlib が必要：
`MPLCONFIGDIR=/tmp/nisa-matplotlib python scripts/simulate_nisa.py --plots`
SVG・PNGは毎月の残高361点（開始0を含む）を同じ計算式で描く。
表・CSV・JSONの検算と通常CIには外部ライブラリもネットワークも不要。

制度の出典URLと適用時点は記事末尾に掲載。法改正があればモデルの前提も再確認する。
