住宅手当と社宅、いずれも会社が従業員の住まいを援助してくれる、ありがたい仕組みです。
子供が就職するときに、会社から「住宅手当はあるけど、賃貸契約を会社にすると、あなたも会社も節税になる」と言われたそうで、「どう思う?」と、子供から相談を受けました。
いろいろと調べて計算すると、確かにその会社の労働条件ならば、「従業員と会社のどちらもお得なのは社宅だ」と分かりました。
ちゃんとわかっていなかった、住宅手当と社宅の違いについて、調べたことを記事にしました。
住宅手当と社宅で違ってくること
私の本業の会社では、住宅手当も社宅も制度がなくなってしまいましたが、私が入社した当時は社員寮があり、生活面で大いに助けられました。
住宅手当と、賃貸契約を会社にする=借り上げ社宅(以降は社宅と記載します)で、直感的にわかる違いは以下の通りです。
| 住宅手当 | 社宅 | |
| 賃貸契約 | 従業員 | 会社 |
| 家賃の支払い | 銀行から引き落とし | 給料から天引き |
| 手当 | 給料に加算 | なし |
仕組みの違いは分かるのですが、子供の会社が提案してくれたように、「社宅の方が、住宅手当より税金がお得」という意味が分かりませんでした。
さらに気になったのは、たとえ節税になったとしても、手取り=可処分所得が多くないなら、従業員としてはお得ではないのでは?という点です。
キャッシュフロー表で計算する可処分所得は、以下の式で算出します。
可処分所得=収入ー(社会保険料+所得税・住民税)
住宅手当と社宅で、可処分所得がどれほど違うのかを計算すれば、従業員がお得であるかが明確にわかります。
前提条件
社宅の家賃がいくらになるかで結果は変わりますが、この計算では、家賃に対する会社の援助は、住宅手当は5万円、社宅の家賃は3万円としました。
従業員からしてみれば、「家賃8万円が3万円になる」住宅手当と、「家賃8万円の家を3万円にしてくれる」社宅は、同じ出費になります。
なお計算では、税金は所得税15%・住民税5%、健康保険・雇用保険・厚生年金などの社会保険は15%としました。
給与 20万円
住宅手当 5万円
家賃 8万円
社宅負担 3万円
税金+社会保険の率 35%(所得税15%・住民税5%・社会保険15%)
可処分所得は?
住宅手当は給与になりますので、給与が増えた分だけ、税金と社会保険が増加します。
一方で、社宅は住宅手当がなく家賃が天引きとなりますが、給与は増えていませんので、税金と社会保険は増えません。
直感的には、社宅は可処分所得が少なそうですが…
実際に計算してみると、住宅手当の場合は8.25万円なのに対して、社宅の場合は10万円!
社宅を選んだほうが、可処分所得は1.75万円も多いことがわかりました。
計算過程をウォーターフォール図にしてみると、収入(緑)に対する支出(赤)の違いがビジュアルに感じ取れます。
税金と社会保険が増額されず、割り引かれた家賃を支払う社宅の方が、可処分所得が多くなることがわかりました。
住宅手当がゼロ円で、社宅の家賃が8万円になるまで、社宅優位は変わりません。
| 見かけの家賃 | 可処分所得(住宅手当) | 可処分所得(社宅) |
| 30,000円 | 82,500円 | 100,000円 |
| 50,000円 | 69,500円 | 80,000円 |
| 70,000円 | 56,500円 | 60,000円 |
| 80,000円 | 50,000円 | 50,000円 |
会社の負担は?
住宅手当は給料となるので、住宅手当が加算された増えた分だけ、会社が負担する社会保険料の負担が増加してしまいます。
一方で社宅は、福利厚生費としての出費となるため、経費として利益を減らす効果が働き、法人税を減らすことができます。
どのような計算になるかは、国税庁タックスアンサーにありました。
賃貸料相当額は、次の(1)から(3)の合計額である
(1)(その年度の建物の固定資産税の課税標準額)×0.2パーセント
(2)12円×(その建物の総床面積(平方メートル)/3.3(平方メートル)
(3)(その年度の敷地の固定資産税の課税標準額)×0.22パーセント
従業員に対して社宅や寮などを貸与する場合、1か月当たり一定額の家賃(賃貸料相当額の50パーセント以上)を受け取っていれば、給与として課税されないのがポイントでした。
子供にできたアドバイス
私が最初に、直感で子供にアドバイスをしたのは、
でした。
でも、可処分所得を計算してみると社宅の方が多くなり、しかも会社は社会保険料と税金を減らせることにつながるのが確かめられました。
さらに、会社が賃貸契約をしてくれるので、家賃の3〜5ヶ月分がかかる、敷金・礼金・契約手数料の支払いがないのも、大きなメリットです。
結果として、
と伝えることができました。
その後会社からは、賃貸料の50%に社宅料金が設定されたそうで、これは、従業員の給与に課税されない配慮なのだと、理解できました。
自分や家族の悩みを解決できるようになったら、身近な人の悩みもサポートできるといいな
思いに従い実践しましたが、最終的にはいい方向にサポートできたのではと思います。
学びの多い、身近な出来事でした。
おまけ
グラフ描画コード
住宅手当と社宅のそれぞれの場合の可処分所得を、特定の条件で、ウォーターフォール図で比較するpythonコードです。
数字はベタ書きですが、ファイルから値を読み込んだり、コマンドラインから入力したりすると、自由度が高くなります。
# -*- coding: utf-8 -*-
"""
住宅手当方式 vs 社宅方式 — ウォーターフォール図(加減算値)
・日本語フォント自動設定(文字化け防止)
・白背景固定(透過オフ)
・保存してから plt.show()(白画像対策)
"""
import matplotlib.pyplot as plt
from matplotlib import font_manager, rcParams
# ---- 文字化け対策:日本語フォント自動設定 ----
def set_japanese_font():
for name in [
"IPAexGothic", "IPAGothic", "Noto Sans CJK JP", "Noto Sans JP",
"Yu Gothic", "Hiragino Sans", "MS Gothic"
]:
if name in {f.name for f in font_manager.fontManager.ttflist}:
rcParams["font.family"] = name
break
set_japanese_font()
rcParams["savefig.facecolor"] = "white"
rcParams["savefig.transparent"] = False
# ---- 入力 ----
base_salary = 200000 # 給与(円)
housing_allowance = 50000 # 住宅手当(円)
rent = 80000 # 家賃(円)
shataku_burden = 40000 # 社宅本人負担(円)
tax_rate_income = 0.15 # 所得税率
tax_rate_resident = 0.05 # 住民税率
tax_rate_social = 0.15 # 社会保険率
# ---- 計算 ----
def build_steps(gross, allowance, housing_cost, label_housing):
tax_income = gross * tax_rate_income
tax_resident = gross * tax_rate_resident
tax_social = gross * tax_rate_social
net = gross - (tax_income + tax_resident + tax_social) - housing_cost
return [
("給与", base_salary/10000),
("住宅手当", allowance/10000),
("所得税", -tax_income/10000),
("住民税", -tax_resident/10000),
("社会保険", -tax_social/10000),
(label_housing, -housing_cost/10000),
("手取り", net/10000),
]
def plot_waterfall(ax, steps, title):
running = 0.0
for i, (label, val) in enumerate(steps):
if label == "手取り":
ax.bar(label, val, color="#ff7f00")
ax.text(i, val + 0.3, f"{val:.2f}", ha="center", va="bottom", fontsize=10)
continue
if val >= 0: # 増加
ax.bar(label, val, bottom=running, color="#4daf4a")
ax.text(i, running + val + 0.2, f"{val:.2f}", ha="center", va="bottom", fontsize=9)
running += val
else: # 減少
ax.bar(label, -val, bottom=running + val, color="#e41a1c")
ax.text(i, running + 0.2, f"{val:.2f}", ha="center", va="bottom", fontsize=9)
running += val
ax.set_title(title)
ax.set_ylabel("金額(万円)")
ax.grid(True, linestyle="--", alpha=0.5)
ax.set_facecolor("white") # 軸内も白に固定
# ---- データ作成 ----
gross_teate = base_salary + housing_allowance
steps_teate = build_steps(gross_teate, housing_allowance, rent, "家賃")
gross_shataku = base_salary
steps_shataku = build_steps(gross_shataku, 0, shataku_burden, "社宅負担")
# ---- 描画(白背景) ----
fig, axes = plt.subplots(1, 2, figsize=(14, 6), sharey=True, facecolor="white")
plot_waterfall(axes[0], steps_teate, "住宅手当")
plot_waterfall(axes
, steps_shataku, "社宅提供")
plt.suptitle("住宅手当 vs 社宅提供", fontsize=14)
plt.tight_layout(rect=[0, 0, 1, 0.94])
# ❗保存 → 表示(この順番が重要)
out_path = "waterfall_allowance_vs_shataku_white.png"
plt.savefig(out_path, dpi=200, facecolor="white", edgecolor="none", transparent=False)
print(f"saved: {out_path}")
plt.show()
