AI言語サポートによるデバッグ
ヒント
CursorのAIを活用したデバッグ機能は、インテリジェントな分析と提案を提供することで、問題の特定と修正を迅速に行うのに役立ちます。
はじめに
AIデバッグサポートの有効化
- コマンドパレットを開く (Ctrl/Cmd + Shift + P)
- "AIデバッグを有効にする"と入力
- 機能を有効化する
基本機能
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
- JavaScript
- TypeScript
// 型推論
function processData(data) {
// AIは使用に基づいて型を提案
return data.map(item => item.value);
}
// 型チェック
interface DataItem {
value: string;
}
function processData(data: DataItem[]) {
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;
}
}