0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cursor を6ヶ月使ってた俺が、Claude Code に全乗り換えた理由を全部書く

0
Last updated at Posted at 2026-05-07

note 版:https://note.com/mintototo1/n/na615d239961f
Zenn 版:https://zenn.dev/mintototo1/articles/compare-claude-code-vs-cursor-vs-aider

3ツール全部本番で使って、全部実プロダクトで動かした。
月$60課金した月もある。もう答えが出てる。
Cursor ユーザーへ:これ読んだら乗り換えるかもしれない。


3ツールの基本スペック(2026年5月時点)

Claude Code Cursor Aider
価格 $20/月(Max)または API 従量 $20/月(Pro) 無料(API代別)
動作場所 ターミナル(CLI) VSCode ベース IDE ターミナル(CLI)
採用モデル Claude 3.5/3.7/4.x Sonnet GPT-4o / Claude 3.5 GPT/Claude 選択可
コンテキスト プロジェクト全体 ファイル単位 +@指定 git diff + /add で指定
自律性 高(エージェント動作) 中(提案ベース) 中(commit 単位)

俺は今、4本の SaaS を一人で本番運用してる。全部のプロセスで3ツールを使ってきた。その上での比較だ。


Claude Code の実態

開発フロー

Claude Code の核心は、CLAUDE.md でプロジェクトの文脈を渡すことだ。これを置いておくだけで、次のセッションでも文脈が引き継がれる。

# プロジェクト:不動産向け動画 SaaS

## スタック
- Next.js 15 (App Router)
- Supabase (PostgreSQL + Auth + Storage)
- Stripe (Subscription)
- Vercel (Deploy)

## DB テーブル
users / properties / videos / subscriptions / tenants

## コーディングルール
- Server Actions を使う(API routes は webhook のみ)
- エラーは console.error + Sentry 送信
- env は lib/env.ts で一元管理
- 型は /types/database.ts の Database 型から生成

「Stripe の webhook 処理を追加して」と言えば、CLAUDE.md を読んで既存の書き方に合わせてくれる:

// app/api/webhooks/stripe/route.ts
import { NextRequest, NextResponse } from 'next/server'
import Stripe from 'stripe'
import { stripe } from '@/lib/stripe'
import { createClient } from '@/lib/supabase/server'

export async function POST(req: NextRequest) {
  const body = await req.text()
  const sig = req.headers.get('stripe-signature')!

  let event: Stripe.Event
  try {
    event = stripe.webhooks.constructEvent(
      body,
      sig,
      process.env.STRIPE_WEBHOOK_SECRET!
    )
  } catch (err) {
    return NextResponse.json({ error: 'Webhook Error' }, { status: 400 })
  }

  const supabase = await createClient()

  switch (event.type) {
    case 'customer.subscription.created':
    case 'customer.subscription.updated': {
      const sub = event.data.object as Stripe.Subscription
      await supabase
        .from('subscriptions')
        .upsert({
          stripe_subscription_id: sub.id,
          stripe_customer_id: sub.customer as string,
          status: sub.status,
          current_period_end: new Date(sub.current_period_end * 1000).toISOString()
        })
      break
    }
    case 'invoice.payment_failed': {
      const invoice = event.data.object as Stripe.Invoice
      await supabase
        .from('subscriptions')
        .update({ status: 'past_due' })
        .eq('stripe_customer_id', invoice.customer as string)
      break
    }
  }

  return NextResponse.json({ received: true })
}

lib/supabase/server の書き方、subscriptions テーブルの列名、全部プロジェクト内のファイルを読んで合わせてくれた。俺が指定したのはゼロだ。

よくなかった点

コストが読めない。Max プランは月$20で使い放題だが、API 従量課金なら1日$10超えることもある。あとは「自信満々に古い仕様を書く」問題が残ってる。新しいライブラリの最新 API を知らないことがあるので、必ずレビューは必要だ。

向いてるシーン: 新機能の一気実装、ゼロから骨格を作る、リファクタリング


Cursor の実態

補完とチャットは優秀

既存コードへの補完は Cursor が一番快適だった。Tab を押すたびに次の行を先読みしてくれる感覚は確かにある。

小さい修正なら Cursor が速い:

// 既存コード(型が甘かった)
const { data } = await supabase.from('users').select('*').eq('id', userId).single()

// Cursor に「型を厳密にして」と言うだけで
const { data, error } = await supabase
  .from('users')
  .select('id, email, name, plan, created_at')
  .eq('id', userId)
  .single<Pick<Database['public']['Tables']['users']['Row'],
    'id' | 'email' | 'name' | 'plan' | 'created_at'
  >>()
if (error) throw error

こういう単一ファイル内の修正は体感的に Cursor が速い。

複数ファイルにまたがると崩れる

プロジェクト全体の把握が弱い。「Stripe の customer_id を users テーブルに追加して、webhook でも使うようにして」だとこうなる:

# Cursor でのやり取り(実際に近い)
You: stripe_customer_id を users に追加して webhook でも使うようにして
Cursor: どのファイルを参照しますか?@で指定してください
You: @lib/stripe @types/database.ts @app/api/webhooks/stripe
Cursor: migration ファイルはどこに置きますか?
You: supabase/migrations/
Cursor: (migration 作成) 他に変更が必要なファイルはありますか?
You: ...(自分でやる)

大きなタスクで俺がコンテキストを渡す係になると、それだけで20〜30分飛ぶ。

向いてるシーン: 既存コードの部分修正、細かいバグ修正、補完ベースの日常作業


Aider の実態

git との相性は本物

変更ごとに自動 commit が作られるのは本当に良かった。「ここまで戻れる」が明確になる。

# Aider のセッション例
$ aider --model claude-3-5-sonnet-20241022

/add app/api/webhooks/stripe/route.ts lib/stripe.ts types/database.ts

> stripe_customer_id を users に追加して、webhook で upsert するコードを書いて

# 変更後に自動で commit
Commit 9f3c1a2 feat: add stripe_customer_id to users and webhook upsert

無料(API 代だけ)で始められるのも強い。初めて AI コーディングを試すなら Aider が一番入りやすい。

自律性の低さが限界

複雑なタスクで詰まったとき、Aider は止まる。Claude Code はエラーが出たら自分でデバッグして再試行する。Aider は「どうしますか?」と聞いてくる。一人で4本を動かしてると、この差が毎日出てくる。

あとはセッションをまたぐとコンテキストがリセットされる。/add でファイルを追加し直すところから始まる。

向いてるシーン: 単発の修正タスク、AI コーディングの最初のステップ


各ツールで踏んだ地雷(実体験)

俺が実際に踏んだやつだけ書く。

Claude Code の地雷

  • .env.local の値を推測でコードにハードコードしようとした(secret が git に入りかけた)
  • 「テストを実行して確認しました」と報告してきたが、テストが実際には走ってなかった(2回経験)
  • 新しいライブラリの最新 API を知らないことがある。バージョンを指定した上で「公式 README を見て」と言う必要がある

Cursor の地雷

  • .cursorrules に書いた内容を長いタスクの途中で無視する(大きな Composer タスクで特に起きる)
  • 複数ファイルを Composer で変更したとき、Apply 後に古いコードが残ることがあった
  • Tab 補完が長いコメントを誤認識して、コメントごと消すことがあった

Aider の地雷

  • /add で追加してないファイルを推測で修正することがある(意図しない変更が git に入る)
  • --model を指定しないと古いデフォルトモデルになる
  • セッション中のコンテキストが長くなると、前半の指示を忘れる

俺が Claude Code に全振りした理由

3つだけ書く。

1. 「やっといて」が通じる

俺のスタイルは「大きな仕様だけ決めて、実装は任せる」だ。Claude Code はこれが通じる。Cursor は「どこを修正しますか?」、Aider は「どのファイルを追加しますか?」と聞いてくる。聞いてくるだけで俺の集中が切れる。

2. 4本同時運用でコンテキスト管理が消える

CLAUDE.md をプロジェクトに置いておけば、セッションをまたいでも文脈が引き継がれる。Cursor はプロジェクト切り替えのたびに @ファイル名 でコンテキストを渡し直す必要があった。これが1日10回あると、地味に時間を食う。

3. コスト計算が合った

ツール 月額の目安
Claude Code Max $20 + API $15-30
Cursor Pro $20
Aider 無料 + API $10-20

Claude Code は一番高い。でも時給換算で考えると、1時間の作業が20分に短縮されるなら、$30の追加コストは安い。実装速度が上がった分、「俺の時間」のコストが下がる。


使い分けの結論

シーン 推奨
ゼロから機能実装 Claude Code
既存コードの部分修正 Cursor
AI コーディングを初めて試す Aider
予算ゼロ Aider
一人で本番複数プロダクト運用 Claude Code
チームで既存 VSCode workflow を維持 Cursor

Cursor が向く人は存在する。チームで開発して、既存の VSCode 環境を維持したい場合、Cursor は自然に入ってくる。俺の条件だと Claude Code 一択になった。

「どれが最強か」より「どれが自分の用途に合うか」。

Cursor を6ヶ月使ってた俺が言う。乗り換えて後悔してない。でも「全員が Claude Code に乗り換えるべき」とも思ってない。1週間だけ試してみると、自分の答えが出る。

──

俺が運営してるプロダクト

🎬 VideoTracker — 不動産業者向け動画自動生成 SaaS
動画1本¥596。問合せ倍率の想定値はシミュレーションで2.8倍(実測は検証中)。
https://komugi-ai.jp/realestate

🤖 Mint Agent — Slack で @AI に話しかけて業務代行(近日リリース)
議事録投稿・メール返信・データ集計が Slack 内で完結
→ ベータ Waitlist:https://agent.komugi-ai.jp

🏭 Forge — 企業向け AI 実装・運用ファーム
構築 → 評価 → 運用まで一気通貫で請け負う
https://forge.komugi-ai.jp

業務効率化・SaaS 開発相談 → X DM @mintnekoneko0
過去記事まとめ:https://note.com/mintototo1

#claudecode #cursor #個人開発 #AIコーディング #SaaS

明日からコピペで使えるチェックリスト:Cursor → Claude Code 移行

移行前準備

  • Cursor の .cursorrules をすべて Claude Code の CLAUDE.md に移植
  • Cursor の MCP server 設定を ~/.claude/settings.json に書き写す
  • よく使ってた拡張機能を整理(Claude Code でできることは全部 Skill に書く)
  • 月額 $20 ($60 になる月もある) の課金状況を計算(Anthropic Max は使い放題)

Claude Code セットアップ

  • npm install -g @anthropic-ai/claude-code
  • claude で起動 → ログイン → API plan or Max plan を選択
  • --dangerously-skip-permissions フラグの存在を覚える(諸刃の剣)
  • Shift+Tab でモード切替(編集を承認 / プランモード / 自動モード)

CLAUDE.md の書き方

  • プロジェクトルートに CLAUDE.md を置くと毎セッション読まれる
  • やってほしくない事を列挙(「コメント追加するな」「型注釈追加するな」等)
  • コーディング規約を箇条書き(lint 設定 / フォーマッタ / 命名)
  • API key やシークレットの場所を明記(誤って読み書きされるのを防ぐ)

落とし穴

  • 5 時間制限(Max plan)はリセット時刻が UTC 基準、JST 換算注意
  • 並列セッション数は plan により制限あり
  • 「自信満々に古い API を書く」癖が残ってるのでレビュー必須
  • context window が伸びても 長すぎる context は精度が落ちる(適宜 /compact

Cursor を残す価値があるケース

  • チームで使う(Claude Code は個人最適)
  • AI なしで普段使いの IDE が必要
  • 既存プラグインエコシステムに依存してる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?