AgentSkillsCN

refactor

分析当前PR的变更内容,并提出重构建议

SKILL.md
--- frontmatter
name: refactor
description: 現在のPRの変更内容を分析し、リファクタリング提案を行う
argument-hint: "[対象ブランチ(省略時はmain)]"
allowed-tools: Bash, Read, Edit, Grep, Glob, AskUserQuestion, Task, TaskCreate, TaskUpdate, TaskList

PR リファクタリングスキル

現在のブランチのPR差分を分析し、コーディングルールに基づいてリファクタリング提案を行う。

前提

  • プロジェクトのコーディングルールは claude/rules/ 配下に定義されている
  • 提案はルールに基づくものと、一般的なコード品質改善の両方を含む
  • ユーザーが選択した提案のみを適用する

実行手順

Step 1: 差分の取得

  1. 引数でベースブランチが指定されていればそれを使う。省略時は main をベースとする
  2. 以下のコマンドで変更ファイル一覧と差分を取得する:
    • git diff <base-branch>...HEAD --name-only で変更ファイル一覧
    • git diff <base-branch>...HEAD で全体の差分
  3. 変更ファイルが存在しない場合は「差分がありません」と報告して終了する

Step 2: コーディングルールの読み込み

  1. claude/rules/ 配下のルールファイルをすべて読み込む
  2. ルールの内容を分析の基準として使用する

Step 3: 変更ファイルの分析

  1. 変更された各ファイルの全体を読み込む(差分だけでなくファイル全体のコンテキストが必要)
  2. 以下の観点で改善点を洗い出す:

コーディングルールに基づく観点

  • 変数: マジックナンバー/ストリング、不変宣言の使用、命名規則
  • 関数: 引数の数、関数の長さ、早期リターン、ネストの深さ
  • コメント: doc形式の有無、意図の説明
  • 原理原則: デメテルの法則、DRY、YAGNI、SOLID、凝集度
  • エラーハンドリング: エラーの握りつぶし、型としての表現
  • セキュリティ: ハードコードされた認証情報、eval の使用
  • パフォーマンス: 計算量、N+1問題

DDD観点(該当する場合)

  • Entity/Value Object の設計
  • Aggregate の境界
  • レイヤー構造の依存方向
  • ユビキタス言語の一貫性

一般的なコード品質

  • 重複コードの統合
  • 不要なコードの削除
  • 型安全性の改善
  • テスタビリティの向上

Step 4: 提案の作成と提示

  1. 発見した改善点を以下のフォーマットで一覧にまとめる:
code
## リファクタリング提案

### 提案 1: [タイトル]
- **ファイル**: `path/to/file.ts:行番号`
- **カテゴリ**: [命名 | 構造 | パフォーマンス | セキュリティ | DDD | その他]
- **重要度**: [高 | 中 | 低]
- **現状**: 現在のコードの問題点を簡潔に説明
- **提案**: 改善案を簡潔に説明
- **コード例**:(必要に応じて before/after を示す)
  1. 提案が多い場合はカテゴリごとにグループ化する
  2. 重要度の高いものから順に並べる

Step 5: ユーザーへの確認

  1. 提案一覧を提示した後、AskUserQuestion を使ってユーザーにどの提案を適用するか確認する
  2. 提案の数が4つ以下の場合は各提案をオプションとして提示する
  3. 提案の数が5つ以上の場合は以下のように段階的に確認する:
    • まず「すべて適用」「カテゴリ単位で選択」「個別に選択」「適用しない」の選択肢を提示
    • ユーザーの選択に応じて詳細を確認する

Step 6: 変更の適用

  1. ユーザーが承認した提案のみを適用する
  2. 各変更適用後、変更内容を簡潔に報告する
  3. すべての変更適用後、最終的なサマリーを表示する

注意事項

  • PR差分に含まれないファイルへの変更提案は行わない
  • テストファイルに対しても分析は行うが、テストの可読性を過度に追求しない
  • 自動フォーマッタで対応可能なスタイルの指摘(インデント、空白等)は除外する
  • 提案が0件の場合は「改善提案はありません。コードは良好です」と報告する

引数

ベースブランチ: $ARGUMENTS