大規模コードベースでの作業は、小規模プロジェクトでの作業とは異なる新たな課題をもたらします。Cursor自体のコードベースを拡張してきた経験と、大規模コードベースを管理する顧客からの洞察の両方から、複雑性の増大に対処するための有用なパターンを発見しました。 このガイドでは、大規模コードベースに有用であることがわかったこれらのテクニックのいくつかを説明します。

Chatを使用して馴染みのないコードを素早く理解する

大規模なコードベース、特に初めて触れるものをナビゲートするのは困難な場合があります。多くの場合、grep、検索、クリックを繰り返して、探している特定のコードベースの部分を見つけることになります。Chatを使用すると、質問を始めて探しているものを見つけ、その動作の詳細な説明を得ることができます。 ここでは、Cursorにおけるコードベースインデックスの実装詳細を見つけるためのヘルプを得て、理解しやすくするためのいくつかの例も求めています。
Cursorにコードベースの構造をより深く理解させるために、パフォーマンス向上のため設定からInclude Project Structureを有効にしてください。

ドメイン固有の知識に関するルールを書く

もしあなたのコードベースに新しい協力者をオンボーディングするとしたら、彼らが意味のある貢献を始められるようにするために、どのようなコンテキストを提供しますか? この質問に対するあなたの答えは、Cursorが理解するためにも価値のある情報である可能性が高いです。すべての組織やプロジェクトには、ドキュメントに完全に記録されていない潜在的な知識があります。ルールを効果的に使用することは、Cursorが全体像を把握できるようにする最良の方法です。 例えば、新しい機能やサービスの実装方法について指示を書いている場合、それを後世のために文書化する短いルールを書くことを検討してください。
Boilerplate
---
description: Add a new VSCode frontend service
---

1. **Interface Definition:**
   - Define a new service interface using `createDecorator` and ensure `_serviceBrand` is included to avoid errors.

2. **Service Implementation:**
   - Implement the service in a new TypeScript file, extending `Disposable`, and register it as a singleton with `registerSingleton`.

3. **Service Contribution:**
   - Create a contribution file to import and load the service, and register it in the main entrypoint.

4. **Context Integration:**
   - Update the context to include the new service, allowing access throughout the application.
Cursorが従うべき一般的なフォーマットパターンがある場合は、globパターンに基づいてルールを自動添付することを検討してください。
Formatting
---
globs: *.ts
---
- Use bun as package manager. See [package.json](mdc:backend/reddit-eval-tool/package.json) for scripts
- Use kebab-case for file names
- Use camelCase for function and variable names
- Use UPPERCASE_SNAKE_CASE for hardcoded constants
- Prefer `function foo()` over `const foo = () =>`
- Use `Array<T>` instead of `T[]`
- Use named exports over default exports, e.g (`export const variable ...`, `export function `)

計画作成プロセスに密接に関わる

大きな変更の場合、正確で適切にスコープされた計画を作成するために平均以上の思考時間を費やすことで、Cursorの出力を大幅に改善できます。 同じプロンプトのいくつかの異なるバリエーションを試した後でも望む結果が得られない場合は、一歩下がって、同僚にPRDを作成するかのように、ゼロからより詳細な計画を作成することを検討してください。多くの場合、困難な部分はどのような変更を行うべきかを把握することであり、これは人間に適したタスクです。適切な指示があれば、実装の一部をCursorに委任することができます。 AIを使用して計画作成プロセスを強化する一つの方法は、Askモードを使用することです。計画を作成するには、CursorでAskモードをオンにし、プロジェクト管理システム、内部ドキュメント、または漠然とした考えから得たコンテキストをすべて投入します。コードベースに含めたいファイルや依存関係について、すでに知っているものを考えてみてください。これは、統合したいコードの断片を含むファイルや、フォルダ全体である可能性があります。 以下はプロンプトの例です:
Planning prompt
- 新機能を作成する方法の計画を作成してください(@existingfeature.ts と同様に)
- 不明な点があれば質問してください(最大3つ)
- コードベースを必ず検索してください

@Past Chats (私の以前の探索プロンプト)

[プロジェクト管理ツール]からの追加コンテキスト:
[貼り付けられたチケットの説明]
私たちはモデルに計画を作成し、人間に質問することでコンテキストを収集し、以前の探索プロンプトやチケットの説明も参照するよう求めています。claude-3.7-sonnetgemini-2.5-pro、またはo3のような思考モデルを使用することをお勧めします。これらのモデルは変更の意図を理解し、より良い計画を合成できるためです。 これにより、実装を開始する前に、Cursorの助けを借りて計画を反復的に策定することができます。

適切なツールを選択する

Cursorを効果的に使用するための最も重要なスキルの一つは、作業に適したツールを選択することです。何を達成しようとしているかを考え、フローを維持できるアプローチを選択しましょう。
ツール使用ケース強み制限事項
Tab素早い手動変更完全な制御、高速単一ファイル
Inline Edit1つのファイル内での限定的な変更集中的な編集単一ファイル
Chatより大きな複数ファイルの変更自動的なコンテキスト収集、深い編集低速、コンテキスト重視
各ツールにはそれぞれの得意分野があります:
  • Tabは、主導権を握りたい素早い編集に最適です
  • Inline Editは、コードの特定のセクションに集中的な変更を加える必要がある場合に優れています
  • Chatは、Cursorがより広いコンテキストを理解する必要がある大きな変更に最適です
Chatモード(少し遅く感じることがありますが、非常に強力です)を使用する際は、良いコンテキストを提供することで、Cursorがあなたを支援できるようにしましょう。模倣したい類似のコードを指すために@filesを使用したり、プロジェクト構造をより良く理解させるために@folderを使用したりしてください。また、大きな変更をより小さなチャンクに分割することを恐れる必要はありません - 新しいチャットを開始することで、物事を集中的かつ効率的に保つことができます。

要点

  • 変更の範囲を絞り込み、一度に多くのことをやろうとしない
  • 可能な場合は関連するコンテキストを含める
  • Chat、Inline Edit、Tabをそれぞれが最も得意とする用途で使用する
  • 新しいチャットを頻繁に作成する
  • Askモードで計画し、Agentモードで実装する