Cursor Composer 完全ガイド:複数ファイル編集テクニックと実践事例

正直なところ、私は Cursor を3ヶ月使ってようやく、自分がそれを「無駄遣い」していたことに気づきました。
以前は機能を修正する際、コンポーネント、API、型定義、テスト、設定の5つのファイルを修正する必要がありました。私は Chat で一つずつ質問し、コードを一つずつコピー&ペーストしていました。マウスでファイルを行き来し、指は Cmd+C と Cmd+V の間で反復横跳び。疲れました。
ある日、通りかかった同僚が私の操作を見て、画面を3秒見つめて言いました。「なんで Composer を使わないの?」
「え?」
「Cmd+I のあのフローティングウィンドウだよ。一言で要件を伝えれば、AI が修正すべきファイルを自動識別して、全部直してくれるよ。」
私は呆然としました。
彼は実演してくれました。Composer を開き、関連ファイルをいくつか @ で引用し、「このユーザーログインロジックをメール認証対応に変更して」と入力して Enter。AI は数秒考え、コンポーネント、API、型定義を一気に修正しました。10分で完了です。
私は以前、1時間かけていました。
その瞬間、この3ヶ月間 Cursor の能力の20%しか使っていなかったことに気づきました。フェラーリに乗って1速だけで走っていたようなものです。
Composer とは?なぜ必要なのか
Composer vs Chat の本質的な違い
例え話をしましょう。
Chat は隣に座って質問に答えてくれる AI アドバイザーのようなものです。「このコードをどう最適化する?」と聞けば提案をくれますが、実際に修正するのはあなたです。
Composer は AI 施工業者です。「このビルの窓をすべて掃き出し窓に変えて」と言えば、直接作業を行い、終わったら「完了しました、確認してください」と言います。
これが本質的な違いです。一方はアドバイザー、もう一方は施工業者です。
具体的な比較は以下の表をご覧ください:
| 側面 | Chat | Composer |
|---|---|---|
| 位置づけ | AI アドバイザー(Q&Aアシスタント) | AI 施工業者(コード生成器) |
| 起動方法 | Cmd/Ctrl + L | Cmd/Ctrl + I |
| インターフェース | サイドバー | フローティングウィンドウ |
| 理解範囲 | 現在のファイル | プロジェクト全体の複数ファイル |
| 適用方法 | 手動コピーまたは Apply | ファイルへ自動適用 |
| 推奨モデル | GPT-4o, DeepSeek | Claude 3.7 Sonnet |
| 適したタスク | Q&A、学習、単一ファイルデバッグ | ファイル間機能、リファクタリング、一括修正 |
| 対話履歴 | サイドバーに保存 | ⚠️ 保存されない(リロードで消える) |
| トークン消費 | 少 | 多 |
「対話履歴が保存されない」のを見ましたか?これは私が踏んだ最大の落とし穴です。後ほど回避方法を詳しく解説します。
Composer の3つの核心能力
能力 1:ファイル間の理解
Chat は現在開いているファイルしか見えませんが、Composer はプロジェクト全体を見ることができます。
例えば、「ユーザーログイン機能を追加して」と言うと、Chat は「具体的にどのファイルを修正しますか?」と聞きますが、Composer は直接「以下の5つのファイルを修正する必要があります:Login.tsx, auth.ts, user.types.ts, api/auth.ts, App.tsx」と教えてくれます。
コンポーネント、型定義、API、ルーティングがどこにあるかを知っており、すべて修正してくれます。
能力 2:プロジェクトレベルの修正
Chat でコードを修正する場合、手動でコピー&ペーストする必要があります。Composer は修正後、直接ファイルに適用し、あなたは Accept または Reject をクリックするだけです。
この違いは、Chat がリフォームの図面を渡すだけなのに対し、Composer はリフォームを完了させて検収を求めるようなものです。
能力 3:インテリジェントな推論(Agent モード)
Agent モードを有効にすると、Composer は以下のことができます:
- シェルコマンドの実行(例:
npm install,git status) - コードベース全体の検索(特定の関数を使用している箇所をすべて洗い出す)
- 依存関係の自律分析
- ファイルの作成または削除
Agent モードは施工業者に現場監督をつけるようなもので、自分で判断し、道具を探せます。しかし、「過剰な施工」もしやすいため、制御方法を後述します。
Composer を使うべき3つのシーン
シーン 1:新機能開発(複数ファイルに関わる)
要件:コメント機能の追加。
Chat のやり方:
- Chat に修正すべきファイルを聞く
- Chat が5つのファイルをリストアップ
- ファイルを一つずつ開く
- Chat で「Comments コンポーネントを書いて」と頼む
- コードをコピーしてファイルに貼り付け
- 「コメント API を書いて」と頼む
- コピー、貼り付け
- これを5回繰り返す
死ぬほど疲れます。
Composer のやり方:
- Composer を開く(Cmd+I)
- 「コメント機能を追加して。ユーザーはコメントの投稿、削除、閲覧が可能」と入力
- Enter
- AI が修正すべきファイルを自動識別し、すべて修正
- diff をチェックして Accept をクリック
10分で完了です。
シーン 2:コードリファクタリング
要件:状態管理を Redux から Zustand に移行する。
Chat のやり方:ほぼ不可能です。20以上のファイルが関係し、手動修正は見落としやミスが起きやすいです。
Composer のやり方:
@src/store
@src/components
Redux store を Zustand に移行してください:
1. 既存の state 構造を維持
2. API を変更しない
3. redux 依存関係を削除Agent モードをオンにすれば、AI が依存関係を分析し、ファイルを修正し、動作テストまで行います。20分で完了です。
シーン 3:一括修正
要件:エラー処理方法を統一し、すべての API 呼び出しに try-catch を追加する。
Chat のやり方:一つずつファイルを修正しますが、見落としやすく、どこまで修正したか覚えておく必要があります。
Composer のやり方:
@src/api
すべての API 呼び出しに統一されたエラー処理を追加してください:
- try-catch でラップする
- エラーメッセージ形式を統一する
- エラーログを記録する一度に15ファイルを処理できます。
Composer vs Chat:5秒意思決定法
Composer と Chat の違いは分かりましたが、実際にコードを書くときに「Cmd+L を押すべきか、Cmd+I を押すべきか?」と迷うことがあります。
3ステップで判断し、5秒で決めるフローを紹介します。
意思決定フロー
ステップ 1:いくつのファイルが関わるか?
- 1ファイル → 判断継続
- 2ファイル以上 → Composer
これだけです。ファイル間なら Composer です。
ステップ 2:質問か、コード修正か?
- 質問(学習、理解、デバッグ)→ Chat
- コード修正(生成、変更、リファクタリング)→ Composer
Chat はアドバイザー、Composer は施工業者。覚えましたか?
ステップ 3:修正範囲は大きいか?
- 小規模修正(数行のコード)→ Chat + Cmd+K
- 大規模修正(モジュール全体)→ Composer
単なる変数名の変更やコメント追加なら、Cmd+K で十分です。Composer を動かすまでもありません。
Chat に適した4つのシーン
シーン 1:クイック Q&A
あなた:「このコードにバグはある?」
Chat:「はい、12行目で配列外参照しています」即答です。コード修正は不要で、確認したいだけ。Chat が最適です。
シーン 2:学習と理解
あなた:「このアルゴリズムの原理を説明して」
Chat:「これはクイックソートです。核心となる考え方は...」新しい知識を学ぶのは Chat の得意分野です。丁寧に説明し、例も挙げてくれます。
シーン 3:単一ファイルデバッグ
あなた:「この関数を最適化して」
Chat:「memoization を使って結果をキャッシュできます...」自分で修正すればいいので、Composer の全自動機能は不要です。
シーン 4:コードレビュー
あなた:「ここに潜在的な問題はある?」
Chat:「15行目で null を処理していません。28行目にメモリリークのリスクがあります...」コードレビューにおいて、Chat は多くの問題を見つけてくれます。
Composer に適した4つのシーン
シーン 1:新機能開発
複数ファイルにまたがる機能実装。前述の通りです。
シーン 2:コードリファクタリング
広範囲の構造調整。例えば:
- 大きなファイルの分割
- 小さなファイルの統合
- ディレクトリ構造の再編成
- 命名規則の統一
これらのタスクは Chat では到底できません。
シーン 3:依存関係の移行
ライブラリやフレームワークの置換。例えば:
- axios → fetch
- moment.js → dayjs
- styled-components → Tailwind CSS
- Redux → Zustand
数十ファイルに関わるため、Composer の独壇場です。
シーン 4:一括修正
複数の類似コードの統一修正。例えば:
- すべての console.log を logger に変更
- すべての var を const に変更
- すべてのクラスコンポーネントを関数コンポーネントに変更
3つの比較事例
事例 1:API 呼び出し方法の変更
タスク:すべての axios を fetch に変更する。
関与ファイル:15個。
Chat:ファイルごとの操作が必要で、見落としやすい。修正箇所を覚えておくのが大変。
Composer:一本の指令 @src/api すべての axios を fetch に変更 で、AI が一括修正し、diff を確認するだけ。
結論:Composer
事例 2:関数のデバッグ
タスク:合計価格計算関数のバグを見つける。
関与ファイル:1個。
Chat:コードを貼れば即答。「12行目の税率計算が間違っています。total * 0.1 にすべきです」。
Composer:Composer を開いて、分析を待って、修正を待って、適用を待って…重すぎます。時間の無駄。
結論:Chat
事例 3:ユーザー権限システムの追加
タスク:RBAC 権限管理の実装。
関与ファイル:10個以上(コンポーネント、ミドルウェア、データベース、API)。
Chat:ほぼ不可能。Chat で一つずつ聞き、一つずつ修正し、論理的一貫性を自分で保証しなければなりません。
Composer(Agent モード):AI が全体アーキテクチャを理解した後、自動的にミドルウェアを作成し、API を修正し、コンポーネントを更新し、権限チェックを追加します。「ロールベースの権限システムを実装して。管理者は CRUD 可能、一般ユーザーは閲覧のみ」と伝えるだけです。
結論:Composer(Agent)
Composer の正しい始め方
初回設定(3ステップ)
Cursor をインストールしたら、すぐに Composer を使わず、まずは設定しましょう。
ステップ 1:モデルの選択
Composer では Claude 3.7 Sonnet の使用を推奨します。
理由は?
- 推論能力が高い:複雑な複数ファイルの関係を理解できる
- エラー率が低い:コードの修正ミスが少ない
- 複数ファイル理解が優秀:一緒に修正すべきファイルが分かる
決して o1 や o1-mini を使わないでください。Composer 機能をサポートしていません。Cursor が勝手に他のモデルに切り替えてしまい、期待通りの結果になりません。
ステップ 2:Agent モードの有効化(任意)
設定を開く:Cursor Settings → Beta → Agent。
有効にすると、Composer は以下のことができます:
- シェルコマンド実行(
npm install,git status) - コードベース検索(Cmd+Enter、特定関数の使用箇所を全検索)
- ファイル作成/削除
- プロジェクト構造の自律分析
Agent モードは AI に道具箱を持たせるようなもので、自分で作業できます。しかし「過剰施工」もしやすいため、後で制御方法を説明します。
ステップ 3:料金ルールの理解
- 無料版:Composer 機能に制限あり、1日数回のリクエスト
- Pro 版:月500回の premium リクエスト、十分使えます
- Business 版:無制限
ヘビーユーザーなら Pro 版を推奨します。私自身 Pro を使っていて、月300-400回程度利用します。
インターフェース構成の解説
Composer の画面は以下のようになっています:
┌─────────────────────────────────┐
│ Composer [Normal] [Agent] │ ← モード切替
├─────────────────────────────────┤
│ 📝 入力ボックス(要件記述) │
│ @ ファイル/フォルダ/コード引用 │
├─────────────────────────────────┤
│ 💬 対話履歴 │
│ 📄 ファイル diff プレビュー │
│ ✅ Accept ❌ Reject │
└─────────────────────────────────┘右上で Normal と Agent モードを切り替えられます。
下の diff プレビューは重要です。各ファイルがどう変わったか確認できます。絶対に直接 Accept All しないでください。この落とし穴については後述します。
@ 引用機能の活用
@ 記号は Composer の核心機能です。様々なものを引用できます。
@Files:特定ファイルの引用
@src/components/Header.tsx
このコンポーネントをレスポンシブデザインに変更してAI はこの1ファイルだけを修正すべきと知り、他をいじりません。
@Folders:フォルダ全体の引用
@src/utils
このユーティリティライブラリをリファクタリングし、機能別にファイルを分割してAI はこのフォルダ以下の全ファイルを読み、全体構造を理解した上でリファクタリングします。
@Code:コードブロックの引用
コードを選択してから Cmd+I を押すと、自動的に引用されます:
@[選択された関数コード]
この関数のパフォーマンスを最適化して局所的な最適化に最適です。
@Web:Web コンテンツの引用
@https://docs.react.dev/reference/react/useEffect
React 公式ドキュメントのベストプラクティスに従い、この effect をリファクタリングしてAI はウェブページを読み、ドキュメントに従って修正します。私はよくこの機能を使い、公式ドキュメント通りにコードを修正させることでミスを防いでいます。
@Docs:プロジェクトドキュメントの引用
@README.md
ドキュメントの説明に従って、この機能を実装してプロジェクトに仕様書がある場合、@ で引用すれば AI は仕様に従います。
@Codebase:コードベース全体の検索
Cmd+Enter を押し、入力します:
localStorage を使用している箇所をすべて見つけ、IndexedDB に変更してAgent モードでは、AI がプロジェクト全体を検索し、関連コードを見つけ出して一括修正します。
Normal vs Agent モード
2つのモードの違いは何でしょうか?
Normal モード:
- 明確なタスクに適している
- AI は指定されたファイルのみ修正する
- 制御しやすく、予期せぬファイル変更がない
- 速度が速い
- トークン消費が少ない
Agent モード:
- 複雑で推論が必要なタスクに適している
- AI が自律的にコード検索、コマンド実行、ファイル作成を行える
- スマートだが、予想外の変更をする可能性がある
- 速度が遅い
- トークン消費が多い
選択のアドバイス:
単純タスク → Normal。例:「コンポーネントのスタイル変更」「エラー処理の追加」。
複雑なリファクタリング → Agent。例:「Redux から Zustand への移行」「権限システムの実装」。
不確かな場合 → まず Normal を試し、ダメなら Agent。
私自身、時間の80%は Normal、20%は Agent を使います。Normal で十分なことが多く、Agent は重すぎます。
複数ファイル編集の5つの黄金律
ここが重要です。多くの失敗を経て、5つのルールをまとめました。これに従えば、90%の問題を回避できます。
ルール 1:タスクの分割
❌ 悪い例:
"プロジェクト全体をリファクタリングして、TypeScript に変更し、パフォーマンスを最適化し、テストを追加して"この指令では Composer は混乱します。どこから始めるべきか、順序はどうするか分かりません。結果、修正は支離滅裂になり、ロールバックに2時間費やすことになります。
✅ 正しいやり方:
4回の対話に分けます:
1回目:"src/utils ディレクトリの全ファイルを TypeScript に変更して"
2回目:"utils に単体テストを追加して"
3回目:"Header コンポーネントのパフォーマンスを最適化して"
4回目:"API 呼び出しロジックをリファクタリングし、エラー処理を統一して"小さな目標を達成するたびに git commit します。明確で、制御可能で、ロールバックも容易です。
なぜ分割すべきか?
- AI の理解のズレを防ぐ(一度に言いすぎると要点を見失う)
- 個別レビューが容易(diff が小さく、問題を見つけやすい)
- エラー時のロールバックが容易(そのステップだけ戻せばよい)
- トークン消費を抑える(タスクが小さく、思考時間が短く、安く済む)
私の経験では、1回の Composer 対話で関わるファイルは10個以内にすべきです。超える場合は分割します。
ルール 2:範囲の明確化
@ 引用を使ってファイル範囲を明確にします。
例えばユーザー関連機能を修正する場合:
@src/components/User
@src/types/user.ts
@src/api/user.ts
ユーザー関連の API を RESTful から GraphQL に変更してこれで AI は「この3箇所だけ修正し、他は触らない」と理解します。
範囲を明確にしないと?AI が勝手に他のファイルを修正する可能性があります。例えば「API 呼び出し方法を統一して」と言うと、AI がサードパーティライブラリの API まで修正し、プロジェクトが壊れることがあります。
メリット:
- AI が他ファイルを誤修正しない
- 変更が制御可能
- 予期せぬ事態が減る
私は Composer を使う際、最初の一歩として必ず関連ファイルを @ 引用する習慣をつけています。
ルール 3:個別レビュー
Composer の修正後、絶対に直接 Accept All をクリックしないでください。
Accept All は魅力的です。AI が20ファイルを修正し、ワンクリックで適用完了するのは気持ちいいです。
しかし…
実際の失敗談:
一度、Composer に「すべての console.log をカスタム logger に置き換えて」と頼みました。
Composer は30ファイルを修正しました。
私は見もせずに Accept All しました。
結果:
- サードパーティライブラリの console.log まで削除された
- 重要なデバッグコードも誤って削除された
- プロジェクトが動かなくなった
ロールバック、調査、手動修正に1時間かかりました。
正しいフロー:
1. 各ファイルの diff プレビューをクリック
2. 変更内容を一行ずつチェック
3. 問題なければ個別に Accept
4. 問題があれば即座に Reject し、要件を再記述はい、時間はかかります。20ファイルの修正なら20回の diff 確認が必要です。しかし、これで90%の事故を防げます。
現在の私の習慣:Composer 完了後、コーヒーを淹れて、座ってゆっくりレビューします。焦りは禁物です。
ルール 4:こまめなコミット
小さなタスクを完了するたびに、即座に git commit します。
# Composer での修正完了後
git add .
git commit -m "feat: ユーザー API を GraphQL に移行"なぜ重要か?
Composer の対話履歴は保存されません。ページをリロードすると消えます。
もし10ファイルを修正して commit せず、ページが固まって対話が消えたら…何を修正したか、どこまで進んだか分からなくなります。最初からやり直しです。
しかし各ステップで commit していれば:
- 問題が起きても簡単にロールバック可能(
git reset --hard HEAD) - 各変更を追跡可能(
git logで変更履歴が見える) - Composer の対話が消えても怖くない(コードは保存済み)
私のリズム:Composer 完了 → diff レビュー → Accept → git commit。これを筋肉反射レベルで定着させましょう。
ルール 5:コンテキストの維持
問題:
Composer は対話履歴を保存しません。ページをリロードすると以前の対話は消えます。
「さっきのリファクタリングの続きをして」と言っても、AI は「何のリファクタリング?何の話か分かりません」と答えます。
解決策:
案 1:重要な対話はスクショ保存
複雑なタスクの開始前に、Composer の指令をスクショしておきます。途中で回線が切れても、スクショを見て何をしようとしていたか思い出せます。
案 2:複雑なタスクは Chat で計画し、Composer で実行
Chat の対話履歴は保存されます。Chat で AI と案を議論し、確定してから Composer で実行します。
例えば:
Chat 対話:
あなた:「axios を fetch に移行したい、注意点は?」
AI:「エラー処理、インターセプト、型定義に注意が必要です...」
あなた:「よし、移行計画を書いて」
AI:「ステップ1... ステップ2... ステップ3...」そして計画に従い、一歩ずつ Composer で実行します。Chat の計画は残っているので、Composer が消えても大丈夫です。
案 3:プロジェクトの README に変更意図を記録
README に「リファクタリング記録」セクションを設けます:
## 2026-01-10 リファクタリング記録
- タスク:axios から fetch への移行
- Composer 指令:"すべての axios 呼び出しをネイティブ fetch API に変更し、同じエラー処理ロジックを維持する"
- 関与ファイル:src/api/*.ts
- 結果:15ファイルの移行完了後でプロジェクトを見返したとき、なぜそう修正したかが分かります。
Composer の7つのよくある落とし穴と回避ガイド
私が踏んだすべての落とし穴をリストアップします。これを避ければ大丈夫です。
落とし穴 1:対話履歴が保存されない
問題:
Composer の対話はリロードで消えます。
修正途中でページが固まったり、タブを誤って閉じたり、Cursor がクラッシュしたら…以前の対話は全滅です。
回避策:
✅ 重要指令はスクショ保存(スマホ撮影でも可)
✅ Chat で先に計画し、思考を記録
✅ git commit message で毎回修正意図を記録
✅ 複雑なタスクは複数回の小さな対話に分割(1回10ファイル以内)
落とし穴 2:ファイル更新の中断
問題:
Composer が修正途中で固まる。
ネットワークの揺らぎ、AI サービスの不調、PC ファンの騒音(冗談です)などが原因です。
結果:一部のファイルは修正され、一部は未修正。プロジェクトは半端な状態になります。
回避策:
✅ 修正前に git commit(問題あれば即ロールバック)
✅ ネットワーク安定性の確認(Composer は回線要求が高い、VPN 不安定なら使わない)
✅ タスクを小さく分割(ファイル数が少なければ更新も速く、中断しにくい)
✅ git diff で実際の変更を確認(どのファイルが本当に変わったか見る)
私は更新中断に2回遭遇しました。1回目は commit しておらず、手動修復に2時間。2回目は commit 済みで、git reset 一秒で解決しました。
落とし穴 3:モデルの自動切り替わり
問題:
一部のモデル(o1 など)は Composer をサポートしていません。
o1 を選んだつもりが、Cursor が自動的に他モデルに切り替えていることがあります。o1 を使っていると思っていても、実際は GPT-4o だったりして、結果が期待外れになります。
回避策:
✅ Claude 3.7 Sonnet 固定で使用(Composer のベストパートナー)
✅ 右上のモデル名を確認(選んだつもりにならない)
✅ Cursor Settings でデフォルトモデルを設定
私は今 Claude 3.7 Sonnet しか使いません。安定していて信頼でき、エラー率が低いです。
落とし穴 4:コンテキストの消失
問題:
Composer で連続対話する場合:
1回目:「ユーザー API を GraphQL に変更して」
2回目:「続けて、コメント API も変更して」結果、AI が「ユーザー API って何?何の話?」となることがあります。
コンテキストが失われています。
回避策:
✅ 毎回関連ファイルを再度 @ 引用する
✅ 「前回の変更に基づいて、続けて…」と明確に記述する
✅ 必要なら新規対話を開始し、再度背景を説明する
現在の私の習慣:毎回が初対面だと思って、背景をしっかり説明します。
落とし穴 5:ファイル検索の失敗
問題:
Cmd+Enter で引用し、「@Codebase axios を使っている箇所をすべて見つけて」と入力。
AI が「見つかりませんでした」と言う。
しかし実際には15個のファイルで使われている。
回避策:
✅ @Files でファイルを明確に指定(検索に頼らない)
✅ .cursorrules と .gitignore を確認(特定ファイルが無視されていないか)
✅ 大規模プロジェクトではモジュールごとにタスク分割(AI に全プロジェクトを検索させない)
@Codebase 検索は大規模プロジェクトではあまり当てになりません。私は @Files で明確に指定するようにしています。
落とし穴 6:Agent モードの暴走
問題:
Agent モードをオンにしたら、AI が勝手に:
- 不要なファイルを作成した
- 重要だと思っていたコードを削除した
- 予想以上に改変した
例えば「ユーザーモジュールをリファクタリングして」と言ったら、AI が src/user ディレクトリごと削除して作り直した、など。
回避策:
✅ 複雑なタスクはまず Normal モードで試す
✅ Agent モードは明確なリファクタリングタスク(依存関係移行など)に適している
✅ diff を逐一確認し、不合理な変更は即座に Reject
Agent モードは強力ですが危険も伴います。私は(依存関係移行のような)非常に明確なタスクでのみ使用します。
落とし穴 7:ディスク容量不足
問題:
Composer は一時ファイルを作成します。
ディスク容量不足だと更新に失敗します。修正途中で「ディスク容量不足」エラーが出ます。
回避策:
✅ node_modules, dist 等の一時ディレクトリを定期的にクリーンアップ
✅ 5GB以上の空き容量を確保
✅ df -h でディスク使用率を確認
この罠は1回しか踏んでいませんが、非常に隠蔽されていました。エラーメッセージが不明瞭で、原因判明まで半日かかりました。
実戦事例:axios から fetch API への移行
理論は十分です。実戦事例を見てみましょう。
事例背景:
- プロジェクト:Next.js ブログシステム
- タスク:すべての axios 呼び出しをネイティブ fetch API に変更
- 関与ファイル:15個の API ファイル
- 予想時間:手動なら2時間、Composer なら20分
Composer を使ってこのタスクを完遂するステップを実演します。
ステップ 1:Chat で計画
Composer を開く前に、Chat で AI と議論します。
私:プロジェクトの axios をすべて fetch API に置き換えたいです。注意点は?
Chat:
1. fetch のエラー処理は axios と異なり、response.ok を手動チェックする必要があります
2. fetch はデフォルトで 4xx/5xx を reject しないため、追加処理が必要です
3. Content-Type を手動設定する必要があります
4. リクエストインターセプターはカスタム関数で実装する必要があります
まず fetchWrapper ユーティリティ関数を作成することを推奨します。なるほど。Chat が方針をくれました。まずユーティリティ関数を書き、それから一括置換します。
ステップ 2:fetchWrapper ツールの作成
Cmd+I で Composer を開きます:
@src/utils
fetchWrapper.ts ファイルを作成し、axios に似た API ラッパーを実装してください:
- JSON の自動処理
- 統一されたエラー処理
- インターセプター対応
- 既存の axios 呼び出し方法との互換性Enter。
Composer が数秒考え、fetchWrapper.ts を作成しました。コードはなかなか良いです。
チェックしました:
- ✅ 型定義が完全
- ✅ エラー処理ロジックが正しい
- ✅ API 設計が合理的
Accept。
git commit -m "feat: add fetchWrapper utility"
ステップ 3:モジュールごとの移行
一度に15ファイル修正するのではなく、数回に分けます。
まず posts と comments モジュール:
@src/api/posts.ts
@src/api/comments.ts
@src/utils/fetchWrapper.ts
posts と comments の API 呼び出しを axios から fetchWrapper に変更してください。関数シグネチャとエラー処理ロジックは維持してください。Enter。
Composer が作業を開始。3つのファイルを修正しました。
ステップ 4:diff のレビュー
これが最も重要なステップです。
ファイルを一つずつチェックします:
posts.ts:
import axiosがimport { fetchWrapper }に変更 ✅axios.get()がfetchWrapper.get()に変更 ✅- エラー処理ロジックは維持 ✅
- 関数シグネチャ不変 ✅
Accept。
comments.ts:
- 同様の変更、問題なし ✅
Accept。
fetchWrapper.ts:
- 適切にインポートされている ✅
ステップ 5:テスト
npm run devブラウザを開き、posts と comments 機能をテスト:
- 記事リストのロード ✅
- 記事詳細の表示 ✅
- コメント投稿 ✅
- コメント削除 ✅
すべて正常。
git commit -m "feat: migrate posts and comments API to fetch"
ステップ 6:他モジュールの継続移行
ステップ3-5の手順で、残りを移行します:
- users モジュール
- auth モジュール
- settings モジュール
各モジュール修正完了ごとに、レビュー、テスト、commit。
25分ですべての15ファイルの移行が完了しました。
失敗体験
罠 1:Composer がサードパーティの axios も修正してしまった
最初は @Files で範囲を指定しなかったため、node_modules 内のコードまで修正されました。
解決:再度「src ディレクトリ下のコードのみ修正し、node_modules は変更しない」と記述。
罠 2:エラー処理ロジックの喪失
fetch のエラー処理が axios と違うため、単純置換で一部エラーが捕捉されなくなりました。
解決:指令で「同じエラー処理ロジックを維持し、手動で response.ok をチェックする」と明確化。
罠 3:型定義の欠如
TypeScript エラー発生。fetchWrapper の型定義が不完全でした。
解決:Chat で型定義を単独生成させ、Cmd+K で fetchWrapper.ts に適用。
最終成果
✅ 15ファイルすべての移行完了
✅ 全 API 機能正常
✅ 総所要時間:25分(デバッグ含む)
✅ コード review:問題なし
✅ パッケージサイズ削減:axios 30KB 分削除、原生 API 使用
手動なら2時間かかるところが、Composer なら25分。効率は5倍です。
経験のまとめ
- 複雑なタスクはまず Chat で計画する
- 段階的に実行し、各ステップ完了ごとに git commit する
- ファイル範囲を明確に指定する(@ 引用使用)
- diff を個別レビューし、意図しない変更を防ぐ
- テストしてから次に進む
この5つの経験はすべての Composer タスクに適用できます。覚えておいてください。
結論
正直なところ、Composer を使いこなしてから、開発効率は少なくとも3倍になりました。
以前は複数ファイルにまたがる機能を修正する際、複数のファイルを行き来し、コピー&ペーストし、ミスや見落としが多発していました。疲れました。
今は Composer の一指令で、AI が修正すべきファイルを自動識別し、すべて処理してくれます。私は diff をレビューして Accept するだけ。10分で終わります。
5つの核心原則を覚えてください:
多ファイルに関わる → Composer
ファイル間操作なら Chat は使わず、時間の無駄です。タスクは小さく → 一度に変えすぎない
1回の対話で10ファイル以内に。個別レビュー → 直接 Accept All しない
遅くても事故るよりマシです。こまめな提出 → 各ステップ完了で git commit
Composer の対話は保存されませんが、コードは保存すべきです。コンテキスト維持 → 重要対話はスクショ保存
スクショ、Chat 計画、README 記録の三段階防御。
覚えるべきショートカットは2つ:
- Cmd/Ctrl + L → Chat(質問用)
- Cmd/Ctrl + I → Composer(コード修正用)
5秒意思決定法:
いくつのファイル?
→ 1個 → 質問か修正か?
→ 質問 → Chat
→ 修正 → 修正規模は?
→ 小規模 → Chat + Cmd+K
→ 大規模 → Composer
→ 2個以上 → ComposerComposer を恐れないでください。
最初は「賢すぎて制御できない」と感じるかもしれません。
しかし何度か使えば、上記の法則に従う限り、Composer は非常に制御しやすく、使いやすいことが分かります。
行動提案:
今すぐ試してください:
- Cursor を開き、Cmd+I を押す
- 小さなタスクで練習する(「変数を一括リネーム」「コードスタイルの統一」など)
- この記事の5つの法則と7つの回避テクニックを保存する
- 今後、複数ファイルの修正が必要になったら、真っ先に Composer を思い出す
Chat ばかり使わないでください。
Composer こそが Cursor の核心能力です。
使えばその強力さが分かります。
Cursor Composer 複数ファイル編集完全フロー
Composer を使用した複数ファイル編集の完全な操作フロー。設定、実行、レビュー、コミットの詳細な手順を含む
⏱️ Estimated time: 30 min
- 1
Step1: 初回設定:モデル選択と Agent モード有効化
**モデル選択**:
• Claude 3.7 Sonnet 推奨(推論能力が高く、低エラー率、複数ファイル理解に優れる)
• o1 や o1-mini は避ける(Composer 機能非対応)
• Cursor Settings でデフォルトモデルを設定する
**Agent モード有効化**(任意):
• Cursor Settings → Beta → Agent を開く
• Agent モードの能力:シェルコマンド実行、コードベース検索、ファイル作成/削除、プロジェクト構造の自律分析
• 複雑なリファクタリングに適しているが、トークン消費が増える
**料金ルール**:
• 無料版:Composer 機能に制限あり
• Pro 版:月500回の premium リクエスト
• Business 版:無制限 - 2
Step2: タスク計画:Chat で事前に案を議論
**なぜ先に Chat を使うか**:
• Chat の対話履歴は保存されるが、Composer は保存されない
• Chat で十分議論し、確定してから Composer で実行できる
• Chat は注意すべき問題点を指摘してくれる
**計画例**:
あなた:「axios をすべて fetch API に置き換えたい、注意点は?」
Chat:「エラー処理、インターセプト、型定義に注意が必要です... fetchWrapper ユーティリティ関数の作成を推奨します」
**タスク分割原則**:
• 1回の Composer 対話で10ファイル以内にする
• モジュール別に分割(例:まず posts と comments、次に users と auth)
• 各小タスク完了ごとに git commit する - 3
Step3: Composer 起動と @ 引用による範囲明確化
**起動方法**:
• ショートカット:Cmd/Ctrl + I
• またはエディタ右上の Composer ボタンをクリック
**@ 引用タイプ**:
• @Files:特定ファイル引用(例:@src/components/Header.tsx)
• @Folders:フォルダ全体引用(例:@src/utils)
• @Code:コード選択後 Cmd+I で自動引用
• @Web:Web コンテンツ引用(例:@https://docs.react.dev)
• @Docs:プロジェクトドキュメント引用(例:@README.md)
• @Codebase:Cmd+Enter でコードベース全体検索
**範囲明確化例**:
@src/api/posts.ts
@src/api/comments.ts
@src/utils/fetchWrapper.ts
posts と comments の API 呼び出しを axios から fetchWrapper に変更し、関数シグネチャとエラー処理ロジックを維持してください。 - 4
Step4: diff の個別レビュー(核心ステップ)
**なぜ Accept All してはいけないか**:
• サードパーティライブラリを誤修正する可能性がある
• 重要なデバッグコードを削除する可能性がある
• 間違ったロジックを導入する可能性がある
**正しいレビューステップ**:
1. 各ファイルの diff プレビューをクリック
2. 変更内容を一行ずつチェック
3. 問題なければ個別に Accept
4. 問題があれば即座に Reject し、要件を再記述
**レビューのポイント**:
• インポート文は正しいか
• 関数呼び出しは正しいか
• エラー処理ロジックは維持されているか
• 型定義は完全か
• 予期せぬファイルが修正されていないか - 5
Step5: テストとこまめなコミット
**テストフロー**:
• 開発サーバー起動:npm run dev
• 関連機能が正常かテスト
• コンソールにエラーがないか確認
• ユニットテスト実行:npm test(ある場合)
**コミット規範**:
• 小タスク完了ごとに即座に git commit
• commit message に変更内容を明記
• 例:git commit -m "feat: migrate posts and comments API to fetch"
**なぜこまめなコミットが必要か**:
• Composer の対話履歴は保存されず、リロードで消える
• 問題発生時にロールバックしやすい(git reset --hard HEAD)
• 各変更を追跡しやすい(git log)
• Composer 対話が消えてもコードは保存されているため安心
FAQ
Composer と Chat、いつどちらを使うべきですか?
• 2ファイル以上に関わる → 直接 Composer
• 1ファイルのみ → 質問なら Chat、コード修正なら規模を見る(小規模は Chat + Cmd+K、大規模は Composer)
核心的な違い:
• Chat は AI アドバイザー(提案のみ、作業は自分)
• Composer は AI 施工業者(コードを直接修正・適用)
具体的シーン:
• Q&A、学習、コードレビュー → Chat
• 新機能開発、コードリファクタリング、一括修正 → Composer
Composer の対話履歴が保存されない場合、どうすればいいですか?
**案 1:重要対話のスクショ保存**
複雑なタスク開始前に Composer 指令をスクショ(スマホ撮影可)し、中断しても思い出せるようにする。
**案 2:先に Chat で計画し、Composer で実行**
Chat 履歴は保存されるため、Chat で案を固めてから Composer で実行する。Chat の計画が残るので Composer が消えても安心。
**案 3:プロジェクト README に変更意図を記録**
README に「リファクタリング記録」セクションを設け、タスク、Composer 指令、関与ファイル、結果を記録する。後で見返したときに修正理由が分かる。
なぜ Accept All をしてはいけないのですか?
Composer に「すべての console.log をカスタム logger に置換して」と頼み、30ファイルを修正させ、直接 Accept All した。
結果:
• サードパーティライブラリの console.log まで削除された
• デバッグコードが誤って削除された
• プロジェクトが起動しなくなった
正しい手順:
1. 各ファイルの diff プレビューをクリック
2. 変更を一行ずつチェック
3. 問題なければ個別に Accept
4. 問題があれば即座に Reject し、要件を再記述
時間はかかりますが、90%の事故を防げます。
Composer が途中で固まったり中断したりしたらどうしますか?
**修正前に git commit**(問題あれば即ロールバック)
**ネットワーク安定性確認**(Composer は回線要求が高い、VPN 不安定なら避ける)
**タスク分割**(1回のファイル数を減らすと更新が速く、中断しにくい)
中断時の対応:
1. git diff で実際の変更を確認(どのファイルが本当に変わったか)
2. 一部修正済みなら、手動で残りを補完
3. 不完全なら git reset --hard HEAD でロールバックし、やり直す
私は2回中断に遭遇しました:未コミット時は手動修復に2時間、コミット済み時は git reset 一秒で解決しました。
Agent モードはいつ使うべきですか?リスクはありますか?
• 複雑な依存関係の移行(Redux → Zustand など)
• ファイル作成/削除を伴うリファクタリング
• コードベース全体を検索する必要がある一括修正
**Agent モードのリスク**:
• 不要なファイルを勝手に作成する可能性
• 重要コードを勝手に削除する可能性
• 予想以上の変更を加える可能性
**使用アドバイス**:
• 単純タスクはまず Normal モードを試す
• 明確なリファクタリングタスク(依存移行など)でのみ Agent を使う
• diff を逐一レビューし、不合理な変更は即座に Reject する
• 私自身、80%は Normal、20%だけ Agent を使用します
Composer がサードパーティライブラリを誤修正しないようにするには?
悪い例:
"すべての axios を fetch に変えて"(範囲指定なし、node_modules も修正される恐れ)
良い例:
@src/api
src/api ディレクトリ下の axios 呼び出しのみ fetch に変更し、node_modules は変更しないでください
**.cursorrules と .gitignore の確認**:
node_modules, dist 等が正しく除外されているか確認
**diff の個別レビュー**:
node_modules が修正されているのを見つけたら、即座に Reject し、要件を再記述
Composer 修正後のコード品質はどう保証しますか?
1. **個別 diff レビュー**:各ファイルの変更が期待通りかチェック
2. **開発サーバー起動**:npm run dev で関連機能をテスト
3. **コンソール確認**:エラーや警告がないか確認
4. **テスト実行**:npm test(単体テストがある場合)
5. **Code Review**:チームプロジェクトなら PR を出し同僚にレビューしてもらう
**品質チェックポイント**:
• 型定義は完全か(TypeScript)
• エラー処理ロジックは正しいか
• 関数シグネチャは一貫しているか
• 遺漏ファイルはないか
• 予期せぬ副作用はないか
12 min read · 公開日: 2026年1月10日 · 更新日: 2026年2月4日
関連記事
AI コード生成のミスを減らす?この5つの Prompt テクニックで効率50%アップ

AI コード生成のミスを減らす?この5つの Prompt テクニックで効率50%アップ
Cursor 上級テクニック:開発効率を倍増させる10の実践的手法(2026年版)

Cursor 上級テクニック:開発効率を倍増させる10の実践的手法(2026年版)
Cursor バグ修正完全ガイド:エラー分析から解決策検証までの効率的ワークフロー


コメント
GitHubアカウントでログインしてコメントできます