持家と賃貸どっちが得か、楽待を使って試算してみた

持家がいいか賃貸がいいかは何度考えても、それぞれ利点と欠点が多すぎて何度考えても結局一概には言えない…という結論になってしまう。

そこで実際に数字を入れてみて試算することを考えた。
楽待というと不動産投資家向けのサイトで、複数戸の物件や賃貸中(=相手の都合が合わないと自分では住めない)の物件が中心であるため、直接はマイホームの購入には向かないが、家賃と購入がそれぞれいくらなのかの比較には参考になりそうだ。

特にこの CFシミュレーターhttps://www.rakumachi.jp/property/investment_simulator は優秀で、ローン返済はもちろん、さらに維持費や税金等をしっかりと計算した上でのトータルの損得を1年ごとに算出してくれる。

CFシミュレーターの見方

通常は家賃収入と投資の結果増減するお金/資産を試算するものだが、  家賃収入を賃貸の場合に支払うお金 と読み替えれば、 投資の結果増減するお金=マイホームの場合の損得 となりそうだ。

この画像では、

  • 緑線=家賃の場合の年間支払額
  • 赤線=マイホームと賃貸の年間費用の差額(プラスの場合はマイホームのほうが費用が少なく、マイナスの場合は賃貸のほうが少ない)
  • 赤棒=費用の差額の累計
  • 青棒=もし物件を売却した場合のトータルの損得

を示す。現実的なパターンで比較すると大抵赤棒はマイナスで、青棒はプラスになる。つまり払うお金は増えるが、それ以上に持ち家の資産価値が積みあがるケースが多い。まあもしそうならないなら賃貸・購入どっちがお得かだいぶはっきりしてしまうので笑

ただし賃貸購入どちらも相場の変動や予想外の出来事等によって実際はこれ通りに行かないリスクを大きく孕んでいるので、捕らぬ狸の皮算用かもしれない。

それぞれ入れていく数値について

表面利回り:家賃×12÷物件価格×100(%)で求まる。ただし次の下落率に応じて相場の家賃は年々減る想定なので、家賃固定の想定で比較する場合は比較した期間の真ん中の家賃に合わせるよう、少し上方に修正する。

家賃下落率:老朽化すれば家賃を下げないと価値が見合わなくなる。年間マイナス1%くらいが目安…らしい。なお、下落率を0に近づけると物件価格が相場通りに下がらず、計算が狂うので要注意。

固定資産税・都市計画税:デフォルトでは固定資産税は1%(税率1.4×評価額の目安0.7倍?)、都市計画税は0.2%(税率0.3×評価額の目安0.7倍?)くらいで見積もられているが、以下のような減額要因があるので、ざっくり元から入ってる値の2分の1くらいで良さそう。

  • 200m^2以下の宅地の場合は、土地分の固定資産税1/6、都市計画税1/3。マンションの場合も1戸当たり200m^2以下ならOK。
  • 建物は築年数が経つごとに減額される。
  • 新築から数年間は一定条件の下で建物分は2分の1

所得法人税率:お金を得ないなら税金もかからないよね。

管理費・修繕費・その他経費:挙げられる経費としては以下の形か

大規模修繕費:リフォーム費用、戸建てで築古の場合は建て替えを想定して費用を加算すればいいものか。

入居率:自分で住み続けるなら100%w…住めなくなるリスクがあるなら下げる必要があるかもしれないけど。

実際に計算してみた

首都圏近郊に4000万円の戸建て VS 家賃月額16.6万(利回り5%)想定で計算したところ、こんな結果になった。

35年後までで見ると700~800万円の費用増に対して資産の積み上がりが期待できてトータルでは1000万円強の得になる…まあまあな感じの結果になった。

しかし家賃と利回りを1割落とすと(月額15万/利回り4.5%)想定で計算したところ、1600万円前後の費用増に対してトータルでは300万円前後の得…やや微妙な結果になってしまった。これなら賃貸で浮いたお金で資産運用するほうがお得かもしれない。リスクがあるのはどっちもどっちだし。

少しの違いでも塵も積もれば山となる…で大きく結果が変わってしまうし精度を上げたくても不確定要素が多いので、結局計算しても何とも言えなくなってしまった。

ただし、これにプラスして住宅ローン減税の恩恵を受けられる場合は最大400万円前後の得にはなる

マイホームは投資よりとても利を出しやすい条件になる

また数字を入力していくと、マイホームでは投資と比べて以下の条件がとても有利なことに気付く

  • 金利:投資用より住宅ローンのが安い
  • 入居率:自分で住むなら100%
  • 税金:お金をもらってないのでゼロ
  • 管理費修繕費:投資の場合は滞納や設備の故障のトラブル対応を業者に任せるため、手数料がさらに加わる。

実際賃貸投資想定で値を入れてみると…これに含まれない物件価格の値上がりやインフレ等に期待するか、工夫して大きくコストカット出来ない限りは損することに気付いた。一体不動産投資家たちはどのようにして利益を上げているのだろうか…

クオリティが高すぎたのでABC Cooking Studioを退会した

ABC Cooking Studioに通っていたが、結局だんだん通わなくなってしまったので退会した。

通わなくなってしまった理由

端的に言うと 基準が高すぎる のが原因であった。
美味しい料理を作りたいのはもちろんそうなのだが、頻繁に作らなければならない普段の料理では時間をかけて手の込んだ美味しい料理を作りたいという気持ちにはなれず、あまり習った知識を活かせなかった。例えばこんな感じで考え方が異なってしまう。

料理教室:味移りを避けるためしっかり容器や鍋を分けて調理する。
自分:洗い物の手間を省くためなるべく使う調理器具を減らしたい。

料理教室:レシピ通りにしっかりと分量を測って入れる
自分:調味料はまだしも食材は中途半端に残ると使い道に困るので、キリ良く使いたい。レシピも検索で参照できるネットのほうが利便性高くてついそっちを使いがちになる。

料理教室:魚をさばく、肉を切る
自分:そもそもある程度調理しやすい形のものを買う。価格に差がほぼないケースなら尚更

といった具合である。

解約したらお金はちゃんと戻るのか?

しっかり払い戻されたので、その心配はなかった。
使った分の料金+入会金(12000円+税)+コースごとの解約料(最大6000円+税)が差し引かれる形となった。
コースごとの解約料は授業料1回分前後なのであともう少しでなければちゃんとお金が戻る一方、少しだけ利用して解約だと今までの利用分が割高に感じる…というなんとも絶妙な設定である。
また入会金も再度通いなおす際はかからないので、期限が切れそうと思ったら多少損に見えても無理せず解約したほうがいいといった感じである。

また申し込みから振り込みまでは1か月くらいかかったので、気長に待つ必要はありそうだった。

今後加入したい方は

  • 下記の理由から最初は少なめにして、様子を見て追加していくほうがいいかもしれない。
  • タイミングによってなのか分からないが、自分が申し込んだときは初回加入特典として入会金が無料になっていた。しかし途中で解約すると返金額から入会金が差し引かれるので、精算時に無効になる。
  • 各コースごとに使い切ってない回がある場合はコースごとに手数料が発生する。

ActiveRecord-importで1クエリでcolumnの値をupdateする方法

Railsでもまとめてupdateしてクエリ発行数を抑えたい!

Railsアプリケーションで、例えば人気投票やカウンター機能で1度に複数のrecordに跨ってincrement…といったケースで 1クエリで実行したい 場合。

既存のレコードのありきの場合はMySQLでは例えば

update votes set counter=counter + 1 where id IN (1, 2, 3)

と言った書き方で出来ますが、Railsだと記述の仕方によってはUPDATEする前にSELECTのクエリが入ったり1件ずつUPDATEしてしまうのでクエリの発行数が増大してしまいます。

また同時に更新処理をする際に、SELECT〜UPDATEが完了するまでの間ロックをしないと正しく値が更新されなくなりますし、ロックをすれば(特に複数レコード同士に跨ると) デッドロックの原因になる のでパフォーマンスを重視するなら1クエリで抑えたいですね!

でもActiveRecord-importの出番なしに

Vote.where(id: [1, 2, 3]).update_all('counter = counter + 1')

と書くことが出来ます。あ…ココまではタイトル関係ないです、すみません。

さらに既存のレコードが無かったら追加したい場合は?

ただ…そこで既存のrecordが 既に存在しているか分からない 前提になるとこれでは通用しなくなりますね。

ここで考えたのが… insert ... on duplicate key update のMysQL構文を持ってくること。
となれば表題の通り ActiveRecord-import Gem の出番になります。

しかしドキュメントを読んでいる限りでは、 on duplicate key update counter = counter + 1 みたく、columnの値を含めた計算式を入れる方法が見当たりません。

最後の望みを託してソースコードを確認すると…
この部分でどうやらそのまま文字列の式を入れるとSQL文に組み込んでくれるように見えます!

ということで、このように書けば1クエリで実行することが出来ました!

records = ids.map do |id|
{ id: id, counter: 1 }
end

Vote.import! records, on_duplicate_key_update: 'counter=counter + 1'

ソースコードのリンクはMySQL用ですが他にPostgresSQLやSQlite用も同様の実装に見えました。

ただし仕様に載ってないということは、将来のバージョンアップでサイレントで実装が変わってしまう可能性はあるので要注意ですね。