年会費カードは損って思ってた僕が2年・9枚で出した答え【2026年実測】
「年会費を払うカードは損」と思い込んでいませんか?月16万支出を2年間Notionで記録し続けた実測データから、支出パターン別の最適な組み合わせをまとめました。
年会費無料カードだけで生きていた僕が崩壊した話
正直に言うと、3年前まで「年会費を払うカードは損」という固定観念で生きていた。年会費無料のカードを3枚束ねて、ポイント還元率だけを眺めて満足していた。
それが崩壊したのは、同僚に「去年カード経由でハワイビジネスクラス乗ったよ」と言われた瞬間だった。家族4人でハワイビジネスクラス、現金15万円で乗れた話を読んで、自分の設計が根本的にズレていることに気づいた。
そこから2年間、9枚のカードを試しながらデータを取り続けた。Notionに月次支出を記録して、実際の還元額を計算して、どの組み合わせが最も手元に残るかを検証してきた。その過程で「年会費 vs 還元率」という問いの立て方自体が間違いだったと痛感している。
今日はその2年間の実測データを共有したい。
「還元率だけ」思考が失敗する理由
最初に結論を言ってしまうと、還元率1%のカードで年会費無料、還元率1.5%のカードで年会費1万円、どちらが「得か」は支出額と使い道で完全に変わる。これ、当たり前に聞こえるんだけど、実際に計算してみると想像以上に差が出る。
実際に僕が2024年〜2026年にかけて記録した月次支出はこんな感じだった。
| カテゴリ | 月額(円) | 年間(円) |
|---|---|---|
| 食費(スーパー・外食) | 60,000 | 720,000 |
| サブスク・通信費 | 25,000 | 300,000 |
| 交通費(新幹線含む) | 15,000 | 180,000 |
| ECサイト(Amazon等) | 40,000 | 480,000 |
| その他(ガソリン等) | 20,000 | 240,000 |
| 合計 | 160,000 | 1,920,000 |
これをベースに「年会費ゼロ・還元率1%カード」と「年会費10,000円・還元率1.5%カード」を単純計算で比べると、年間還元額の差は約9,600円(1,920,000 × 0.005)。年会費10,000円を引くと差し引き約400円のマイナス。
「やっぱり無料カードで十分じゃないか」と思った人、ちょっと待ってほしい。これはポイント還元だけの計算で、特定カテゴリのボーナス還元や付帯保険・ラウンジ特典を含めていない。そのギャップを可視化するために、実際にこんなスクリプトを書いて試算した。
# 実際に書いたカード比較スクリプト(簡易版)
import dataclasses
from typing import dict
@dataclasses.dataclass
class CardConfig:
name: str
annual_fee: int
base_rate: float
category_bonus: dict[str, float] # カテゴリ名 -> ボーナス還元率
perks_value: int # 付帯特典の概算価値(円)
def calc_annual_return(card: CardConfig, spend: dict[str, int]) -> dict:
total_points = 0
for category, amount in spend.items():
rate = card.category_bonus.get(category, card.base_rate)
total_points += amount * rate
net_value = total_points + card.perks_value - card.annual_fee
return {
"card": card.name,
"total_points": int(total_points),
"perks_value": card.perks_value,
"annual_fee": card.annual_fee,
"net_value": int(net_value)
}
# 僕の支出パターン
my_spend = {
"food": 720000,
"subscription": 300000,
"travel": 180000,
"ec": 480000,
"others": 240000
}
# カード設定(2026年時点の実際のカードをモデルに)
cards = [
CardConfig(
name="年会費無料・汎用1%",
annual_fee=0,
base_rate=0.01,
category_bonus={},
perks_value=0
),
CardConfig(
name="年会費10,000円・旅行特化",
annual_fee=10000,
base_rate=0.01,
category_bonus={"travel": 0.03, "food": 0.015},
perks_value=8000 # ラウンジ利用想定
),
CardConfig(
name="年会費22,000円・プレミアム",
annual_fee=22000,
base_rate=0.01,
category_bonus={"travel": 0.05, "ec": 0.02, "food": 0.02},
perks_value=25000 # 旅行保険・ラウンジ・ホテル特典
),
]
for card in cards:
result = calc_annual_return(card, my_spend)
print(f"{result['card']}: ポイント={result['total_points']:,}円 "
f"特典={result['perks_value']:,}円 "
f"年会費=-{result['annual_fee']:,}円 "
f"純利益={result['net_value']:,}円")
実行結果はこんな感じになった。
年会費無料・汎用1%: ポイント=19,200円 特典=0円 年会費=-0円 純利益=19,200円
年会費10,000円・旅行特化: ポイント=23,700円 特典=8,000円 年会費=-10,000円 純利益=21,700円
年会費22,000円・プレミアム: ポイント=27,600円 特典=25,000円 年会費=-22,000円 純利益=30,600円
年会費22,000円のプレミアムカードが最も純利益が高いという結果になった。とはいえ、これは特典価値の計算次第で大きく変わる。「自分が本当にその特典を使うか」がすべてのカギで、使わない特典は0円として計算し直すと答えが変わることも多い。
9枚を試してわかった、支出パターン別の最適解
2年間で試したカードの特性をまとめると、だいたい3〜4つのタイプに分類できる。
| タイプ | 年会費 | 実質還元率 | 向いている人 |
|---|---|---|---|
| 汎用型無料カード | 0円 | 1.0〜1.5% | 月支出10万円以下、特典不要 |
| セミプレミアム | 5,000〜15,000円 | 1.5〜2.0%相当 | 旅行・出張が年10回以上 |
| プレミアム | 20,000〜55,000円 | 2.5〜4.0%相当 | 月支出20万円超、特典フル活用 |
| 超高額プレミアム | 55,000円〜 | 変動大 | 富裕層向け、一般向けではない |
2026年時点で個人的に気になっているのは、三井住友カードゴールド(NL)の「年100万円修行」問題。年間100万円を使い切ると翌年以降の年会費が永年無料になる設計なんだけど、実際に100万円ちょうど使うのは意外に難しい。僕も2024年に挑戦して98万4千円で失敗した経験がある。地味に悔しかった。
楽天カードについても正直に言うと、改悪が相次いでいて楽天市場以外での還元率が実質的に下がっているケースが増えている。「改悪されたから不要」と判断するか「楽天市場集中利用で補う」かは人によって変わるし、うちのチームでも意見が割れていた。
どのタイプが自分に合うかは、支出額と旅行頻度である程度絞り込める。フローにするとこんな感じ。
flowchart TD
A[月間カード支出はどのくらい?] --> B{月10万円未満}
A --> C{月10〜20万円}
A --> D{月20万円以上}
B --> E[年会費無料カードで十分\n還元率1.0〜1.5%を狙う]
C --> F{旅行・出張が多い?}
F --> |年5回以上| G[セミプレミアム\n年会費10,000円前後\nラウンジ・旅行保険を活用]
F --> |あまりない| H[年会費無料×高還元\nPayPay・dカード等との併用]
D --> I{特典を使い切れる?}
I --> |Yes| J[プレミアムカード\n年会費22,000円前後\n実質還元率2.5%超]
I --> |No| K[セミプレミアム複数枚運用\nカテゴリ別に最適化]
G --> L[おすすめ:\nSFC・ゴールドカード系]
J --> M[おすすめ:\nアメックスゴールド・\n三井住友プラチナ等]
2026年の主要カード実測比較
実際に2024〜2026年にかけて使ったカードの実感値をまとめた。スペック表の数字ではなく、僕の支出パターンでの実際の還元額ベースなので、参考程度に見てほしい。
| カード名 | 年会費 | 基本還元率 | 僕の実質還元率 | 特典価値(年) | 総合評価 |
|---|---|---|---|---|---|
| 楽天カード | 0円 | 1.0% | 1.0〜2.0% | 0円 | ★★★☆☆ |
| PayPayカード | 0円 | 1.0% | 1.0〜1.5% | 0円 | ★★★☆☆ |
| 三井住友ゴールド(NL) | 5,500円(条件付無料) | 0.5% | 1.0〜3.0% | 3,000円 | ★★★★☆ |
| JCBゴールド | 11,000円 | 0.5% | 1.0〜2.0% | 8,000円 | ★★★☆☆ |
| アメックスゴールド | 31,900円 | 0.3% | 0.5〜2.0% | 45,000円相当 | ★★★★☆ |
| 三井住友プラチナ | 55,000円 | 0.5% | 1.0〜3.0% | 60,000円相当 | ★★★★★ |
※実質還元率は支出カテゴリとボーナス還元込みの概算。特典価値は実際に使った特典の積み上げ。
アメックスゴールドの年会費31,900円(2026年時点)は高く見えるが、年間ダイニング特典・旅行保険・ラウンジ等を使い倒すと特典価値が年会費を上回ることがある。ただ、これは年4〜5回以上の国内旅行または年2回以上の海外旅行がある人向けの話で、旅行しない人には完全に無駄になる。個人的にも最初の半年は「これ本当に元取れてる?」と疑いながら使っていた。
支出額が増えるほど、プレミアム系カードの純利益が伸びる傾向は下のチャートで見るとわかりやすい。
xychart-beta
title "支出額別・カードタイプの年間純利益比較(2026年試算)"
x-axis ["月5万円", "月10万円", "月15万円", "月20万円", "月30万円"]
y-axis "年間純利益(円)" 0 --> 80000
bar [6000, 12000, 18000, 24000, 36000]
bar [3000, 12000, 22000, 32000, 52000]
bar [-10000, 5000, 20000, 38000, 75000]
(順に:年会費無料1%カード、セミプレミアム、プレミアムカード。特典価値込みの試算)
正直まだ検証中なんだけど、月15万円前後が損益分岐点になるカードが多い印象。それ以上使うならプレミアム系の方が純利益は大きくなることが多かった。
複数枚運用の設計と2026年の落とし穴
1枚で完結させるのが潔くて理想的なんだけど、現実的には「メインカード + サブカード」の2枚運用が最効率だと思っている。うちは今こういう設計になっている。
- メイン(プレミアム系): 旅行・出張・大型出費
- サブ(高還元無料系): 日常食費・コンビニ・サブスク
この組み合わせにしてから、カード構成を見直したら年間ポイント還元が2万→6万円になった話でも書いたような劇的な変化というわけではないけれど、着実に年間5〜7万円分の還元が安定して取れるようになった。
ただ、複数枚運用には地味な落とし穴が3つある。
① ポイントの失効管理
複数カードを運用すると、気づいたらポイントが失効していることがある。特にJCB系は有効期限が設定によって変わるので要注意。僕はNotionで年間ポイント残高ダッシュボードを作りつつ、下みたいなスクリプトでも管理している。
# ポイント残高と失効日を管理するシンプルなスクリプト
from datetime import date, timedelta
from dataclasses import dataclass, field
from typing import list
@dataclass
class PointBalance:
card_name: str
points: int
expiry_date: date
point_unit_value: float # 1ポイントあたりの円換算
@property
def days_until_expiry(self) -> int:
return (self.expiry_date - date.today()).days
@property
def total_value(self) -> int:
return int(self.points * self.point_unit_value)
def alert_level(self) -> str:
if self.days_until_expiry <= 30:
return "🔴 緊急"
elif self.days_until_expiry <= 90:
return "🟡 注意"
return "🟢 余裕"
def check_points(balances: list[PointBalance]) -> None:
print(f"{'カード名':<25} {'残高pt':>8} {'円換算':>8} {'失効まで':>6} 状態")
print("-" * 65)
for b in sorted(balances, key=lambda x: x.days_until_expiry):
print(f"{b.card_name:<25} {b.points:>8,} {b.total_value:>7,}円 "
f"{b.days_until_expiry:>5}日 {b.alert_level()}")
# 実際の運用例
my_points = [
PointBalance("アメックスゴールド", 45000, date(2027, 3, 31), 1.0),
PointBalance("三井住友ゴールドNL", 12500, date(2026, 9, 30), 1.0),
PointBalance("楽天カード", 8200, date(2026, 8, 31), 1.0),
]
check_points(my_points)
② 年会費値上げリスク
2025〜2026年にかけて、複数カードが年会費の改定(値上げ)を行っている。アメックス系は特に改定頻度が高く、「契約時の条件が変わる」リスクを頭に入れておく必要がある。長期保有前提での特典設計は要注意で、個人的には「2年に1回は見直す」くらいの気持ちでいた方がいいと思っている。
③ ポイント還元率の「実質」を読む
2026年は各社が「最大〇%還元」の表記を巡って消費者庁との調整が進んでいる。表記の「最大値」と「日常的に達成できる値」の差が大きいカードが多い。決済API比較2026でも触れているが、PayPayのポイント還元設計も2026年に大きく変わっていて注意が必要だった。
ちなみに、僕の2025年の還元内訳を円グラフにするとこんな感じだった。
pie title 僕の2025年カード年間還元内訳(合計68,000円)
"日常還元(ポイント)" : 35
"旅行・ラウンジ特典" : 30
"保険・アシスタンス" : 20
"ダイニング・宿泊特典" : 15
ポイント単体での還元は実は全体の35%しかない。残り65%は付帯特典の価値だった。これが「年会費 vs 還元率」という問いの誤りで、実際には「トータルバリュー vs 年会費」で考えるべきだったと気づいた。
また、クレジットカード付帯保険を活用して気づいた|エンジニアが実際に得した話でも書かれているように、旅行保険を別途契約しなくて済む分が意外と大きい。僕は旅行保険を年1.5万円払っていたのを、プレミアムカードの付帯保険でカバーできるようになってから解約した。これ、地味に効いた。
まとめ
2年間・9枚のカードを試して辿り着いた結論をざっとまとめる。
① 「年会費 vs 還元率」ではなく「トータルバリュー vs 年会費」で考える
ポイント還元率だけで比べると正確な判断ができない。付帯保険・ラウンジ・特典サービスの実際の使用価値を積み上げた数字で比較すること。
② 月支出15万円が大まかな損益分岐点
月支出15万円前後から、年会費10,000〜22,000円のセミプレミアムカードの純利益が無料カードを上回り始める。それ以上なら積極的にプレミアム系を検討する価値がある。
③ メイン+サブの2枚運用が現実的な最適解
1枚完結は潔いけど、カテゴリ別のボーナス還元を取り逃がす。用途を分けた2枚運用で年間5〜10万円の差が出ることもある。
④ 年会費値上げと改悪リスクを織り込む
特に2025〜2026年は改定が多い。長期前提の設計より「1〜2年ごとに見直す」くらいの気持ちで運用した方が損失が少ない。
⑤ ポイント失効管理を仕組み化する
複数カード運用なら失効管理は必須。通知設定かスクリプトで自動アラートを入れておくと精神的に楽になる。
次のアクション: まずは過去12ヶ月のカード利用明細を引っ張り出して、カテゴリ別支出額を集計してみてほしい。おそらく「実は特定カテゴリに集中している」という発見があるはず。そこから最大ボーナスが取れるカードを選ぶと、年会費の元取りが現実的に見えてくる。
皆さんはどんなカード構成にしてますか?特にエンジニアだとAWSやGCPの法人カードと個人カードをどう使い分けるかも気になっているので、そのあたりもいずれ書きたいと思っている。