| name | refactoring-suggester |
| description | Suggest refactoring opportunities to improve code structure and maintainability. Use when improving code design or reducing complexity. |
Refactoring Suggester Skill
コードのリファクタリング提案を行うスキルです。
主な機能
- Extract Method: 長いメソッドを分割
- Rename: 分かりやすい命名に変更
- Remove Duplication: 重複排除
- Simplify Conditionals: 条件式の簡略化
- Design Patterns: パターン適用提案
リファクタリング例
Extract Method
// Before
function processOrder(order) {
// 検証
if (!order.items || order.items.length === 0) {
throw new Error('No items');
}
if (!order.customer) {
throw new Error('No customer');
}
// 価格計算
let total = 0;
for (const item of order.items) {
total += item.price * item.quantity;
}
const tax = total * 0.1;
total += tax;
// 保存
const saved = db.orders.save(order);
return saved;
}
// After: Extract Method
function processOrder(order) {
validateOrder(order);
const total = calculateTotal(order);
return saveOrder(order, total);
}
function validateOrder(order) {
if (!order.items || order.items.length === 0) {
throw new Error('No items');
}
if (!order.customer) {
throw new Error('No customer');
}
}
function calculateTotal(order) {
const subtotal = order.items.reduce(
(sum, item) => sum + item.price * item.quantity,
0
);
return subtotal * 1.1; // +10% tax
}
function saveOrder(order, total) {
order.total = total;
return db.orders.save(order);
}
Replace Magic Numbers
# Before
def calculate_price(item):
if item.category == 'premium':
return item.price * 0.9
elif item.category == 'vip':
return item.price * 0.8
return item.price * 1.0
# After
DISCOUNT_RATES = {
'premium': 0.9,
'vip': 0.8,
'regular': 1.0
}
def calculate_price(item):
rate = DISCOUNT_RATES.get(item.category, 1.0)
return item.price * rate
Simplify Conditionals
// Before
function getShippingCost(weight: number, distance: number): number {
if (weight < 5) {
if (distance < 100) {
return 10;
} else {
return 15;
}
} else {
if (distance < 100) {
return 20;
} else {
return 25;
}
}
}
// After: Guard Clauses
function getShippingCost(weight: number, distance: number): number {
const isLight = weight < 5;
const isNear = distance < 100;
if (isLight && isNear) return 10;
if (isLight && !isNear) return 15;
if (!isLight && isNear) return 20;
return 25;
}
// Better: Lookup table
const SHIPPING_RATES = {
'light_near': 10,
'light_far': 15,
'heavy_near': 20,
'heavy_far': 25
};
function getShippingCost(weight: number, distance: number): number {
const weightKey = weight < 5 ? 'light' : 'heavy';
const distanceKey = distance < 100 ? 'near' : 'far';
const key = `${weightKey}_${distanceKey}`;
return SHIPPING_RATES[key];
}
バージョン情報
- Version: 1.0.0