コンテンツへスキップ
🛠️ToolsShed

借金スノーボール計算ツール

スノーボール法またはアバランチ法で借金返済計画を立てます。

このツールについて

債務スノーボール計算機は、スノーボールまたはアバランチェ方式を使って複数の債務の戦略的な返済計画を立てるのに役立ちます。多くの人々は複数の債務に直面し、大きな総残高を前に動機を保つのが難しいと感じています。このツールは、各債務をいつまでに完済できるのか、また最低返済額以上の追加支払いでどれだけ利息を節約できるかを示す月単位のロードマップを提供します。

計算機を使用するには、すべての債務を現在の残高、毎月の最低返済額、利率とともにリストアップし、月々の総返済予算を設定します。計算機は選択した戦略に応じて債務を並べ替えます。スノーボールは心理的勢いのために最初に最小残高を優先し、アバランチェは支払う総利息を最小化するために最高金利を目標とします。数秒以内に、完全な返済タイムライン、総利息、そして返済済み債務が次のターゲット債務に資金を解放するスノーボール効果の月別表示が得られます。

スノーボール方式は通常、初期の成功が感情的勢いを築くため完了率が高く、アバランチェは数学的に最も多くのお金を節約します。動機付けが課題であればスノーボールを選び、財務に関して厳格であればアバランチェを選んでください。計算機は固定レートと厳格な返済計画への遵守を前提としていることに注意してください。実際には新しい請求金額や人生の変化に調整する必要があるかもしれません。正確な契約ではなく動機付けのロードマップとして使用し、債務状況が圧倒的に感じられる場合は信用カウンセラーに相談することを検討してください。

よくある質問

コード実装

from dataclasses import dataclass, field
from typing import List, Optional

@dataclass
class Debt:
    name: str
    balance: float
    min_payment: float
    apr: float  # Annual Percentage Rate e.g. 0.20 for 20%

    @property
    def monthly_rate(self) -> float:
        return self.apr / 12

@dataclass
class PayoffResult:
    name: str
    months_to_payoff: int
    total_paid: float
    total_interest: float

def debt_snowball(debts: List[Debt], monthly_budget: float) -> List[PayoffResult]:
    """
    Simulate the debt snowball method.
    Debts are sorted by balance (smallest first).
    Extra budget is applied to the current target debt.
    """
    # Sort by balance ascending (snowball)
    queue  = sorted(debts, key=lambda d: d.balance)
    paid   = [False] * len(queue)
    bals   = [d.balance for d in queue]
    totals = [0.0] * len(queue)  # total paid per debt
    month  = 0
    results = []

    while any(not p for p in paid):
        month += 1
        # Find current target: first unpaid debt
        target_idx = next(i for i, p in enumerate(paid) if not p)

        # Calculate total minimums for non-target debts
        minimums_used = sum(
            queue[i].min_payment for i in range(len(queue))
            if not paid[i] and i != target_idx
        )
        extra = monthly_budget - minimums_used

        # Apply payments
        for i, debt in enumerate(queue):
            if paid[i]:
                continue
            payment = extra if i == target_idx else debt.min_payment
            interest = bals[i] * debt.monthly_rate
            principal = min(payment - interest, bals[i])
            bals[i] -= principal
            totals[i] += payment
            if bals[i] <= 0.01:
                paid[i] = True
                results.append(PayoffResult(
                    name=debt.name,
                    months_to_payoff=month,
                    total_paid=totals[i] + bals[i],  # adjust overpayment
                    total_interest=totals[i] - debt.balance
                ))

    return results

# Example
debts = [
    Debt("Credit Card A", balance=2500,  min_payment=75,  apr=0.22),
    Debt("Credit Card B", balance=5000,  min_payment=100, apr=0.18),
    Debt("Car Loan",      balance=8000,  min_payment=200, apr=0.06),
    Debt("Student Loan",  balance=15000, min_payment=150, apr=0.05),
]

results = debt_snowball(debts, monthly_budget=700)

total_interest = sum(r.total_interest for r in results)
print("Debt Snowball Payoff Plan:")
print(f"{'Debt':<20} {'Months':>7} {'Interest Paid':>14}")
for r in results:
    yrs = r.months_to_payoff // 12
    mos = r.months_to_payoff % 12
    print(f"{r.name:<20} {yrs}y {mos:02d}m  ${r.total_interest:>12,.2f}")
print(f"{'Total interest:':<20}        ${total_interest:>12,.2f}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.