java-refactoring-remove-parameter について
Java の Remove Parameter リファクタリングを行う GitHub Copilot CLI スキルです。動作を維持しながら呼び出し元やメソッド階層を更新し、変更前後にテストを実行します。
主な機能
- 01未使用・導出可能な引数の特定
- 02参照とメソッド階層の確認
- 03リフレクションと API のリスク確認
- 04変更前後のテスト実行
- 05変更点と未検証事項の報告
活用シーン
- 01Java メソッドの未使用引数の削除
- 02シグネチャ変更後の呼び出し元の更新
- 03リフレクションやフレームワーク経由の利用確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ github/ awesome-copilot --skill java-refactoring-remove-parameterインストール後、Claude Code で/java-refactoring-remove-parameterを入力して読み込まれたか確認します。
詳細
Remove Parameter を使用した Java メソッドのリファクタリング
役割
あなたは Java メソッドのリファクタリングのエキスパートです。
以下に、Remove Parameter を表す2つの例(リファクタリング前後のコードを示します)。
リファクタリング前のコード 1:
public Backend selectBackendForGroupCommit(long tableId, ConnectContext context, boolean isCloud)
throws LoadException, DdlException {
if (!Env.getCurrentEnv().isMaster()) {
try {
long backendId = new MasterOpExecutor(context)
.getGroupCommitLoadBeId(tableId, context.getCloudCluster(), isCloud);
return Env.getCurrentSystemInfo().getBackend(backendId);
} catch (Exception e) {
throw new LoadException(e.getMessage());
}
} else {
return Env.getCurrentSystemInfo()
.getBackend(selectBackendForGroupCommitInternal(tableId, context.getCloudCluster(), isCloud));
}
}
リファクタリング後のコード 1:
public Backend selectBackendForGroupCommit(long tableId, ConnectContext context)
throws LoadException, DdlException {
if (!Env.getCurrentEnv().isMaster()) {
try {
long backendId = new MasterOpExecutor(context)
.getGroupCommitLoadBeId(tableId, context.getCloudCluster());
return Env.getCurrentSystemInfo().getBackend(backendId);
} catch (Exception e) {
throw new LoadException(e.getMessage());
}
} else {
return Env.getCurrentSystemInfo()
.getBackend(selectBackendForGroupCommitInternal(tableId, context.getCloudCluster()));
}
}
リファクタリング前のコード 2:
NodeImpl( long id, long firstRel, long firstProp )
{
this( id, false );
}
リファクタリング後のコード 2:
NodeImpl( long id)
{
this( id, false );
}
安全ルール
- 振る舞いを維持できる変更に限ります。パラメーターが本当に未使用であるか、フィールド、定数、別のパラメーターから導出できる場合にのみ削除してください。「慣例上、冗長」であっても、参照されているパラメーターは削除しないでください。
- まずベースラインを確認します。範囲を絞った、成功するテストコマンド(
./mvnw -q -Dtest=MyTest test、./gradlew test --tests MyTest)または./mvnw verify/./gradlew buildを実行し、変更後に再実行してください。ベースラインが失敗した場合は中止して報告してください。 - 影響を受けるコードにテストがない場合は、中止して報告してください。まず特性テストを提案してください。テストを削除したり、弱めたりしてはいけません。
- シグネチャを変更する前に、使用箇所をすべて確認してください。LSP の参照検索(
lsp-setup/jdtls)を使い、テストを含むすべてのモジュールを grep で検索してください。次の点も確認します。- オーバーライドとインターフェースの実装箇所(
@Override、abstract/default メソッド、関数型インターフェース、メソッド参照):階層全体をまとめて変更する必要があります。 - リフレクションや文字列ベースの検索(
getMethod、getDeclaredMethod、MethodHandle、プロキシ)、および Spring/CDI/Quarkus/Jakarta のアノテーション付きメソッド(@Bean、@EventListener、@Scheduled、@Inject、@Path、@Observes、@PostConstruct)。これらはコンパイラーでは検出されません。 - シリアライズ/デシリアライズや JPA/Jackson で使用されるコンストラクター(
@JsonCreator、@ConstructorBinding、readObject)と、serialVersionUIDへの影響。 - メソッド名を指定している XML/properties/YAML 設定と AOP ポイントカット式。
- 他のモジュールが使用する、または公開成果物に含まれる public/protected API。
- オーバーライドとインターフェースの実装箇所(
- public/protected/公開済み API を変更する場合(オーバーロードを追加して非推奨にする方法を推奨)、または生成コードを変更する場合は、ユーザーに事前に確認してください。
- 1ステップにつき1つのパラメーターを削除してください(ユーザーがコミットを求めている場合は、1つにつき1コミット)。利用可能であれば jdtls の Change Method Signature リファクタリングを優先してください。そうでなければ、宣言とすべての呼び出し元をまとめて更新してください。
- パラメーターを削除すると、既存のシグネチャとオーバーロードが衝突したり、オーバーロード解決が変わったりすることがあります。必ず確認してください。呼び出し箇所で引数を評価することに副作用があった場合は、その副作用が必要なら維持してください。
タスク
読みやすさ、結合度、一貫性を改善するために、Remove Parameter を適用してください。
- 未使用または導出可能なパラメーターを特定します。
- 宣言とすべての呼び出し元からそれぞれ削除し、コンパイルしてテストを実行します。
- 削除が自明でない箇所に限り、1行コメントを追加します。それ以外はレポートで説明してください。
- 削除したパラメーター、更新した呼び出し元、実行したコマンドとその結果、未検証の事項(リフレクション経由や外部からの呼び出しなど)を報告してください。
リファクタリング対象のコード:
ここで、未使用パラメーターを持つすべてのメソッドを評価し、Remove Parameter を使用してリファクタリングしてください。
コメント
Markdown 対応