MileagePortfolio

ChatGPT で奨学金返済シミュレーターを自作する

LIFE · 情報基準日 2026-05-25 · 約5,800字 · 約12分

こんにちは、ニャンコ会社「マイレージ・ポートフォリオ社」執事のHでございます。

奨学金の返済と、マイル積立・NISA積立の両立——これは20〜30代の多くの方が直面する設計課題です。

「繰り上げ返済をするべきか、その分を投資に回すべきか」「あと何年で完済するか」「毎月の返済額を増やしたら利息はどう変わるか」——こういった試算は、市販のシミュレーターでは自分の条件に完全に合わせにくい場合があります。

今日は、ChatGPTを使って 自分だけの奨学金返済シミュレーター をHTMLファイルとして自作する手順とコードを公開します。

🐈‍⬛ マイル「えっ、プログラミングできなくてもシミュレーター作れるの?」

🐈 ポルト「道具の作り方を知っている必要はない。道具を作れるAIに、何を作ってほしいかを正確に伝えられれば良い。」

🙇 執事H「お二方、本記事のコードをコピーしてブラウザで開けば、今日から使えます。仕組みも合わせて解説いたします。」


前提: 日本の奨学金の計算方式を理解する

シミュレーターを作る前に、計算の前提を整理します。

JASSO奨学金の種別

第一種奨学金(無利子):

第二種奨学金(有利子):

まず「自分がどちらの奨学金を保有しているか」「利率はいくらか」「残債はいくらか」を、JASSOのマイページ(lep.jasso.go.jp)で確認することが最初のステップです。

利息の計算方式

第二種奨学金の利息は、一般的に残債に対して月次で発生します。繰り上げ返済をすると残債が減り、以降の利息計算のベースが下がります。


📖 関連LIFE SHIFT(ライフ・シフト)100年人生時代のキャリア・資産・健康の再設計。人生の自由度を上げる長期視点をくれる。

ChatGPT に作ってもらうためのプロンプト

以下のプロンプトをChatGPTに貼り付けると、動作するシミュレーターのコードを出力してくれます。自分の条件に合わせて数値を変更してから使用してください。

以下の条件で奨学金返済シミュレーターを作成してください。
HTMLとJavaScriptで1つのファイルにまとめて、ブラウザで開くだけで動作するものにしてください。

【機能要件】
- 入力項目: 残債、月利(年利を12で割る)、毎月の返済額、繰り上げ返済額(任意入力)、繰り上げ返済を行う月
- 出力: 完済までの月数、利息総額、繰り上げ返済あり/なしの比較表
- 表形式で月別の返済内訳(元金・利息・残高)を表示

【計算方式】
- 元利均等返済方式
- 繰り上げ返済は指定月に残高に直接適用し、その後も同じ月額を継続

出力はコードのみで、説明は不要です。

📖 関連FIRE 最強の早期リタイア術30代でFIREした夫婦の実体験と具体的な計算方法。自由な時間を買う発想の参考に。

実際に出力されるコードの例と解説

以下は上記プロンプトに基づいてChatGPTが生成するコードの例です。実際の出力はプロンプトの細部・ChatGPTのバージョンによって異なる場合があります。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>奨学金返済シミュレーター</title>
  <style>
    body { font-family: sans-serif; max-width: 700px; margin: 40px auto; padding: 0 20px; }
    input { width: 100%; padding: 6px; margin: 4px 0 12px; box-sizing: border-box; }
    button { padding: 10px 20px; background: #333; color: white; border: none; cursor: pointer; }
    table { width: 100%; border-collapse: collapse; margin-top: 20px; font-size: 13px; }
    th, td { border: 1px solid #ccc; padding: 6px 10px; text-align: right; }
    th { background: #f0f0f0; text-align: center; }
    .summary { background: #f9f9f9; padding: 12px; margin: 16px 0; border-left: 3px solid #333; }
  </style>
</head>
<body>
  <h2>奨学金返済シミュレーター</h2>

  <label>残債(円)</label>
  <input type="number" id="balance" value="2000000" />

  <label>年利(%)</label>
  <input type="number" id="annualRate" value="1.0" step="0.01" />

  <label>毎月の返済額(円)</label>
  <input type="number" id="monthlyPayment" value="20000" />

  <label>繰り上げ返済額(円・任意)</label>
  <input type="number" id="extraPayment" value="0" />

  <label>繰り上げ返済を行う月(例: 12 = 1年後)</label>
  <input type="number" id="extraMonth" value="12" />

  <button onclick="calculate()">計算する</button>

  <div id="result"></div>

  <script>
    function calculate() {
      const balance = parseFloat(document.getElementById('balance').value);
      const annualRate = parseFloat(document.getElementById('annualRate').value) / 100;
      const monthlyRate = annualRate / 12;
      const monthlyPayment = parseFloat(document.getElementById('monthlyPayment').value);
      const extraPayment = parseFloat(document.getElementById('extraPayment').value) || 0;
      const extraMonth = parseInt(document.getElementById('extraMonth').value) || 0;

      function simulate(applyExtra) {
        let remaining = balance;
        let totalInterest = 0;
        let months = 0;
        let rows = [];

        while (remaining > 0 && months < 600) {
          months++;
          const interest = remaining * monthlyRate;
          let principal = monthlyPayment - interest;

          if (principal <= 0) {
            rows.push({ month: months, principal: 0, interest: interest.toFixed(0), remaining: remaining.toFixed(0), note: "返済額が利息以下" });
            break;
          }

          if (remaining < monthlyPayment) {
            principal = remaining;
          }

          remaining -= principal;
          totalInterest += interest;

          let note = '';
          if (applyExtra && months === extraMonth && extraPayment > 0) {
            remaining = Math.max(0, remaining - extraPayment);
            note = `繰り上げ返済 ${extraPayment.toLocaleString()}円`;
          }

          rows.push({
            month: months,
            principal: principal.toFixed(0),
            interest: interest.toFixed(0),
            remaining: remaining.toFixed(0),
            note: note
          });

          if (remaining <= 0) break;
        }

        return { months, totalInterest: totalInterest.toFixed(0), rows };
      }

      const withoutExtra = simulate(false);
      const withExtra = simulate(true);

      const diff = withoutExtra.months - withExtra.months;
      const interestDiff = (parseFloat(withoutExtra.totalInterest) - parseFloat(withExtra.totalInterest)).toFixed(0);

      let html = `
        <div class="summary">
          <strong>繰り上げ返済なし:</strong> ${withoutExtra.months}ヶ月 / 利息合計 ${parseInt(withoutExtra.totalInterest).toLocaleString()}円<br>
          <strong>繰り上げ返済あり:</strong> ${withExtra.months}ヶ月 / 利息合計 ${parseInt(withExtra.totalInterest).toLocaleString()}円<br>
          <strong>差分:</strong> ${diff}ヶ月短縮 / 利息 ${parseInt(interestDiff).toLocaleString()}円削減
        </div>
        <h3>月別明細(繰り上げ返済あり)</h3>
        <table>
          <tr><th>月</th><th>元金</th><th>利息</th><th>残高</th><th>備考</th></tr>
      `;

      withExtra.rows.forEach(r => {
        html += `<tr>
          <td>${r.month}</td>
          <td>${parseInt(r.principal).toLocaleString()}</td>
          <td>${parseInt(r.interest).toLocaleString()}</td>
          <td>${parseInt(r.remaining).toLocaleString()}</td>
          <td>${r.note}</td>
        </tr>`;
      });

      html += '</table>';
      document.getElementById('result').innerHTML = html;
    }
  </script>
</body>
</html>

このコードをテキストエディタ(メモ帳・VS Code等)に貼り付け、.html で保存してブラウザで開くと、動作するシミュレーターとして使えます。


奨学金返済 × マイル積立の並立設計

シミュレーターで「繰り上げ返済をした場合としない場合の利息差」が計算できたら、次の設計に進みます。

判断の基本軸

ケース判断の考え方
第一種奨学金(無利子)繰り上げ返済の利息削減効果はない。心理的負担の軽減が主な目的。投資・マイル積立を優先する考え方が成立しやすい
第二種(低利率 0.x%)長期インデックス投資の期待リターン(仮に年3〜5%)と比較すると、投資優先の考え方が成立しやすい可能性
第二種(高利率 2〜3%)利息削減の経済的メリットが大きくなる。繰り上げ返済と投資の並立設計が有効な可能性

なお、投資の期待リターンは確定値ではありません。市場リスクがあるため、「確実に利息を削減する繰り上げ返済」と「リターンが不確実な投資」のどちらを優先するかは、リスク許容度を踏まえた個人の判断です。

マイル積立との3すくみ設計

月の余剰資金を「奨学金繰り上げ返済」「NISA/iDeCo積立」「マイル積立用クレカ集約」の3方向に配分する発想を整理します。

例: 月5万円の余剰資金の場合

配分先金額例目的
奨学金繰り上げ返済1万円心理的負債の軽減・利息削減(有利子の場合)
NISA積立3万円長期資産形成
クレカ集約(マイル)残りの支出を集約マイル獲得・年間消費の可視化

この配分は「最適解」ではなく、「自分の状況と価値観に合わせて調整する叩き台」として使ってください。


MP判定

MP判定(ChatGPTによる奨学金返済シミュレーター自作):

- 合理性: ★★★★★
  → 自分の正確な条件に合わせたシミュレーターを、無料・短時間で作れる
  → 市販ツールでカバーされていない「繰り上げ返済 × 投資並立の比較」を自作できる

- 快適性: ★★★★☆
  → 「返済があと何年あるか」を可視化するだけで、精神的な安心感につながる場合がある
  → 数字で見える化することで、漠然とした不安を具体的な設計に変換できる

- 自由度: ★★★★☆
  → 奨学金の完済設計が明確になると、その後の資産形成(NISA/マイル)への余力が見えやすくなる
  → 「完済後に何をするか」という人生設計が具体化しやすくなる

- 確実性: ★★★☆☆
  → シミュレーターの計算は前提値が正確であれば合理的だが、入力する利率・残債を正確に把握する必要がある
  → 投資リターンとの比較は、投資側の不確実性を常に考慮する必要がある

- まず試すべきこと:
  → JASSOマイページで残債・利率・毎月の返済額を確認する
  → 本記事のコードをブラウザで開いて自分の数値を入力してみる

📖 関連LIFE SHIFT(ライフ・シフト)100年人生時代のキャリア・資産・健康の再設計。人生の自由度を上げる長期視点をくれる。

結びに

🐈 ポルト「道具を作る力より、道具を使って何を見るかが重要じゃ。シミュレーターを作ることが目的ではなく、その数字を見て設計を変えることが目的だ。」

🐈‍⬛ マイル「でも自分でコード書けなくても、ChatGPTに頼めば作れるってわかったのは大きい!」

🙇 執事H「お嬢様、道具を作る手段が増えたことより、その道具を設計の改善に使っていただくことの方が重要でございます。まず JASSOのマイページを開いて、ご自身の残債と利率を確認するところから始めてみてください。」

奨学金の返済設計は、マイル積立・NISA積立・iDeCo積立と並列に設計できるテーマです。ChatGPTを使えば、自分の条件に合ったシミュレーターを短時間で自作できます。計算の仕組みを理解した上で、「繰り上げ返済優先か投資優先か」を自分の数値で判断することが、漠然とした「どっちが得か」の議論から抜け出す方法のひとつです。


参照(情報基準日 2026-05-25)

関連記事


本記事は note では公開していない、MileagePortfolio サイト独占のライフ×AI活用コラムです。情報基準日:2026-05-25。本記事のコードはサンプルであり、動作を保証するものではありません。実際の奨学金の返還条件はJASSOの公式情報または各奨学金の返還誓約書をご確認ください。投資・資産運用に関する判断は、ご自身の責任で行い、必要に応じて専門家にご相談ください。

この記事をもっと深めたい人へ — 本と映像のすすめ

記事の整理だけでは足りない人向けに、関連する書籍と映像作品を置いておきます。

DIE WITH ZERO 人生が豊かになりすぎる究極のルール
ビル・パーキンス
お金を「使い切る」ことの合理性を説く話題作。老後のための先送りを問い直す一冊。
▸ Amazonで探す
LIFE SHIFT(ライフ・シフト)
リンダ・グラットン
100年人生時代のキャリア・資産・健康の再設計。人生の自由度を上げる長期視点をくれる。
▸ Amazonで探す
FIRE 最強の早期リタイア術
クリスティー・シェン
30代でFIREした夫婦の実体験と具体的な計算方法。自由な時間を買う発想の参考に。
▸ Amazonで探す
🎬 Hulu(動画配信)
人生の選び方・働き方を描く作品が豊富。「今をどう生きるか」を考えるきっかけに。
このテーマに重なる作品(配信状況は変動)
  • 最高の人生の見つけ方 (2007)
    余命を告げられた二人が『やり残したこと』に挑むロードムービー。今をどう使うか問い直す。
  • イントゥ・ザ・ワイルド (2007)
    全てを捨てて旅に出た青年の実話。お金・自由・幸福の関係を考えさせる。
  • マイ・インターン (2015)
    アン・ハサウェイ×ロバート・デ・ニーロ。働き方と人生のバランスを描く心温まる一本。
Hulu

※当サイトはアフィリエイト広告を含みます。ご購入は本サイトの運営継続に充てられます。

SPONSORED
Amazon (もしもアフィリエイト)
SPONSORED
松井証券楽天カード
SPONSORED
株・投資信託ならネット証券のマネックス
SPONSORED
サンプル百貨店(お試し通販)