住宅ローン、固定で組むなら当初20年か35年か。

固定金利で借りたい!

変動金利なら昨今は0.5%以下とあって無いような水準が続いているが、個人的にはどうしても将来の金利上昇を無抵抗で受け入れなければならないリスクをとるのが怖いなと感じてしまう。

というのも、金利が上昇すれば返済額は上がる一方で、その時点で買う側からして見ると(同じ返済でも)買える物件の額が下がるので、売って完済したいと思っても売却額が下がることになる…このダブルパンチで資産の大幅減少ひいては破産につながるのは避けたい。物件がどうも高い時代なら尚更と思う。

けど35年固定の金利は微妙に高い

固定金利も住信SBIネット銀行のフラット35(保証型・団信込み)なら1.21%程度(※2020年11月時点。毎月異なる)とはいえ…返済総額を見てみると5000万円の借入に対して利息は約1148万、合計で6148万。将来きっと多少はインフレすると思うのでその分は差し引いて考えたいが、問題は利息の大半は10年20年経たないうちに発生すること。そのスパンだったらインフレ可能性はあれどそこまでは大きくないよなあ。

利息の半分弱は10年後、8割は20年後までに払うことになる

そこで実際に利息はいつまでにどれくらい発生してるのか計算してみると、驚きの結果が出た。なんと47%は10年後、80%は20年後までに支払っていることになっていた。逆に言えばそれ以降は金額も期間も少ないから大した利息が付いてないんだなあ…と

累計利息額割合
10年後536万46.7%
20年後916万79.8%
30年後1120万97.6%
35年後1148万100%

そこで当初固定金利に目を向ける

最近では当初〇年は金利固定、その後返済方法を再度選べるローンもあるみたいだ。固定期間の終了後に選べる金利は割高なので、借り換えや完済ができない状態になっていると利息をカモられる以外の選択肢が無くなって怖いなあ…とは感じていたものの、数年とか10年ではなく20年固定ならむしろ良いのではないかと利息のかかり方を見て思い始めた。

20年という塩梅の良さ

自分が住宅ローンを借りて20年後どうなるかを考えてみる。3歳と1歳だった子供は23歳と21歳になり、独り立ちも目前に迫っているはずだ。子供が独り立ちすれば選択肢は以下の通りに広がる。

住み続ける場合:

  • 金利が低い状態が継続してて、自分もまだ大きな借入ができる状態を(健康と仕事的に)キープできていれば借り換えで低金利を継続できる。
  • もし金利が高くなっていても、最初の10年で得した住宅ローン控除の400万円分など、貯金が残っていればここで返済することで元本もそれなりに減らせる。
  • 教育支出が無くなるので、節制が取れれば極端な繰り上げ返済しても怖くなくなる。利息が膨らむ前に返済を終えられないか。

売却する場合:

残債は半分以下なので、土地の価値が高いエリアなら相場が暴落してなければいくらか手残りが出るはずだ。引っ越し先も広さを抑えたり大人向きの場所にするなど、ちょうど子育てと違う条件にしたい頃で丁度いい。

という具合に状況次第で手段はいくつもあるので、詰みはしないかな…と期待してみる。

具体的にいくら変わるのか

例えば新生銀行の場合、当初20年の金利は0.9%(2020年11月現在・フラット35と同等の金利優遇を受けるために10%の頭金を入れる前提)だった。ここから当初20年間の利息の差を計算してみると、以下の通りとなった。

累計利息額フラット35(保証型)との差
10年後396万140万
20年後673万243万

20年間で243万…月あたり1万円程度だろうか。返済額の絶対値も大きいため割合では10%に満たないが、それなりには大きな差が生じることが分かった。また、20年後の残債は2336万。現在と基準金利が変わらない場合は1.25%(変動)だそうだ。

次は残り15年分の返済について考えてみる。
金利は1.25%の場合と悲観的に見て+3%の4.25%、返済パターンは

  • そのまま
  • 10年に短縮
  • 得した分の250万円を温存して一括
  • さらに住宅ローン減税で得した400万円分を温存して一括(計650万)

の4パターンで試算してみた結果が以下のとおりである。


1.25%4.25%
そのまま返済233万
(月14.3万)
847万
(月17.7万)
頑張って10年で返済156万
(月20.8万)
556万
(月24.1万)
250万円一括返済(期間短縮)180万
(月14.5万,13年)
651万
(月17.5万,13年)
650万円一括返済(期間短縮) 113万
(月15.0万,10年)
401万
(月17.4万,10年)

結論:金利が上がっても得した分一括返済できれば大丈夫そう

なお、35年固定の場合の20年後以降にかかる金利の合計が232万である。もし金利がもし上がっていなければ焦らず返済すれば問題なさそうだ。

仮に金利が今より3%上がって借り換えも出来なかった場合、そのままのペースで返済すると847万とやや手痛い利息がついてしまうが、今までに得した分を一括で返済して債務を圧縮できていれば、あるいは教育費など別用途に使ってしまっていても頑張って10年以内に返済できれば、 大やけどに至る心配は無さそう…と考えるとまあまあ安心できそうな結果だ。

もっとも、 この条件で返済し続ける以外の選択肢も多分あるだろうし、 金利が上がっていれば貯めていた貯金にもそれなりの利子がついて増えているはずだし。

ただ、固定金利の減らし方は当初固定の期間を調整するだけでなく、団信に入らないという手もありそうだ。

若く健康で万一の時に住宅として遺産を残したいと思っていなければ、団信に入らず必要な分だけ別途保険に入る…という手もありそうだ。そのほうが死亡・高度障害だけでなく、身体・精神疾患含む就業不能までカバーしたいなどリスクヘッジする額や範囲も選びやすい。また、予想以上にお金が貯まればあえて保険に入らずにさらにその分繰り上げ返済や流動資産を増やす方向にも切り替えられる。とにかく将来の状況に応じて臨機応変な切り替えが出来るので、次回は団信を使わないケースも試算してみたいと思う。

都心への通勤時間が短い場所を探す①特異的に早い武蔵小杉周辺

前回の記事でいろんな駅から駅への通勤時間の短い場所を割り出すスクリプトを書いてみたので、さっそくこれを使用して実践してみたい。

都心近接エリア並みに都心に近い武蔵小杉

今回は以下の条件で計算を行った。

  • 2020年10月15日時点
  • 午前9時10分に都心の駅に到着
  • 都心の駅として新橋,田町,東京,秋葉原,虎ノ門,大手町,品川,渋谷,飯田橋,新宿,恵比寿,六本木,目黒,五反田,大崎,池袋,上野,日本橋,銀座,永田町,後楽園の21駅を選出し、その所要時間平均を採った。

この結果が以下のとおりである。(単位:分)

平均値
三軒茶屋22.29
自由が丘24.76
武蔵小山21.00
代々木上原21.43
中野20.57
西日暮里20.62
錦糸町21.67
東池袋21.81
豊洲22.19
天王洲アイル19.48
門前仲町18.71
勝どき20.48
武蔵小杉22.10

山手線に近い駅や湾岸エリアのなかでも比較的都心に近い駅を入れてみたが…うん、比較して違和感がない!また東横線の東京寄りの駅と比べてもほぼ同等であるwこのリストの中で唯一県外にまで出てしまったのに張り合えるとは。また街の活気としてもグランツリーをはじめとする再開発に加え、元から商店がたくさんあるエリアなので申し分ない。おまけに都心と比べて横浜鎌倉湘南エリアに近づいて直通でも行けるため、休日のお出かけバリエーションも広がる立地である。

武蔵小杉のウィークポイント

ただし一点注意する必要があるのは、列車本数。武蔵小杉の通勤時間の短さの大半は湘南新宿ラインと横須賀線の速さに支えられているが、一時間当たりの本数は以下の通りと少ない。

  • 横須賀線:昼間4本、ラッシュ時10本
  • 湘南新宿ライン: 昼間4本、ラッシュ時5本(+相鉄線直通2~4本)

地下鉄や山手線の本数と比べるとかなり心細く、10分以上間隔が開くと時刻表を覚えながらの行動になりそうであるし、遅延が多いと困る。東横線や目黒線もあるが、優等列車の本数で考えるとやはり多くはない。(東横線は8本、目黒線は4~10本)とはいえ都心へのルートが何重にもなっている点は素晴らしい。

けれども2019年の水害でタワマンが浸水しようとも、住みたい街ランキングの上位から外れてもまだまだ自分たちが買える相場ではなく、高嶺の花に変わりはない…

武蔵小杉から一駅外してみると…

そこで武蔵小杉から一駅外すことを考えると以下の候補が挙がる。

横須賀線
湘南新宿ライン
新川崎27.48
東横線
目黒線
元住吉33.00
南武線武蔵中原34.48

所要時間の短さを継承する新川崎、本数の元住吉

やはり武蔵小杉の都心からの所要時間の短さは横須賀線と湘南新宿ラインが一番貢献してるので、その恩恵をそのまま受けられる新川崎エリアが交通利便性が高そうである。湘南新宿ラインはさらに停車本数が2本/時と減ってしまう点が要注意ポイントであるが、武蔵小杉乗り換えを含めれば有効本数4本/時は保てる。本数重視であれば南武線の鹿島田駅も利用可能で、ルートの二重化が保たれる点も魅力的だ。

またその一方で元住吉も各駅停車しか止まらないのに本数は昼間でも1時間に16本(東横線・目黒線の合計)と多い…!待たずに乗れることが多い分こちらも便利と感じるのかもしれない。

それぞれ個性のある駅たち

ファミリーに向いていると感じたのは新川崎エリア。周辺環境としては夢見ヶ崎動物公園(無料で入園できる!)や創造の森公園、さらにはパークシティ新川崎をはじめとする植栽豊かな大規模マンションの存在も相まって緑は比較的目立つと感じる。また再開発が長年地道に行われていった結果、歩きやすい道路が多い点も魅力的と感じた。商業施設も賑やかとまではいかないが、不便にならない程度にはある。実際に歩いてみると、子供たちの多さを感じる場所だった。また商業は特筆するほど発達はしてないが、 ホームセンター(島忠)や西松屋、スシローなどピンポイントでファミリーが欲しい店が揃ってる点も面白かった。

一方で商業視点では800mも繋がる商店街がとにかく賑やかで、個人商店も多いため飲食と買い物には困らず楽しめそうな元住吉が魅力的である。

またで武蔵中原周辺には多摩川沿いに広大な等々力緑地が広がっていて、こちらも広大な森が広がっているほか各種運動施設が揃っているので、スポーツが好きならこちらも良いんだろうなと感じた。

それぞれの街が個性を持っていて、また別の街の使いたいときは相互にバスや自転車でも行き来出来る距離感なのもいいと感じた。

Yahoo乗り換え案内を使って通勤時間の短い場所を探すRubyスクリプトを書いてみた。

コロナ禍でリモートワーク中心の生活になった僕ですが、一方で平時はオフィスで働きたい…と思うこの頃を送ってます。

一方で子供の成長も待ってくれないし今住んでいる場所だと都心に近すぎて逆に今後の子育てに十分な広さの部屋を借りるor買うのが難しくなってしまうし…と考えて、将来の住む場所を探してみることにしました。

また長い将来を考えると、将来もずっと同じ場所で働いている可能性はむしろ低い(転職するかもしれないし、会社自身が移転するかもしれない)ので、複数の場所からのアクセスがいい所を探したい。

などを考えて、自動で各駅のYahoo乗り換え案内のデータをスクレイピングして、運賃と所要時間をcsvファイルに出力するスクリプトを書いてみました。

require "open-uri"
require "nokogiri"
require "csv"
charset = nil

# 住む場所の候補 
start_stations = [
  '川崎',
  '西馬込',
  '池上',
  '武蔵小杉',
  '新川崎',
  '元住吉',
]
# 勤務地の発着時刻
des_hour = '20'
des_minute = '10'.to_i
# 帰りかどうか
is_reverse = true
# 勤務地の候補
des_stations = [
  '新橋',
  '田町',
  '東京',
  '秋葉原',
  '虎ノ門',
  '大手町',
  '品川',
  '渋谷',
  '飯田橋',
  '新宿',
  '恵比寿',
  '六本木',
  '目黒',
  '五反田',
  '大崎',
  '横浜',
  '新横浜',
  'みなとみらい',
  '池袋',
  '上野',
  '橋本',
  '日本橋',
  '銀座',
  '永田町',
  '後楽園',
]
time_table = {}
fare_table = {}

start_stations.each do |start_station|
  puts start_station
  time_table[start_station] = {}
  fare_table[start_station] = {}
  des_stations.each do |des_station|
    if start_station != des_station
      url_params = [ 
        ['fromgid', ''],
        ['from', is_reverse ? des_station : start_station],
        ['togid', ''],
        ['to', is_reverse ? start_station : des_station],
        ['viacode', ''],
        ['via', ''],
        ['viacode', ''],
        ['via', ''],
        ['viacode', ''],
        ['via', ''],
        ['y', '2020'], # 年
        ['m', '10'], # 月
        ['d', '15'], # 日
        ['hh', des_hour],
        ['m2', des_minute % 10],
        ['m1', des_minute / 10],
        ['type', is_reverse ? 1 : 4],
        ['ticket', 'ic'],
        ['expkind', '1'],
        ['ws', '2'], # 1(急いで乗り換え)~ 4(ゆっくり乗り換え)
        ['s', '0'],
        ['kw', is_reverse ? start_station : des_station]
      ]
      url = "https://transit.yahoo.co.jp/search/result?#{URI.encode_www_form(url_params)}"

      begin
        html = URI.open(url) do |page|
          charset = page.charset
          page.read
        end

        contents = Nokogiri::HTML.parse(html,nil,charset)
        route01 = contents.css('#rsltlst').first
        time = route01.css('dl > dd > ul > li.time').first
        minutes = time.css('span.small').first.content.gsub(/([0-9]{1,2}時間)*([0-9]{1,2})分/) { $1.to_i * 60 + $2.to_i } 
        fare = route01.css('dl > dd > ul > li.fare').first.content.gsub(/円/, "")
      rescue => e
      	puts "calculation failed. #{start_station} #{des_station} #{e}"
      end
    else
      fare = 0
      minutes = 0
    end
    puts "#{des_station} #{fare} #{minutes}"
    time_table[start_station][des_station] = minutes
    fare_table[start_station][des_station] = fare
    sleep 7
  end
end

CSV.open('times.csv','w') do |csv|
  csv << [''] + des_stations
  start_stations.each do |start_station|
    csv << [start_station] + des_stations.map do |des_station|
      time_table[start_station][des_station]
    end
  end
end

CSV.open('fares.csv','w') do |csv|
  csv << [''] + des_stations
  start_stations.each do |start_station|
    csv << [start_station] + des_stations.map do |des_station|
      fare_table[start_station][des_station]
    end
  end
end