Cursor AI ショートカット完全ガイド:開発効率を飛躍させる必須テクニック
AI時代のプログラミングにおいて、適切なツールの使い方を習得することは極めて重要です。本記事ではCursor AIのコアショートカットと活用テクニックを詳細に解説します。
コアショートカット
1. AIインタラクションショートカット
AIチャット(Command/Ctrl + L)
- AIチャットウィンドウを開く
- AIアシスタントへの質問
- コード解説の取得
- コード最適化の議論
インライン編集(Command/Ctrl + K)
- 選択コードの即時修正
- AI改善提案の取得
- リアルタイムコード最適化
コンポーザー関連
- コンポーザー起動(Command/Ctrl + I):複雑なAI補助タスクの処理
- フルスクリーンコンポーザー(Command/Ctrl + Shift + I):広い作業領域の確保
2. コード補完ショートカット
typescript
// コード補完の例
function calculateDiscount(price: number, rate: number) {
// "return price"入力後、AIがインテリジェント補完
return price * (1 - rate) // Tabで提案を適用
}
// ショートカット:
// - Tab:提案を適用
// - Esc:提案を拒否
// - Command/Ctrl + →:部分的な適用
実践応用テクニック
1. AIチャットベストプラクティス
typescript
// Command/Ctrl + Lでチャットを開く
// サンプルダイアログ:
User: 'このコードのパフォーマンスを最適化する方法は?'
function processLargeArray(items: any[]) {
return items.filter(item => item.active)
.map(item => item.value)
.reduce((sum, value) => sum + value, 0)
}
// AI回答:
// "以下の最適化を提案します:
// 1. シングルパス処理
// 2. 型定義の追加
// 3. エラーハンドリングの実装"
// 最適化後のコード:
function processLargeArray(items: Item[]): number {
try {
return items.reduce((sum, item) => {
if (item.active) {
return sum + (item.value ?? 0)
}
return sum
}, 0)
}
catch (error) {
logger.error('配列処理エラー', { error })
return 0
}
}
2. インライン編集テクニック
typescript
// Command/Ctrl + Kでインライン編集を開始
// 修正対象コードを選択:
function handleError(error) {
console.log(error)
}
// 要求:"エラーログと型定義を追加"
// AIが生成した改善版:
function handleError(error: Error): void {
logger.error('操作失敗', {
error: error.message,
stack: error.stack,
timestamp: new Date().toISOString()
})
Sentry.captureException(error)
}
3. コンポーザー活用テクニック
typescript
// Command/Ctrl + Iでコンポーザーを起動
// サンプルプロンプト:
// "ユーザー認証APIエンドポイントを作成し、以下を含める:
// - 入力バリデーション
// - エラーハンドリング
// - ロギング
// - JWT認証"
import { signToken } from '@/lib/jwt'
import { createHandler } from 'next-api-handler'
// コンポーザーが生成したコード:
import { z } from 'zod'
const loginSchema = z.object({
email: z.string().email(),
password: z.string().min(8)
})
export const handler = createHandler()
.use(validateBody(loginSchema))
.post(async (req, res) => {
try {
const { email, password } = req.body
const user = await auth.verifyCredentials(email, password)
const token = await signToken(user)
logger.info('ユーザーログイン成功', { userId: user.id })
return res.json({ token })
}
catch (error) {
logger.error('ログイン失敗', {
error: error.message,
email
})
if (error instanceof AuthError) {
return res.status(401).json({
error: 'ユーザー名またはパスワードが不正です'
})
}
return res.status(500).json({
error: 'サーバーエラー'
})
}
})
効率化向上テクニック
1. プロンプト最適化
より良いAIレスポンスを得るために:
- 具体的に明示:要件とコンテキストを明確化
- ステップ分け:複雑タスクを小ステップに分割
- 例示:期待する出力形式を提示
- 制約条件の指定:技術スタックと制限条件を明示
2. ワークフロー最適化
typescript
// サンプルワークフロー:コードレビュー
// 1. Command/Ctrl + Lでチャットを開く
// 2. コードを貼り付けレビューを依頼
// 3. Command/Ctrl + Kで提案を即時適用
// オリジナルコード
function processData(data) {
if (data.status = 'active') {
return data.process()
}
}
// AIレビュー提案
// 1. 代入演算子の修正
// 2. 型定義の追加
// 3. null値の処理
// 4. エラーハンドリングの追加
// 最適化後のコード
function processData(data: ProcessData): Result | null {
try {
if (data?.status === 'active') {
return data.process?.() ?? null
}
return null
}
catch (error) {
logger.error('データ処理エラー', { error })
return null
}
}
3. ショートカット組み合わせテクニック
よく使う組み合わせ:
コード生成フロー
- Command/Ctrl + I:コンポーザー起動
- 要件を記述
- Tab:生成コードを適用
- Command/Ctrl + K:微調整
コード最適化フロー
- Command/Ctrl + L:チャット開始
- コードを貼り付け最適化を依頼
- Command/Ctrl + K:改善提案を適用
問題解決フロー
- Command/Ctrl + L:問題を記述
- Command/Ctrl + I:解決策を生成
- Command/Ctrl + K:実装詳細を調整
カスタマイズ設定
1. ショートカットカスタマイズ
設定でショートカットをカスタマイズ可能:
json
{
"keybindings": {
"ai.chat": "cmd+l",
"ai.inline": "cmd+k",
"ai.composer": "cmd+i",
"ai.composer.fullscreen": "cmd+shift+i"
}
}
2. AI動作設定
json
{
"cursor.ai": {
"completion": {
"enabled": true,
"delay": 100,
"threshold": 0.8
},
"chat": {
"model": "gpt-4",
"temperature": 0.7
},
"inline": {
"autoSuggest": true,
"language": "ja-JP"
}
}
}
よくある問題解決
ショートカットの競合
- 他プラグインの設定を確認
- 競合するショートカットを再マッピング
- 使用頻度の低い機能のショートカットを無効化
AIレスポンスの最適化
- より多くのコンテキスト情報を提供
- 具体的な指示を使用
- AIモデルパラメータを適切に調整
まとめ
Cursor AIのショートカットとテクニックを習得することで:
- コーディング速度の向上
- コード品質の向上
- 問題解決プロセスの簡素化
- 開発ワークフローの最適化
これらのショートカットとテクニックを実践で活用し、開発効率を飛躍させましょう。習熟には練習が不可欠です!