老後資金シミュレーター

老後の必要資金と資産寿命を簡単に計算できる無料シミュレーターです。 年金収入を考慮した老後資金の不足額と資産の枯渇時期を視覚的に理解できます。

目次

Chart.js版(グラフあり)

老後資金シミュレーター

老後の必要資金と資産寿命のシミュレーション

このシミュレーターでは、退職後(デフォルト65歳)から想定寿命(デフォルト95歳)までの30年間を「老後」と定義しています。月々の生活費と年金受給額の差額を基に、老後に必要な資産総額を計算します。

退職時の資産 ¥0
資産寿命
不足額 ¥0

⚠️ 注意事項

  • 計算された数値は、あくまでもシミュレーションであり、実際の老後資金や資産寿命を保証するものではありません。
  • 年金額は簡易的な想定値です。実際の受給額は加入期間・収入により異なります。
  • 本シミュレーションでは医療費・介護費用・インフレ率等の変動は考慮していません。
  • 運用利回りは想定値であり、元本割れのリスクがあります。

免責事項

本シミュレーションは老後資金計画の参考情報提供のみを目的として作成されたもので、特定の金融商品を推奨したり、個々のライフプランを保証するものではありません。老後資金の準備方針は、ご自身の判断と責任で決定してください。万一、本シミュレーションに基づいて損害を被ったとしても、当方は一切その責任を負うものではありません。

コピー用コード
<!--
================================================
WordPress カスタムHTMLブロック用コード
老後資金シミュレーター通常版
================================================
機能老後資金の必要額試算年金収入考慮資産寿命計算
セキュリティ】✅ ブラウザ内完結通信ゼロ
利用規約無償無保証投資判断は自己責任
外部依存Chart.js 4.4.0 (CDN経由遅延読み込み)
================================================
-->

<!-- MSIM:STYLE-START -->
<style>
.retirement-funds-simulator * {margin:0; padding:0; box-sizing:border-box}
.retirement-funds-simulator {font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; line-height:1.6; color:#333}
.retirement-funds-simulator .container {max-width:1200px; margin:0 auto; background:#fff; border-radius:12px; box-shadow:0 2px 12px rgba(0,0,0,.1); padding:30px}
.retirement-funds-simulator h1 {font-size:28px; margin:0 0 10px; color:#1a1a1a; text-align:center}
.retirement-funds-simulator .subtitle {font-size:14px; color:#666; text-align:center; margin:0 0 15px}
.retirement-funds-simulator .description {font-size:13px; color:#555; text-align:center; line-height:1.8; margin:0 0 30px; padding:15px 20px; background:#f8f9fa; border-radius:8px}
.retirement-funds-simulator h2 {font-size:20px; margin:30px 0 20px; color:#1a1a1a}
.retirement-funds-simulator h3 {font-size:16px; margin:20px 0 15px; color:#555}
.retirement-funds-simulator .input-section {display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:20px; margin:0 0 30px}
.retirement-funds-simulator .input-group {display:flex; flex-direction:column}
.retirement-funds-simulator .input-group label {font-size:14px; font-weight:600; margin:0 0 8px; color:#555}
.retirement-funds-simulator .input-group input,
.retirement-funds-simulator .input-group select {padding:12px; border:2px solid #e0e0e0; border-radius:8px; font-size:16px; transition:.3s; background:#fff}
.retirement-funds-simulator .input-group input:focus,
.retirement-funds-simulator .input-group select:focus {outline:0; border-color:#3498db; box-shadow:0 0 0 3px rgba(52,152,219,.1)}
.retirement-funds-simulator .input-group input:hover,
.retirement-funds-simulator .input-group select:hover {border-color:#b0b0b0}
.retirement-funds-simulator .results-section {display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:20px; margin:0 0 30px; padding:20px; background:#f8f9fa; border-radius:8px}
.retirement-funds-simulator .result-item {display:flex; flex-direction:column; align-items:center; padding:15px; background:#fff; border-radius:8px; box-shadow:0 1px 3px rgba(0,0,0,.05)}
.retirement-funds-simulator .result-label {font-size:13px; color:#777; margin:0 0 8px; font-weight:500}
.retirement-funds-simulator .result-value {font-size:24px; font-weight:700; color:#3498db}
.retirement-funds-simulator .result-value.warning {color:#e74c3c}
.retirement-funds-simulator .result-value.safe {color:#2ecc71}
.retirement-funds-simulator .chart-section {position:relative; height:400px; margin:30px 0}
.retirement-funds-simulator .chart-section canvas {width:100%!important; height:100%!important}
.retirement-funds-simulator .disclaimer-section {margin-top:30px; padding:20px; background:#fff3cd; border-left:4px solid #ffc107; border-radius:4px}
.retirement-funds-simulator .disclaimer-section .disclaimer-title {font-size:13px; font-weight:600; color:#856404; margin:0 0 10px}
.retirement-funds-simulator .disclaimer-section ul {margin:0 0 15px 20px}
.retirement-funds-simulator .disclaimer-section li {font-size:12px; color:#856404; margin:0 0 6px; line-height:1.6}
.retirement-funds-simulator .disclaimer-section .disclaimer-text {font-size:12px; color:#856404; line-height:1.6; margin:0}

@media (max-width:768px) {
  .retirement-funds-simulator .container {padding:20px}
  .retirement-funds-simulator h1 {font-size:24px}
  .retirement-funds-simulator .input-section {grid-template-columns:1fr}
  .retirement-funds-simulator .results-section {grid-template-columns:1fr}
  .retirement-funds-simulator .chart-section {height:300px}
}
</style>
<!-- MSIM:STYLE-END -->

<!-- MSIM:HTML-START -->
<div class="retirement-funds-simulator" data-tool="retirement-funds" data-version="1.0.0">
  <div class="container">
    <h1>老後資金シミュレーター</h1>
    <p class="subtitle">老後の必要資金と資産寿命のシミュレーション</p>
    <p class="description">このシミュレーターでは、退職後(デフォルト65歳)から想定寿命(デフォルト95歳)までの30年間を「老後」と定義しています。月々の生活費と年金受給額の差額を基に、老後に必要な資産総額を計算します。</p>

    <div class="input-section">
      <div class="input-group">
        <label>現在の年齢</label>
        <input type="number" data-ms-current-age value="40" min="20" max="70" step="1">
      </div>
      <div class="input-group">
        <label>退職予定年齢</label>
        <select data-ms-retirement-age>
          <option value="60">60歳</option>
          <option value="65" selected>65歳</option>
          <option value="70">70歳</option>
        </select>
      </div>
      <div class="input-group">
        <label>想定寿命</label>
        <select data-ms-life-expectancy>
          <option value="85">85歳</option>
          <option value="90">90歳</option>
          <option value="95" selected>95歳</option>
          <option value="100">100歳</option>
        </select>
      </div>
      <div class="input-group">
        <label>月々の生活費(万円)</label>
        <input type="number" data-ms-monthly-expense value="25" min="10" max="100" step="1">
      </div>
      <div class="input-group">
        <label>月々の年金受給額(万円)</label>
        <input type="number" data-ms-monthly-pension value="15" min="0" max="50" step="1">
      </div>
      <div class="input-group">
        <label>現在の資産(万円)</label>
        <input type="number" data-ms-current-assets value="1000" min="0" max="100000" step="100">
      </div>
      <div class="input-group">
        <label>退職までの年間貯蓄額(万円)</label>
        <input type="number" data-ms-annual-savings value="100" min="0" max="1000" step="10">
      </div>
      <div class="input-group">
        <label>想定運用利回り(%)</label>
        <input type="number" data-ms-return-rate value="3" min="0" max="10" step="0.5">
      </div>
    </div>

    <div class="results-section">
      <div class="result-item">
        <span class="result-label">退職時の資産</span>
        <span class="result-value" data-ms-retirement-assets>¥0</span>
      </div>
      <div class="result-item">
        <span class="result-label">資産寿命</span>
        <span class="result-value" data-ms-asset-life>-</span>
      </div>
      <div class="result-item">
        <span class="result-label">不足額</span>
        <span class="result-value warning" data-ms-shortage>¥0</span>
      </div>
    </div>

    <div class="chart-section">
      <canvas data-ms-canvas></canvas>
    </div>

    <div class="disclaimer-section">
      <p class="disclaimer-title">⚠️ 注意事項</p>
      <ul>
        <li>計算された数値は、あくまでもシミュレーションであり、実際の老後資金や資産寿命を保証するものではありません。</li>
        <li>年金額は簡易的な想定値です。実際の受給額は加入期間・収入により異なります。</li>
        <li>本シミュレーションでは医療費・介護費用・インフレ率等の変動は考慮していません。</li>
        <li>運用利回りは想定値であり、元本割れのリスクがあります。</li>
      </ul>
      <p class="disclaimer-title">免責事項</p>
      <p class="disclaimer-text">本シミュレーションは老後資金計画の参考情報提供のみを目的として作成されたもので、特定の金融商品を推奨したり、個々のライフプランを保証するものではありません。老後資金の準備方針は、ご自身の判断と責任で決定してください。万一、本シミュレーションに基づいて損害を被ったとしても、当方は一切その責任を負うものではありません。</p>
    </div>

    <div style="text-align:right;margin-top:30px;color:#999;font-size:12px">
      Powered by <a href="https://minna-calc.com/" target="_blank" rel="noopener" style="color:#4a90e2;text-decoration:none">みんなのシミュレーター</a>
    </div>
  </div>
</div>
<!-- MSIM:HTML-END -->


<!-- MSIM:JS-START -->
<script>
// 老後資金シミュレーター JavaScript部分(確定拠出年金シミュレーター構造を参考)

(()=>{
  "use strict";

  // Chart.js 遅延読み込み
  const CJ_URL = "https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js";
  let loadingCJ = false, loadedCJ = !!window.Chart;

  function ensureChartJs(cb) {
    if (loadedCJ) { cb(); return }
    if (!loadingCJ) {
      loadingCJ = true;
      const s = document.createElement("script");
      s.src = CJ_URL;
      s.defer = true;
      s.onload = () => { loadedCJ = true; cb && cb() };
      s.onerror = () => console.error("Chart.js load failed");
      document.head.appendChild(s);
    } else {
      const t = setInterval(() => {
        if (loadedCJ) { clearInterval(t); cb && cb() }
      }, 50);
    }
  }

  // 通貨フォーマッター
  const fmt = new Intl.NumberFormat("ja-JP", {
    style: "currency",
    currency: "JPY",
    minimumFractionDigits: 0,
    maximumFractionDigits: 0
  });

  // 老後資金計算
  function calcRetirement(currentAge, retirementAge, lifeExpectancy, monthlyExpense, monthlyPension, currentAssets, annualSavings, returnRate) {
    const yearsUntilRetirement = retirementAge - currentAge;
    const retirementYears = lifeExpectancy - retirementAge;

    // 退職時までの資産形成
    let assets = currentAssets * 10000;
    const monthlyRate = returnRate / 100 / 12;
    const monthsUntilRetirement = yearsUntilRetirement * 12;

    for (let month = 0; month < monthsUntilRetirement; month++) {
      assets = assets * (1 + monthlyRate);
      if (month % 12 === 0) {
        assets += annualSavings * 10000;
      }
    }

    const retirementAssets = Math.round(assets);

    // 年ごとのスケジュール作成
    const schedule = [];
    let age = currentAge;
    let balance = currentAssets * 10000;

    // 退職まで
    for (let year = 0; year <= yearsUntilRetirement; year++) {
      age = currentAge + year;
      if (year > 0) {
        balance = balance * (1 + returnRate / 100) + annualSavings * 10000;
      }
      schedule.push({ age, balance: Math.round(balance), phase: "accumulation" });
    }

    // 老後期間
    balance = retirementAssets;
    const monthlyDeficit = (monthlyExpense - monthlyPension) * 10000;

    for (let y = 1; y <= retirementYears; y++) {
      age = retirementAge + y;
      balance = balance * (1 + returnRate / 100) - monthlyDeficit * 12;
      schedule.push({
        age,
        balance: Math.round(Math.max(0, balance)),
        phase: "retirement"
      });
      if (balance <= 0) break;
    }

    // 資産寿命計算
    const depletion = schedule.find(d => d.phase === "retirement" && d.balance <= 0);
    const assetLife = depletion ? depletion.age : (balance > 0 ? lifeExpectancy : null);
    const shortage = assetLife && assetLife < lifeExpectancy ?
      Math.round((lifeExpectancy - assetLife) * monthlyDeficit * 12) : 0;

    return {
      retirementAssets,
      assetLife,
      shortage,
      schedule
    };
  }

  // 各シミュレーター初期化
  function boot(root) {
    let chart = null;
    const q = (sel) => root.querySelector(sel);
    const els = {
      currentAge: q("[data-ms-current-age]"),
      retirementAge: q("[data-ms-retirement-age]"),
      lifeExpectancy: q("[data-ms-life-expectancy]"),
      monthlyExpense: q("[data-ms-monthly-expense]"),
      monthlyPension: q("[data-ms-monthly-pension]"),
      currentAssets: q("[data-ms-current-assets]"),
      annualSavings: q("[data-ms-annual-savings]"),
      returnRate: q("[data-ms-return-rate]"),
      retirementAssets: q("[data-ms-retirement-assets]"),
      assetLife: q("[data-ms-asset-life]"),
      shortage: q("[data-ms-shortage]"),
      canvas: q("[data-ms-canvas]")
    };

    function drawChart(schedule, retirement, life) {
      if (!loadedCJ) {
        ensureChartJs(() => drawChart(schedule, retirement, life));
        return;
      }

      const labels = schedule.map(d => d.age + "\u6b73");
      const accData = schedule.map(d => d.phase === "accumulation" ? d.balance : null);
      const retData = schedule.map(d => d.phase === "retirement" ? d.balance : null);

      if (chart) chart.destroy();
      chart = new Chart(els.canvas, {
        type: "line",
        data: {
          labels,
          datasets: [{
            label: "\u8cc7\u7523\u6b8b\u9ad8",
            data: accData,
            borderColor: "rgba(52,152,219,1)",
            backgroundColor: "rgba(52,152,219,.16)",
            borderWidth: 2,
            spanGaps: true,
            tension: 0.3,
            fill: true
          }, {
            label: "\u8cc7\u7523\u6b8b\u9ad8\uff08\u8001\u5f8c\uff09",
            data: retData,
            borderColor: "rgba(231,76,60,1)",
            backgroundColor: "rgba(231,76,60,.18)",
            borderWidth: 2,
            spanGaps: true,
            tension: 0.3,
            fill: true
          }]
        },
        options: {
          responsive: true,
          maintainAspectRatio: false,
          interaction: { mode: "index", intersect: false },
          plugins: {
            tooltip: {
              callbacks: {
                label: (ctx) => "\u8cc7\u7523\u6b8b\u9ad8: " + fmt.format(ctx.parsed.y)
              }
            },
            legend: { display: true, position: "top" }
          },
          scales: {
            y: {
              beginAtZero: true,
              ticks: { callback: (v) => fmt.format(v) }
            }
          }
        }
      });
    }

    function update() {
      const age = parseInt(els.currentAge.value) || 0;
      const retirement = parseInt(els.retirementAge.value) || 65;
      const life = parseInt(els.lifeExpectancy.value) || 95;
      const expense = parseFloat(els.monthlyExpense.value) || 0;
      const pension = parseFloat(els.monthlyPension.value) || 0;
      const assets = parseFloat(els.currentAssets.value) || 0;
      const savings = parseFloat(els.annualSavings.value) || 0;
      const returnRate = parseFloat(els.returnRate.value) || 0;

      if (age >= retirement || retirement >= life) {
        els.retirementAssets.textContent = "\uffe50";
        els.assetLife.textContent = "-";
        els.shortage.textContent = "\uffe50";
        return;
      }

      const result = calcRetirement(age, retirement, life, expense, pension, assets, savings, returnRate);

      els.retirementAssets.textContent = fmt.format(result.retirementAssets);
      els.assetLife.textContent = result.assetLife ? result.assetLife + "\u6b73" : "\u8a08\u7b97\u4e0d\u53ef";

      if (result.shortage > 0) {
        els.shortage.textContent = fmt.format(result.shortage);
      } else if (result.assetLife >= life) {
        els.shortage.textContent = "\uffe50\uff08\u5341\u5206\uff09";
      } else {
        els.shortage.textContent = "\uffe50";
      }

      drawChart(result.schedule, retirement, life);
    }

    els.currentAge.addEventListener("input", update);
    els.retirementAge.addEventListener("change", update);
    els.lifeExpectancy.addEventListener("change", update);
    els.monthlyExpense.addEventListener("input", update);
    els.monthlyPension.addEventListener("input", update);
    els.currentAssets.addEventListener("input", update);
    els.annualSavings.addEventListener("input", update);
    els.returnRate.addEventListener("input", update);

    if ("IntersectionObserver" in window && els.canvas) {
      const io = new IntersectionObserver((entries) => {
        if (entries.some(e => e.isIntersecting)) {
          ensureChartJs(() => {});
          io.disconnect();
        }
      });
      io.observe(els.canvas);
    }

    update();
  }

  // 全シミュレーター起動
  window.addEventListener("DOMContentLoaded", () => {
    document.querySelectorAll('.retirement-funds-simulator[data-tool="retirement-funds"]').forEach(boot);
  });
})();
</script>
<!-- MSIM:JS-END -->

Chart.jsなし簡易版(軽量)

老後資金シミュレーター

老後の必要資金と資産寿命のシミュレーション

このシミュレーターでは、退職後(デフォルト65歳)から想定寿命(デフォルト95歳)までの30年間を「老後」と定義しています。月々の生活費と年金受給額の差額を基に、老後に必要な資産総額を計算します。

退職時の資産 ¥0
資産寿命
不足額 ¥0

⚠️ 注意事項

  • 計算された数値は、あくまでもシミュレーションであり、実際の老後資金や資産寿命を保証するものではありません。
  • 年金額は簡易的な想定値です。実際の受給額は加入期間・収入により異なります。
  • 本シミュレーションでは医療費・介護費用・インフレ率等の変動は考慮していません。
  • 運用利回りは想定値であり、元本割れのリスクがあります。

免責事項

本シミュレーションは老後資金計画の参考情報提供のみを目的として作成されたもので、特定の金融商品を推奨したり、個々のライフプランを保証するものではありません。老後資金の準備方針は、ご自身の判断と責任で決定してください。万一、本シミュレーションに基づいて損害を被ったとしても、当方は一切その責任を負うものではありません。

コピー用コード
<!--
================================================
WordPress カスタムHTMLブロック用コード
老後資金シミュレーター通常版
================================================
機能老後資金の必要額試算年金収入考慮資産寿命計算
セキュリティ】✅ ブラウザ内完結通信ゼロ
利用規約無償無保証投資判断は自己責任
外部依存Chart.js 4.4.0 (CDN経由遅延読み込み)
================================================
-->

<!-- MSIM:STYLE-START -->
<style>
.retirement-funds-simulator * {margin:0; padding:0; box-sizing:border-box}
.retirement-funds-simulator {font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; line-height:1.6; color:#333}
.retirement-funds-simulator .container {max-width:1200px; margin:0 auto; background:#fff; border-radius:12px; box-shadow:0 2px 12px rgba(0,0,0,.1); padding:30px}
.retirement-funds-simulator h1 {font-size:28px; margin:0 0 10px; color:#1a1a1a; text-align:center}
.retirement-funds-simulator .subtitle {font-size:14px; color:#666; text-align:center; margin:0 0 15px}
.retirement-funds-simulator .description {font-size:13px; color:#555; text-align:center; line-height:1.8; margin:0 0 30px; padding:15px 20px; background:#f8f9fa; border-radius:8px}
.retirement-funds-simulator h2 {font-size:20px; margin:30px 0 20px; color:#1a1a1a}
.retirement-funds-simulator h3 {font-size:16px; margin:20px 0 15px; color:#555}
.retirement-funds-simulator .input-section {display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:20px; margin:0 0 30px}
.retirement-funds-simulator .input-group {display:flex; flex-direction:column}
.retirement-funds-simulator .input-group label {font-size:14px; font-weight:600; margin:0 0 8px; color:#555}
.retirement-funds-simulator .input-group input,
.retirement-funds-simulator .input-group select {padding:12px; border:2px solid #e0e0e0; border-radius:8px; font-size:16px; transition:.3s; background:#fff}
.retirement-funds-simulator .input-group input:focus,
.retirement-funds-simulator .input-group select:focus {outline:0; border-color:#3498db; box-shadow:0 0 0 3px rgba(52,152,219,.1)}
.retirement-funds-simulator .input-group input:hover,
.retirement-funds-simulator .input-group select:hover {border-color:#b0b0b0}
.retirement-funds-simulator .results-section {display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:20px; margin:0 0 30px; padding:20px; background:#f8f9fa; border-radius:8px}
.retirement-funds-simulator .result-item {display:flex; flex-direction:column; align-items:center; padding:15px; background:#fff; border-radius:8px; box-shadow:0 1px 3px rgba(0,0,0,.05)}
.retirement-funds-simulator .result-label {font-size:13px; color:#777; margin:0 0 8px; font-weight:500}
.retirement-funds-simulator .result-value {font-size:24px; font-weight:700; color:#3498db}
.retirement-funds-simulator .result-value.warning {color:#e74c3c}
.retirement-funds-simulator .result-value.safe {color:#2ecc71}
.retirement-funds-simulator .chart-section {position:relative; height:400px; margin:30px 0}
.retirement-funds-simulator .chart-section canvas {width:100%!important; height:100%!important}
.retirement-funds-simulator .disclaimer-section {margin-top:30px; padding:20px; background:#fff3cd; border-left:4px solid #ffc107; border-radius:4px}
.retirement-funds-simulator .disclaimer-section .disclaimer-title {font-size:13px; font-weight:600; color:#856404; margin:0 0 10px}
.retirement-funds-simulator .disclaimer-section ul {margin:0 0 15px 20px}
.retirement-funds-simulator .disclaimer-section li {font-size:12px; color:#856404; margin:0 0 6px; line-height:1.6}
.retirement-funds-simulator .disclaimer-section .disclaimer-text {font-size:12px; color:#856404; line-height:1.6; margin:0}

@media (max-width:768px) {
  .retirement-funds-simulator .container {padding:20px}
  .retirement-funds-simulator h1 {font-size:24px}
  .retirement-funds-simulator .input-section {grid-template-columns:1fr}
  .retirement-funds-simulator .results-section {grid-template-columns:1fr}
  .retirement-funds-simulator .chart-section {height:300px}
}
</style>
<!-- MSIM:STYLE-END -->

<!-- MSIM:HTML-START -->
<div class="retirement-funds-simulator" data-tool="retirement-funds" data-version="1.0.0">
  <div class="container">
    <h1>老後資金シミュレーター</h1>
    <p class="subtitle">老後の必要資金と資産寿命のシミュレーション</p>
    <p class="description">このシミュレーターでは、退職後(デフォルト65歳)から想定寿命(デフォルト95歳)までの30年間を「老後」と定義しています。月々の生活費と年金受給額の差額を基に、老後に必要な資産総額を計算します。</p>

    <div class="input-section">
      <div class="input-group">
        <label>現在の年齢</label>
        <input type="number" data-ms-current-age value="40" min="20" max="70" step="1">
      </div>
      <div class="input-group">
        <label>退職予定年齢</label>
        <select data-ms-retirement-age>
          <option value="60">60歳</option>
          <option value="65" selected>65歳</option>
          <option value="70">70歳</option>
        </select>
      </div>
      <div class="input-group">
        <label>想定寿命</label>
        <select data-ms-life-expectancy>
          <option value="85">85歳</option>
          <option value="90">90歳</option>
          <option value="95" selected>95歳</option>
          <option value="100">100歳</option>
        </select>
      </div>
      <div class="input-group">
        <label>月々の生活費(万円)</label>
        <input type="number" data-ms-monthly-expense value="25" min="10" max="100" step="1">
      </div>
      <div class="input-group">
        <label>月々の年金受給額(万円)</label>
        <input type="number" data-ms-monthly-pension value="15" min="0" max="50" step="1">
      </div>
      <div class="input-group">
        <label>現在の資産(万円)</label>
        <input type="number" data-ms-current-assets value="1000" min="0" max="100000" step="100">
      </div>
      <div class="input-group">
        <label>退職までの年間貯蓄額(万円)</label>
        <input type="number" data-ms-annual-savings value="100" min="0" max="1000" step="10">
      </div>
      <div class="input-group">
        <label>想定運用利回り(%)</label>
        <input type="number" data-ms-return-rate value="3" min="0" max="10" step="0.5">
      </div>
    </div>

    <div class="results-section">
      <div class="result-item">
        <span class="result-label">退職時の資産</span>
        <span class="result-value" data-ms-retirement-assets>¥0</span>
      </div>
      <div class="result-item">
        <span class="result-label">資産寿命</span>
        <span class="result-value" data-ms-asset-life>-</span>
      </div>
      <div class="result-item">
        <span class="result-label">不足額</span>
        <span class="result-value warning" data-ms-shortage>¥0</span>
      </div>
    </div>

    <div class="chart-section">
      <canvas data-ms-canvas></canvas>
    </div>

    <div class="disclaimer-section">
      <p class="disclaimer-title">⚠️ 注意事項</p>
      <ul>
        <li>計算された数値は、あくまでもシミュレーションであり、実際の老後資金や資産寿命を保証するものではありません。</li>
        <li>年金額は簡易的な想定値です。実際の受給額は加入期間・収入により異なります。</li>
        <li>本シミュレーションでは医療費・介護費用・インフレ率等の変動は考慮していません。</li>
        <li>運用利回りは想定値であり、元本割れのリスクがあります。</li>
      </ul>
      <p class="disclaimer-title">免責事項</p>
      <p class="disclaimer-text">本シミュレーションは老後資金計画の参考情報提供のみを目的として作成されたもので、特定の金融商品を推奨したり、個々のライフプランを保証するものではありません。老後資金の準備方針は、ご自身の判断と責任で決定してください。万一、本シミュレーションに基づいて損害を被ったとしても、当方は一切その責任を負うものではありません。</p>
    </div>

    <div style="text-align:right;margin-top:30px;color:#999;font-size:12px">
      Powered by <a href="https://minna-calc.com/" target="_blank" rel="noopener" style="color:#4a90e2;text-decoration:none">みんなのシミュレーター</a>
    </div>
  </div>
</div>
<!-- MSIM:HTML-END -->


<!-- MSIM:JS-START -->
<script>
// 老後資金シミュレーター JavaScript部分(確定拠出年金シミュレーター構造を参考)

(()=>{
  "use strict";

  // Chart.js 遅延読み込み
  const CJ_URL = "https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js";
  let loadingCJ = false, loadedCJ = !!window.Chart;

  function ensureChartJs(cb) {
    if (loadedCJ) { cb(); return }
    if (!loadingCJ) {
      loadingCJ = true;
      const s = document.createElement("script");
      s.src = CJ_URL;
      s.defer = true;
      s.onload = () => { loadedCJ = true; cb && cb() };
      s.onerror = () => console.error("Chart.js load failed");
      document.head.appendChild(s);
    } else {
      const t = setInterval(() => {
        if (loadedCJ) { clearInterval(t); cb && cb() }
      }, 50);
    }
  }

  // 通貨フォーマッター
  const fmt = new Intl.NumberFormat("ja-JP", {
    style: "currency",
    currency: "JPY",
    minimumFractionDigits: 0,
    maximumFractionDigits: 0
  });

  // 老後資金計算
  function calcRetirement(currentAge, retirementAge, lifeExpectancy, monthlyExpense, monthlyPension, currentAssets, annualSavings, returnRate) {
    const yearsUntilRetirement = retirementAge - currentAge;
    const retirementYears = lifeExpectancy - retirementAge;

    // 退職時までの資産形成
    let assets = currentAssets * 10000;
    const monthlyRate = returnRate / 100 / 12;
    const monthsUntilRetirement = yearsUntilRetirement * 12;

    for (let month = 0; month < monthsUntilRetirement; month++) {
      assets = assets * (1 + monthlyRate);
      if (month % 12 === 0) {
        assets += annualSavings * 10000;
      }
    }

    const retirementAssets = Math.round(assets);

    // 年ごとのスケジュール作成
    const schedule = [];
    let age = currentAge;
    let balance = currentAssets * 10000;

    // 退職まで
    for (let year = 0; year <= yearsUntilRetirement; year++) {
      age = currentAge + year;
      if (year > 0) {
        balance = balance * (1 + returnRate / 100) + annualSavings * 10000;
      }
      schedule.push({ age, balance: Math.round(balance), phase: "accumulation" });
    }

    // 老後期間
    balance = retirementAssets;
    const monthlyDeficit = (monthlyExpense - monthlyPension) * 10000;

    for (let y = 1; y <= retirementYears; y++) {
      age = retirementAge + y;
      balance = balance * (1 + returnRate / 100) - monthlyDeficit * 12;
      schedule.push({
        age,
        balance: Math.round(Math.max(0, balance)),
        phase: "retirement"
      });
      if (balance <= 0) break;
    }

    // 資産寿命計算
    const depletion = schedule.find(d => d.phase === "retirement" && d.balance <= 0);
    const assetLife = depletion ? depletion.age : (balance > 0 ? lifeExpectancy : null);
    const shortage = assetLife && assetLife < lifeExpectancy ?
      Math.round((lifeExpectancy - assetLife) * monthlyDeficit * 12) : 0;

    return {
      retirementAssets,
      assetLife,
      shortage,
      schedule
    };
  }

  // 各シミュレーター初期化
  function boot(root) {
    let chart = null;
    const q = (sel) => root.querySelector(sel);
    const els = {
      currentAge: q("[data-ms-current-age]"),
      retirementAge: q("[data-ms-retirement-age]"),
      lifeExpectancy: q("[data-ms-life-expectancy]"),
      monthlyExpense: q("[data-ms-monthly-expense]"),
      monthlyPension: q("[data-ms-monthly-pension]"),
      currentAssets: q("[data-ms-current-assets]"),
      annualSavings: q("[data-ms-annual-savings]"),
      returnRate: q("[data-ms-return-rate]"),
      retirementAssets: q("[data-ms-retirement-assets]"),
      assetLife: q("[data-ms-asset-life]"),
      shortage: q("[data-ms-shortage]"),
      canvas: q("[data-ms-canvas]")
    };

    function drawChart(schedule, retirement, life) {
      if (!loadedCJ) {
        ensureChartJs(() => drawChart(schedule, retirement, life));
        return;
      }

      const labels = schedule.map(d => d.age + "\u6b73");
      const accData = schedule.map(d => d.phase === "accumulation" ? d.balance : null);
      const retData = schedule.map(d => d.phase === "retirement" ? d.balance : null);

      if (chart) chart.destroy();
      chart = new Chart(els.canvas, {
        type: "line",
        data: {
          labels,
          datasets: [{
            label: "\u8cc7\u7523\u6b8b\u9ad8",
            data: accData,
            borderColor: "rgba(52,152,219,1)",
            backgroundColor: "rgba(52,152,219,.16)",
            borderWidth: 2,
            spanGaps: true,
            tension: 0.3,
            fill: true
          }, {
            label: "\u8cc7\u7523\u6b8b\u9ad8\uff08\u8001\u5f8c\uff09",
            data: retData,
            borderColor: "rgba(231,76,60,1)",
            backgroundColor: "rgba(231,76,60,.18)",
            borderWidth: 2,
            spanGaps: true,
            tension: 0.3,
            fill: true
          }]
        },
        options: {
          responsive: true,
          maintainAspectRatio: false,
          interaction: { mode: "index", intersect: false },
          plugins: {
            tooltip: {
              callbacks: {
                label: (ctx) => "\u8cc7\u7523\u6b8b\u9ad8: " + fmt.format(ctx.parsed.y)
              }
            },
            legend: { display: true, position: "top" }
          },
          scales: {
            y: {
              beginAtZero: true,
              ticks: { callback: (v) => fmt.format(v) }
            }
          }
        }
      });
    }

    function update() {
      const age = parseInt(els.currentAge.value) || 0;
      const retirement = parseInt(els.retirementAge.value) || 65;
      const life = parseInt(els.lifeExpectancy.value) || 95;
      const expense = parseFloat(els.monthlyExpense.value) || 0;
      const pension = parseFloat(els.monthlyPension.value) || 0;
      const assets = parseFloat(els.currentAssets.value) || 0;
      const savings = parseFloat(els.annualSavings.value) || 0;
      const returnRate = parseFloat(els.returnRate.value) || 0;

      if (age >= retirement || retirement >= life) {
        els.retirementAssets.textContent = "\uffe50";
        els.assetLife.textContent = "-";
        els.shortage.textContent = "\uffe50";
        return;
      }

      const result = calcRetirement(age, retirement, life, expense, pension, assets, savings, returnRate);

      els.retirementAssets.textContent = fmt.format(result.retirementAssets);
      els.assetLife.textContent = result.assetLife ? result.assetLife + "\u6b73" : "\u8a08\u7b97\u4e0d\u53ef";

      if (result.shortage > 0) {
        els.shortage.textContent = fmt.format(result.shortage);
      } else if (result.assetLife >= life) {
        els.shortage.textContent = "\uffe50\uff08\u5341\u5206\uff09";
      } else {
        els.shortage.textContent = "\uffe50";
      }

      drawChart(result.schedule, retirement, life);
    }

    els.currentAge.addEventListener("input", update);
    els.retirementAge.addEventListener("change", update);
    els.lifeExpectancy.addEventListener("change", update);
    els.monthlyExpense.addEventListener("input", update);
    els.monthlyPension.addEventListener("input", update);
    els.currentAssets.addEventListener("input", update);
    els.annualSavings.addEventListener("input", update);
    els.returnRate.addEventListener("input", update);

    if ("IntersectionObserver" in window && els.canvas) {
      const io = new IntersectionObserver((entries) => {
        if (entries.some(e => e.isIntersecting)) {
          ensureChartJs(() => {});
          io.disconnect();
        }
      });
      io.observe(els.canvas);
    }

    update();
  }

  // 全シミュレーター起動
  window.addEventListener("DOMContentLoaded", () => {
    document.querySelectorAll('.retirement-funds-simulator[data-tool="retirement-funds"]').forEach(boot);
  });
})();
</script>
<!-- MSIM:JS-END -->

シミュレーターの基本機能

できること

退職時点での資産額を自動計算します。年金収入を考慮した月々の不足額を算出します。

資産がいつ枯渇するか(資産寿命)を予測します。老後期間全体での必要資金総額が一目でわかります。

計算方式

すべての計算がブラウザ内で完結します。サーバーとの通信はゼロです。

データベース接続やCookie使用もありません。入力した情報が外部に送信されることは一切ありません。

使い方

現在の年齢を入力

あなたの現在の年齢を20歳から70歳の範囲で入力します。退職までの期間を計算する基準になります。

若いほど準備期間が長く有利です。50代以降の方は貯蓄ペースを上げる必要があります。

退職予定年齢を選択

いつ退職するかを60歳、65歳、70歳から選択します。この年齢で収入が止まり資産を取り崩す生活が始まります。

現在は65歳定年が一般的です。70歳まで働くと必要資金を大幅に減らせます。

想定寿命を設定

何歳まで生きることを想定するかを85歳、90歳、95歳、100歳から選択します。この年齢まで資産が持つかを計算します。

参考データ(2025年時点)

項目年齢
平均寿命(男性)約82歳
平均寿命(女性)約88歳
健康寿命(男性)約73歳
健康寿命(女性)約75歳

余裕を持たせるなら95歳以上を設定することを推奨します。医療の進歩で平均寿命は今後も延びる可能性があります。

月々の生活費を設定

老後の月々の生活費を万円単位で入力します。現在の生活費より控えめに見積もることが一般的です。

目安(夫婦2人の場合)

  • 最低限の生活:20〜22万円
  • ゆとりある生活:25〜30万円
  • 余裕のある生活:35万円以上

住宅ローン完済済みか、持ち家か賃貸かで大きく変わります。医療費・介護費用も考慮してください。

月々の年金受給額を入力

65歳から受け取る年金の月額を万円単位で入力します。ねんきん定期便で確認できます。

参考値(夫婦2人の場合)

パターン月額(目安)
夫婦とも厚生年金(会社員)22〜25万円
夫:厚生年金、妻:国民年金18〜20万円
夫婦とも国民年金(自営業)12〜13万円
単身者(厚生年金)14〜16万円
単身者(国民年金のみ)6〜7万円

年金額は加入期間と納付額で変動します。正確な金額はねんきんネットで確認してください。

現在の資産を入力

現時点で保有している資産額を万円単位で入力します。預貯金、株式、投資信託などの合計金額です。

生活防衛資金を除いた金額を入力してください。不動産は含めず現金化できる資産のみを計算します。

退職までの年間貯蓄額を設定

退職までに毎年貯蓄できる金額を万円単位で入力します。ボーナスを含めた年間の貯蓄可能額です。

現在の貯蓄ペースを維持できるか確認してください。昇給や支出減少を見込む場合は多めに設定できます。

想定運用利回りを設定

老後資金の運用利回りを設定します。退職後も運用を続けることを前提とした計算です。

参考値

運用方法想定利回り
預貯金のみ0%
債券中心1〜2%
バランス型2〜3%
株式含む3〜4%

老後は元本割れリスクを抑えた運用が基本です。保守的な利回りで計算することを推奨します。

計算結果の見方

退職時の資産

退職予定年齢に達した時点での資産額が表示されます。現在の資産と今後の貯蓄を複利運用した結果です。

この金額が老後資金のベースになります。大きいほど老後の生活に余裕が生まれます。

資産寿命

資産が枯渇する年齢が表示されます。生活費から年金を引いた不足分を取り崩していった結果です。

想定寿命より長ければ計画は成功です。短い場合は貯蓄額を増やすか生活費を減らす必要があります。

不足額

資産寿命が想定寿命に達しない場合の不足額が表示されます。あといくら準備が必要かがわかります。

「¥0(十分)」と表示されれば計画は達成可能です。不足額が大きい場合は資金計画の見直しが必要です。

グラフの見方(Chart.js版のみ)

折れ線グラフで年齢ごとの資産残高が表示されます。青色の部分は資産形成期間です。

赤色の部分は老後期間(資産取り崩し期)です。退職年齢の位置に黄色の線が表示されます。

シミュレーション例

例1:40歳会社員の標準的なケース

設定

  • 現在の年齢:40歳
  • 退職予定年齢:65歳
  • 想定寿命:95歳
  • 月々の生活費:25万円
  • 月々の年金受給額:15万円
  • 現在の資産:1,000万円
  • 退職までの年間貯蓄額:100万円
  • 想定運用利回り:3%

結果

  • 退職時の資産:約4,400万円
  • 資産寿命:約95歳
  • 不足額:¥0(十分)

月10万円の不足を30年間補える資金が準備できます。計画通りの資産形成を続ければ老後は安心です。

例2:30歳から早めに準備を始めるケース

設定

  • 現在の年齢:30歳
  • 退職予定年齢:65歳
  • 想定寿命:100歳
  • 月々の生活費:30万円
  • 月々の年金受給額:20万円
  • 現在の資産:300万円
  • 退職までの年間貯蓄額:150万円
  • 想定運用利回り:4%

結果

  • 退職時の資産:約9,300万円
  • 資産寿命:100歳以上
  • 不足額:¥0(十分)

35年間の積立期間があるため余裕を持った資金準備ができます。100歳まで生きても資産が残る計画です。

例3:50歳から準備を始めるケース

設定

  • 現在の年齢:50歳
  • 退職予定年齢:65歳
  • 想定寿命:90歳
  • 月々の生活費:25万円
  • 月々の年金受給額:15万円
  • 現在の資産:500万円
  • 退職までの年間貯蓄額:80万円
  • 想定運用利回り:2%

結果

  • 退職時の資産:約1,900万円
  • 資産寿命:約81歳
  • 不足額:約1,200万円

準備期間が短いため資産が早めに枯渇します。年間貯蓄額を増やすか退職年齢を遅らせる必要があります。

よくある質問

老後2,000万円問題は本当ですか?

夫婦2人で月々5万円不足する場合、30年間で約2,000万円必要という試算です。実際の必要額は生活費と年金額で大きく変わります。

このシミュレーターで個別の状況に基づいた計算ができます。人によって必要額は1,000万円から5,000万円以上まで幅があります。

年金だけで生活できますか?

厚生年金を夫婦で受給する場合は生活できる可能性があります。国民年金のみの場合は非常に困難です。

住居費が低い(持ち家・ローン完済)場合は年金のみでも可能性が高まります。余裕のある生活には追加資金が必要です。

退職金は計算に含めるべきですか?

退職金が確実に出る場合は「現在の資産」に加算して計算できます。ただし金額が不確実な場合は含めない方が安全です。

退職金は別途使途が決まっている場合(住宅ローン完済等)は除外してください。老後資金に回せる金額のみを計算に入れます。

インフレの影響は考慮されていますか?

このシミュレーターは現在の貨幣価値で計算しています。インフレを考慮する場合は生活費を高めに設定してください。

年2%のインフレを想定するなら20〜30年後の生活費は1.5〜1.8倍になります。保守的に計算することを推奨します。

このツールは無料ですか?

完全無料でご利用いただけます。会員登録も不要です。

何度でもシミュレーションを試せます。スマートフォンでもパソコンでも利用可能です。

プライバシーとセキュリティ

ブラウザ内完結の設計

すべての計算がブラウザ内で完結します。サーバーとの通信はゼロです。

データベース接続なし、Cookie/LocalStorage不使用、個人情報の取得・送信なしです。入力した資産額や年齢が外部に送信されることは一切ありません。

Chart.js(グラフ描画ライブラリ)について

グラフ表示機能を提供するため、オープンソースライブラリ「Chart.js」を使用しています(Chart.js版のみ)。

提供元: jsDelivr CDN(コンテンツ配信ネットワーク)

用途: 計算結果のグラフ表示

送信される可能性のある情報:

  • IPアドレス
  • ブラウザの種類とバージョン
  • アクセス日時

これらの情報は、JavaScriptライブラリファイルを取得する際に、通常のWebサイト閲覧と同様に自動的に送信されるものです。

利用者が計算ツールに入力した数値(資産額、年齢、生活費等)が外部に送信されることは一切ありません。すべての計算処理は利用者のブラウザ内で完結します。

Chart.jsライセンス: MIT License(オープンソース)

jsDelivrのプライバシーポリシー: https://www.jsdelivr.com/privacy-policy-jsdelivr-net

Chart.jsなし簡易版について: 外部ライブラリを一切使用したくない場合は、Chart.jsなし簡易版をご利用ください。こちらは完全にスタンドアロンで動作します。

注意事項

免責事項

計算結果は参考値であり、老後の生活を保証するものではありません。資産運用の判断は自己責任でお願いします。

投資には元本割れのリスクがあります。想定利回りは過去の実績であり将来を保証しません。

老後資金計画を立てる際は、ファイナンシャルプランナーなど専門家への相談も検討してください。

まとめ

老後資金シミュレーターは、老後の必要資金と資産寿命を簡単に試算できる無料ツールです。年齢、退職時期、生活費、年金額を入力するだけで即座に計算できます。

退職時の資産額と資産の枯渇時期が一目でわかります。プライバシー完全保護で安心してご利用いただけます。

老後資金の準備計画を立てる際に、ぜひご活用ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次