メインコンテンツまでスキップ

Cursor 向け AI プロンプトエンジニアリング

AI Prompt Engineering for Cursor

Cursor は単なる IDE エディタではありません。高度な言語モデルによって動作するインテリジェントなコーディングパートナーです。Cursor で AI が生成するコード、説明、および提案の品質は、それとどのようにコミュニケーションを取るかに大きく依存します。このガイドでは、Cursor 環境に特化したプロンプトエンジニアリングの技術と手法を教えます。効果的なプロンプト作成、コンテキスト管理、システムプロンプト、および再利用可能なテンプレートをカバーします。

Cursor の AI アーキテクチャを理解する​

プロンプトを作成する前に、Cursor がリクエストをどのように処理するかを理解することが不可欠です。Cursor は、以下の組み合わせを使用して、大規模言語モデルを編集体験に直接統合します:

  • インライン補完: カーソル位置と周囲のコードに基づくリアルタイムの提案
  • チャットインターフェース: 複雑なタスクと説明のための対話型インタラクション
  • コマンドパレットアクション: 選択したコードブロックに対するクイック AI 操作
  • Composer: 高レベルの説明に基づくマルチファイル編集と生成

各インタラクションモードは、異なるプロンプト戦略から利益を受けます。インライン補完はローカルコンテキストに大きく依存し、チャットインターフェースは詳細な指示とフォローアップの質問を可能にします。

Cursor の背後にあるモデルは、コードのセマンティクス、プロジェクト構造、および一般的なプログラミングパターンを理解します。しかし、彼らは心を読むことはできません。明確で構造化されたプロンプトは、曖昧なリクエストよりも著しく良い結果を生み出します。

効果的なプロンプトを作成する​

mediocre と exceptional な AI 応答の違いは、しばしばプロンプトの品質に帰結します。Cursor では、効果的なプロンプトは一貫して適用できる共通の特徴を持っています。

具体的かつ明確にする​

曖昧なプロンプトは曖昧な結果を生み出します。入力形式、出力形式、およびエッジケースを含めて、望む正確な動作を常に指定してください。

同じタスクに対するこれらの 2 つのプロンプトを比較してください:

曖昧:

ユーザーを処理する関数を書いてください。

具体的:

`getActiveUsers` という名前の TypeScript 関数を作成してください:
- User オブジェクトの配列と Date しきい値を受け取る
- lastLoginDate >= threshold のユーザーのみを返す
- 結果を lastLoginDate の降順でソートする
- JSDoc ドキュメントを含める
- 空の配列を優雅に処理して空の配列を返す

具体的なプロンプトは、Cursor に十分な制約を与えて、最初の試行で本番環境対応のコードを生成させます。曖昧なプロンプトは、複数のフォローアップ反復を必要とします。

コンテキストと制約を提供する​

Cursor の AI は開いているファイルのコンテキスト内で動作しますが、プロンプト内の明示的なコンテキストは正確性を向上させます。関連するテクノロジー、フレームワーク、およびアーキテクチャ上の決定事項に言及してください。

Cursor に React コンポーネントの生成を依頼する場合、以下を含めてください:

ユーザープロフィールカードの React コンポーネントを以下を使用して作成してください:
- strict モードの TypeScript
- スタイリングには Tailwind CSS
- データフェッチには React Query
- フォーム検証には Zod
- スクリーンリーダー向けのアクセシブルな ARIA ラベル

このコンテキストにより、生成されたコードは任意の代替案ではなく、あなたの技術スタックと一致することが保証されます。

ヒント

Cursor のチャットで「@」メンションを使用して、特定のファイル、シンボル、またはドキュメントを参照してください。@file.ts または @MyComponent と入力すると、これらの定義がプロンプトコンテキストに直接含まれ、関連性が向上します。

コードとともに説明をリクエストする​

複雑な実装の場合、Cursor にその推論を説明するように依頼してください。これにより、正確性を検証し、AI のアプローチから学ぶことができます。

React でカスタムの useDebounce フックを実装してください。以下を含めてください:
1. 完全な TypeScript 実装
2. クリーンアップがメモリリークを防ぐ方法の説明
3. 検索入力の使用例
4. なぜこのアプローチがデバウンスには useMemo より優れているか

結果として得られる応答には、動作するコードだけでなく、理解を深める教育コンテンツも含まれます。

コンテキスト管理戦略​

Cursor の AI にはコンテキストウィンドウの制限があり、応答を生成する際に一定量のテキストのみを考慮できます。効率的なコンテキスト管理により、最も関連性の高い情報が含まれることが保証されます。

関連するコンテキストの選択​

Cursor のチャット機能を使用する際、AI は自動的に開いているファイルと最近の編集を含めます。しかし、以下によりこれを最適化できます:

  1. 関連するファイルを開いたままにする: 機能に取り組む際、関連するモデル、コントローラー、およびテストファイルを開いたままにして、Cursor が全体像を理解できるようにします。

  2. 明示的な選択を使用する: 質問する前に、特定のコードブロックをハイライトしてください。Cursor は、選択されたテキストを一般的なファイルコンテキストよりも優先します。

  3. ノイズを最小化する: 複雑な AI セッションを開始する前に、関連性の低いファイルを閉じてください。大規模な設定ファイルや関連性の低いモジュールは、不要にコンテキスト予算を消費する可能性があります。

コンテキストを反復的に構築する​

マルチステップのタスクでは、一度にすべてを投入するのではなく、徐々にコンテキストを構築してください。

ステップ 1:「@models/User.ts の User モデルを確認し、欠落している検証ルールを特定してください。」

ステップ 2:「これらの検証ルールに基づいて、@schemas/user.ts の Zod スキーマを更新してください。」

ステップ 3:「次に、更新されたスキーマのすべてのエッジケースをカバーする単体テストを生成してください。」

この反復的なアプローチは、会話履歴を通じて継続性を維持しながら、各プロンプトを焦点化させます。

警告

Cursor のチャットでの長い会話は、最終的にコンテキストウィンドウを超え、AI が以前の指示を忘れてしまう可能性があります。非常に長いタスクの場合、重要な決定を定期的に要約するか、統合されたコンテキストサマリーで新しいチャットを開始してください。

システムプロンプトとペルソナ​

システムプロンプトは、AI の動作、トーン、および専門性のレベルを形成します。Cursor はユーザーに対して生のシステムプロンプト編集を公開していませんが、永続的な指示を通じて同様の効果を達成できます。

コーディング標準の確立​

プロジェクトまたはチャットセッションの開始時に、コーディング標準を定義します:

このプロジェクトで生成されるすべてのコードについて、以下のルールに従ってください:
- すべての関数に明示的な戻り値の型を持つ TypeScript を使用する
- 命令型のループより関数型プログラミングパターンを優先する
- Promise チェーンではなく async/await を使用する
- すべての非同期操作にエラーハンドリングを含める
- 既存の命名規則に従う:変数は camelCase、型は PascalCase

Cursor は、同じ会話内の後続の応答で一貫してこれらの標準を適用します。

ロールベースのプロンプト​

AI に特定のロールを割り当てて、専門家レベルの応答を得ます:

この認証ミドルウェアをレビューする上級セキュリティエンジニアとして振る舞ってください。
以下の潜在的な脆弱性を特定してください:
- タイミング攻撃
- JWT の弱点
- セッション固定のリスク
- CSRF バイパスベクトル

発見された各問題に対して、具体的なコード修正を提供してください。

ロールベースのプロンプトは、ドメイン固有の知識を活性化し、AI がコードの異なる側面をどのように優先するかを変更します。

トーンと詳細の調整​

応答の冗長性とスタイルを制御します:

簡潔な箇条書きの説明を提供してください。理論的な概念ではなく実用的な影響に焦点を当ててください。自明でないパターンを説明する場合にのみコード例を含めてください。

これは、アクティブな開発中に長い散文なしで迅速な回答が必要な場合に特に有用です。

一般的なタスクのプロンプトテンプレート​

再利用可能なプロンプトテンプレートは、Cursor とのインタラクションを標準化し、リクエストを作成する際の精神的な負担を軽減します。

コードレビューテンプレート​

以下のコードをレビューしてください:
1. バグと論理エラー
2. パフォーマンスの問題
3. セキュリティの脆弱性
4. 型安全性の問題
5. メンテナンス性の懸念

各問題について、以下を提供してください:
- 問題のある行
- なぜそれが問題なのか
- 修正されたバージョン

レビューするコード:
[コードをここに貼り付ける]

リファクタリングテンプレート​

以下のコードをリファクタリングして、[具体的な目標、例:可読性/パフォーマンス/テスト容易性]を改善してください。

要件:
- 正確な機能を維持する
- [具体的なパターン、例:Strategy パターン/Dependency Injection]を使用する
- ロジックの複雑性が増加する場合は単体テストを追加する
- 既存の JSDoc コメントをすべて保持する

元のコード:
[コードをここに貼り付ける]

テスト生成テンプレート​

[テストフレームワーク]を使用して、[関数/コンポーネント名]の包括的なテストスイートを生成してください。

カバレッジ要件:
- ハッピーパスのシナリオ
- エッジケース(null、undefined、空の配列、極端な値)
- エラーハンドリングのパス
- 該当する場合は非同期の動作

「[条件]のとき、[期待される動作]すべき」というパターンに従う、説明的なテスト名を使用してください。

ドキュメントテンプレート​

以下のモジュールの API ドキュメントを JSDoc/TSDoc 標準に従って生成してください。

以下を含めてください:
- 各エクスポート関数/クラスの説明
- パラメータ型と説明
- 戻り値の説明
- スローされる例外
- 複雑な関数の使用例

モジュールコード:
[コードをここに貼り付ける]

これらのテンプレートをプロジェクトリポジトリ内の prompts.md ファイルに保存します。「@src/utils/auth.ts にコードレビューテンプレートを使用してください」と尋ねると、Cursor はそれらを参照できます。

高度なプロンプトテクニック​

基本的な指示を超えて、いくつかの高度なテクニックが Cursor の AI のより深い機能を解き放ちます。

チェーンオブソートプロンプト​

複雑な問題解決のために、AI に段階的に考えるよう依頼します:

以下の条件を満たすレートリミッターを実装してください:
- スライディングウィンドウアルゴリズムを使用する
- ユーザーごとおよび IP ごとの制限をサポートする
- TTL を持つ Redis にカウンターを保存する
- 適切な 429 ヘッダーを返す

コードを書く前に、アルゴリズムを段階的に考えてください。以下を考慮してください:
1. スライディングウィンドウがリクエストを追跡する方法
2. Redis データ構造の選択
3. 競合条件の処理
4. ヘッダー計算ロジック

チェーンオブソートプロンプトは、AI に実装コードを生成する前に推論を明確にさせることで、論理エラーを減らします。

few-shot プロンプト​

望ましい入出力ペアの例を提供して、AI の出力形式をガイドします:

以下のエラーオブジェクトをユーザーフレンドリーなメッセージに変換してください。このパターンに従ってください:

入力:{ code: "INVALID_EMAIL", field: "email" }
出力:「有効なメールアドレスを入力してください。」

入力:{ code: "PASSWORD_TOO_SHORT", field: "password", minLength: 8 }
出力:「パスワードは少なくとも 8 文字である必要があります。」

次を変換してください:
入力:{ code: "USERNAME_TAKEN", field: "username" }
出力:?

few-shot プロンプトは、データ変換、ログ解析、およびメッセージ生成のような一貫したフォーマットタスクに特に効果的です。

ネガティブプロンプト​

AI に何をしてはいけないかを明示的に伝えます:

このコンポーネントの CSS モジュールを生成してください。以下は行わないでください:
- インラインスタイルを使用しない
- !important 宣言を使用しない
- ベンダープレフィックスを追加しない(PostCSS で処理される)
- フォントサイズにピクセル値を使用しない(rem を代わりに使用する)

ネガティブ制約は、AI がデフォルトで含める可能性のある一般的なアンチパターンを防ぎます。

デバッグプロンプト​

コードが期待どおりに動作しない場合、構造化されたデバッグプロンプトは、一般的な「これを修正してください」リクエストよりも速く問題を特定するのを助けます。

エラー分析プロンプト​

[操作]を実行したときに、以下のエラーが発生します:

[エラーメッセージとスタックトレース]

関連するコード:
[コードスニペット]

以下を説明してください:
1. このエラーの根本原因
2. なぜこの特定のコンテキストで発生するのか
3. 修正するための最小限のコード変更
4. 将来同様のエラーを防ぐ方法

動作の不一致プロンプト​

期待される動作:[説明]
実際の動作:[説明]

コード:
[コードスニペット]

ロジックが期待される動作から逸脱している場所を特定し、修正された実装を提供してください。
ヒント

Cursor を使用してデバッグする際は、スタックトレースを含む完全なエラーメッセージを貼り付けてください。AI は行番号とファイル参照を使用して、より正確に問題を特定します。

プロンプトの評価と反復​

プロンプトエンジニアリングは反復的なプロセスです。どのプロンプトが最良の結果を生み出すかを追跡し、時間をかけて改良してください。

プロンプトの A/B テスト​

重要なコード生成タスクの場合、複数のプロンプトのバリエーションを試してください:

バリエーション A:

ページネーションのオフセットを計算する関数を書いてください。

バリエーション B:

以下のパラメータを持つ TypeScript ユーティリティ関数 `calculatePagination` を作成してください:
- page: number(1 ベース、デフォルトは 1)
- pageSize: number(デフォルトは 20、最大 100)
戻り値:{ offset: number; limit: number }

無効な入力に対して RangeError をスローする検証を含めてください。

出力を比較し、最も完全で正確な結果を生み出すテンプレートを保持してください。

プロンプトライブラリの構築​

効果的なプロンプトを発見したら、個人またはチームのライブラリに整理します:

# Cursor プロンプトライブラリ

## React コンポーネント
- `react-component`: props インターフェースを持つ TypeScript React コンポーネントを作成する
- `react-hook`: クリーンアップロジックを持つカスタムフックを生成する

## バックエンド
- `express-route`: 検証を持つ Express ルートハンドラーを生成する
- `prisma-query`: 適切なエラーハンドリングを持つ Prisma クエリを書く

## テスト
- `unit-test`: 純粋な関数の Jest テストを生成する
- `integration-test`: API エンドポイントの supertest スイートを作成する

このライブラリをチームと共有して、コードベース全体の AI インタラクションを標準化してください。

結論​

Cursor でのプロンプトエンジニアリングをマスターすることで、AI は時々の便利さから開発ワークフローの力の乗数へと変換されます。具体的なプロンプトを作成し、コンテキストを効率的に管理し、システムレベルの指示を使用し、再利用可能なテンプレートを構築することで、一貫して高品質のコードと説明を受け取ることができます。

このガイドの重要なポイント:

  • 具体性は簡潔さに勝ります。常に制約とコンテキストを含めてください
  • 関連するファイルを選択し、反復的に構築することで、コンテキストを積極的に管理してください
  • 会話の開始時にコーディング標準を確立してください
  • 専門家レベルの分析にはロールベースのプロンプトを使用してください
  • 時間を節約するために、繰り返しのタスクにはテンプレートを作成してください
  • チェーンオブソートや few-shot プロンプトなどの高度なテクニックを適用してください
  • プロンプトを反復し、効果的なパターンの個人ライブラリを構築してください

プロンプトエンジニアリングを学ぶために投資した時間は、より高速な開発、より少ないバグ、および Cursor の AI によって生成されるよりメンテナンス可能なコードを通じて配当を生み出します。