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

AI言語サポートによるデバッグ

ヒント

CursorのAIを活用したデバッグ機能は、インテリジェントな分析と提案を提供することで、問題の特定と修正を迅速に行うのに役立ちます。

はじめに

AIデバッグサポートの有効化

  1. コマンドパレットを開く (Ctrl/Cmd + Shift + P)
  2. "AIデバッグを有効にする"と入力
  3. 機能を有効化する

基本機能

1. エラー分析

エラーが発生した場合、AIが分析を支援します:

example-error.js
// コード内のエラー
const user = getUserData();
console.log(user.name.toLowerCase());

// AI分析
// ⚠️ 潜在的なヌル参照
// - userがnull/undefinedの可能性
// - user.nameがnull/undefinedの可能性
// 提案: ヌルチェックを追加

2. クイックフィックス

AIは一般的な問題に対する修正を提案します:

component.tsx
// 以前: 型エラー
const handleClick = (event) => {
console.log(event.value);
};

// AIの提案
const handleClick = (event: React.MouseEvent) => {
console.log(event.currentTarget.value);
};

高度な機能

1. ランタイム分析

AIはランタイムの動作を分析できます:

performance.py
# パフォーマンスの問題
def process_data(items):
result = []
for item in items:
result.append(transform(item))
return result

# AIの提案
def process_data(items):
return [transform(item) for item in items]
# 🚀 パフォーマンスの向上:
# - リスト内包表記は高速
# - メモリ割り当てを削減

2. コンテキスト対応デバッグ

AIはコードベースのコンテキストを理解します:

auth.service.ts
// バグのある元のコード
async function validateUser(token) {
const user = await getUser(token);
return user.isValid;
}

// AIデバッグ分析
/**
* 発見された問題:
* 1. 無効なトークンに対するエラーハンドリングがない
* 2. ユーザーオブジェクトの型チェックがない
* 3. ユーザーのヌルチェックが欠如
*/

// AIの提案修正
async function validateUser(token: string): Promise<boolean> {
try {
const user = await getUser(token);
return user?.isValid ?? false;
} catch (error) {
console.error('ユーザー検証に失敗:', error);
return false;
}
}

デバッグワークフロー

1. インタラクティブデバッグ

デバッグセッション中にAIを使用:

// AI対応のブレークポイントを配置
debugger; // AIが変数の状態を分析

// AIデバッグコンソール
> ai.analyze(variableName)
> ai.suggest.fix()
> ai.explain.state()

2. ログ分析

AIは複雑なログの分析を支援します:

# 複雑なログ出力
[2024-03-20T10:15:30] Error: Connection refused...
[2024-03-20T10:15:31] Retry attempt 1...
[2024-03-20T10:15:32] Error: Timeout...

# AI分析
"""
検出された問題: ネットワーク接続の問題
- 初期接続が拒否されました
- 再試行でタイムアウト
提案: ネットワーク設定とファイアウォールルールを確認
"""

言語固有の機能

JavaScript/TypeScript

// 型推論
function processData(data) {
// AIは使用に基づいて型を提案
return data.map(item => item.value);
}

Python

# 型ヒントとランタイムチェック
def calculate_average(numbers: List[float]) -> float:
# AIは入力検証を提案
if not numbers:
raise ValueError("空のリストが提供されました")
return sum(numbers) / len(numbers)

ベストプラクティス

1. エラー防止

AIを使用して潜在的なエラーをキャッチ:

// AIが提案するエラー防止
function divideNumbers(a: number, b: number): number {
// AIは安全チェックを追加
if (typeof a !== 'number' || typeof b !== 'number') {
throw new TypeError('引数は数値でなければなりません');
}
if (b === 0) {
throw new Error('ゼロによる除算');
}
return a / b;
}

2. コード品質

AIはコード品質の維持を支援:

// 以前
function fn(x) {
var res = x + 1;
return res;
}

// 後 (AIによる改善)
const increment = (value: number): number => {
return value + 1;
};

3. パフォーマンス最適化

AIはパフォーマンスの問題を特定:

// パフォーマンスの問題
const results = data
.filter(item => item.active)
.map(item => transform(item))
.filter(item => item !== null);

// AIの最適化
const results = data.reduce((acc, item) => {
if (item.active) {
const transformed = transform(item);
if (transformed !== null) {
acc.push(transformed);
}
}
return acc;
}, []);

高度なデバッグ技術

1. メモリリーク検出

// メモリリークの可能性がある実装
class ResourceManager {
constructor() {
this.resources = new Map();
this.listeners = [];
}

addListener(callback) {
this.listeners.push(callback);
}
}

// AI提案の修正
class ResourceManager {
constructor() {
this.resources = new Map();
this.listeners = new Set();
}

addListener(callback) {
this.listeners.add(callback);
}

removeListener(callback) {
this.listeners.delete(callback);
}
}

2. 非同期デバッグ

// 非同期操作のデバッグ
async function fetchUserData() {
try {
const response = await api.get('/user');
return response.data;
} catch (error) {
// AIが詳細なエラー処理を提案
if (error.response) {
console.error('APIエラー:', error.response.status);
} else if (error.request) {
console.error('ネットワークエラー:', error.message);
} else {
console.error('予期せぬエラー:', error);
}
throw error;
}
}

3. パフォーマンスプロファイリング

// AIパワードパフォーマンス分析
@profile
class DataProcessor {
process(data: any[]) {
// AIがパフォーマンスメトリクスを収集
const startTime = performance.now();
const result = this.heavyComputation(data);
const endTime = performance.now();

// AIが最適化の提案を生成
if (endTime - startTime > 100) {
console.warn('パフォーマンス警告: 処理時間が100ms超過');
}

return result;
}
}