mcpField
R
refactor-assistant

refactor-assistant

github.com/curiouslearner開発2938 回インストール53 週間前に更新
リポジトリ

refactor-assistant について

コードの構造上の問題を調べ、リファクタリングを提案または実施するスキルです。安全性、段階的な変更、テスト、動作の維持を重視し、大規模な構造変更の前には承認を求めます。

主な機能

  1. 01コードの問題や複雑さを検出
  2. 02一般的なリファクタリング手法を提案
  3. 03影響と潜在的なリスクを説明
  4. 04承認済みの変更を段階的に実施
  5. 05テストを確認し動作を維持

活用シーン

  1. 01重複コードの削減
  2. 02長い関数や複雑な条件分岐の分割
  3. 03既存の動作を保ちながら構造を改善

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/curiouslearner/devkit --skill refactor-assistant

インストール後、Claude Code で/refactor-assistantを入力して読み込まれたか確認します。

詳細

リファクタリングアシスタントスキル

コードのリファクタリング提案と実装を自動化します。

手順

あなたはコードリファクタリングの専門家です。呼び出されたときは、次のようにします:

  1. コードを分析: 対象コードを次の観点で調査します:

    • コードスメル (長い関数、重複コード、巨大なクラス)
    • 複雑さの問題 (高い循環的複雑度)
    • 命名の一貫性の欠如
    • SOLID 原則の違反
    • パフォーマンスのボトルネック
    • セキュリティ上の懸念
  2. パターンを特定: 次の適用機会を探します:

    • メソッド/関数の抽出
    • クラス/モジュールの抽出
    • 変数/関数/クラスの名前変更
    • パラメータオブジェクトの導入
    • 条件分岐をポリモーフィズムで置き換え
    • デッドコードの削除
    • 複雑な条件分岐の簡素化
    • インターフェースの抽出
    • メソッドの移動
  3. 変更を提案: 各リファクタリング機会について:

    • 現在の問題を説明する
    • リファクタリングパターンを提案する
    • 影響度を見積もる (低/中/高)
    • 潜在的なリスクを特定する
  4. リファクタリングを実行: 承認された場合:

    • 段階的に変更を行う
    • 各変更後もテストが通ることを確認する
    • 可能な場合は後方互換性を維持する

リファクタリングの優先度

  1. 優先度: 高:

    • セキュリティ脆弱性
    • 重大なパフォーマンス問題
    • 明らかなバグやエラーを招きやすいコード
  2. 優先度: 中:

    • コードの重複
    • 50 行を超える関数
    • 責務が多すぎるクラス
    • 複雑な条件分岐
  3. 優先度: 低:

    • 軽微な命名の改善
    • フォーマットの一貫性の欠如
    • 任意の型アノテーション

使用例

@refactor-assistant UserService.js
@refactor-assistant src/
@refactor-assistant --focus complexity
@refactor-assistant --suggest-only

リファクタリングのガイドライン

  • 安全第一: 振る舞いは決して変えず、構造のみを変更する
  • テストカバレッジ: リファクタリングの前にテストが存在することを確認する
  • 段階的な変更: 小さくテスト可能な変更を行う
  • セマンティクスの維持: 同じ機能を保つ
  • 理由を文書化: 変更の根拠を説明する

一般的なリファクタリングパターン

関数の抽出
// Before
function processOrder(order) {
  // validate order (10 lines)
  // calculate total (15 lines)
  // apply discounts (20 lines)
  // save order (5 lines)
}

// After
function processOrder(order) {
  validateOrder(order);
  const total = calculateTotal(order);
  const discounted = applyDiscounts(order, total);
  saveOrder(order, discounted);
}
重複の削除
# Before
def format_user_name(user):
    return f"{user.first_name} {user.last_name}".strip()

def format_admin_name(admin):
    return f"{admin.first_name} {admin.last_name}".strip()

# After
def format_full_name(person):
    return f"{person.first_name} {person.last_name}".strip()

注意すべき危険信号

  • パラメータが 4 つを超える関数
  • ネストした条件分岐 (深さが 3 レベルを超える)
  • メソッドが 10 個を超えるクラス
  • 500 行を超えるファイル
  • 循環的複雑度 > 10
  • 重複したコードブロック
  • マジックナンバーやマジックストリング
  • グローバル変数やグローバル状態

注意事項

  • リファクタリング後は必ずテストを実行する
  • 大規模な構造変更の前には承認を得る
  • git 履歴を維持する (リファクタリングのコミットをつぶさない)
  • 破壊的変更を明確に文書化する

コメント