Eclipse
Z
信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
Eclipseのリファクタリング機能を使いこなす
Rename、Extract Method、Extract Variableなど、EclipseのリファクタリングメニューをGUIで安全に使う方法を解説します。
一言結論
EclipseのリファクタリングはAlt+Shift+Rのリネームや Alt+Shift+Mのメソッド抽出など全参照を自動追跡して安全に変更するため、手動の検索置換より格段に信頼性が高い。
リファクタリングとは
「外から見た振る舞いを変えずに、内部の構造を改善すること」です。Eclipse はリファクタリング操作を安全に自動実行してくれます。
リファクタリングメニューは Alt+Shift+T で開けます。
Rename(名前の変更)
変数名、メソッド名、クラス名を一括変更します。
// 変更前
int x = calculateTotalPrice();
// 変更後(より意味のある名前に)
int totalPrice = calculateTotalPrice();
手順:
- 変数名にカーソルを置く
Alt+Shift+R- 新しい名前を入力してEnter
Eclipse が参照しているすべての箇所を自動で変更してくれます。手動での Ctrl+H 置換より安全です。
Extract Method(メソッドの抽出)
長いメソッドの一部を別メソッドとして切り出します。
// 変更前: 一つのメソッドに処理が詰め込まれている
public void processOrder(Order order) {
// 検証
if (order.getItems().isEmpty()) {
throw new IllegalArgumentException("Items cannot be empty");
}
if (order.getTotalPrice() <= 0) {
throw new IllegalArgumentException("Price must be positive");
}
// 送料計算
double shipping = order.getTotalPrice() > 10000 ? 0 : 500;
order.setShipping(shipping);
// 保存
repository.save(order);
}
// 変更後: 各処理を別メソッドに抽出
public void processOrder(Order order) {
validateOrder(order);
calculateShipping(order);
repository.save(order);
}
private void validateOrder(Order order) {
if (order.getItems().isEmpty()) {
throw new IllegalArgumentException("Items cannot be empty");
}
if (order.getTotalPrice() <= 0) {
throw new IllegalArgumentException("Price must be positive");
}
}
private void calculateShipping(Order order) {
double shipping = order.getTotalPrice() > 10000 ? 0 : 500;
order.setShipping(shipping);
}
手順:
- 抽出したい範囲を選択
Alt+Shift+M- メソッド名を入力
Extract Variable(変数の抽出)
複雑な式や何度も使う値を変数に切り出します。
// 変更前
if (user.getAge() >= 18 && user.getAge() < 65 && user.isRegistered()) {
// 変更後
boolean isEligibleAge = user.getAge() >= 18 && user.getAge() < 65;
boolean isEligible = isEligibleAge && user.isRegistered();
if (isEligible) {
手順:
- 式を選択
Alt+Shift+L- 変数名を入力
Inline(インライン展開)
変数やメソッドを展開して元に戻します。Extract の逆操作です。
// 変更前
boolean isEligible = user.getAge() >= 18;
if (isEligible) { ... }
// 変更後(インライン展開)
if (user.getAge() >= 18) { ... }
手順:
- 変数名にカーソルを置く
Alt+Shift+I
Move(移動)
クラスを別パッケージに移動します。インポート文も自動更新されます。
- クラス名を右クリック
Refactor > Move- 移動先パッケージを選択
Change Method Signature(シグネチャの変更)
引数の追加・削除・並び替えを安全に行います。
- メソッド名にカーソル
Alt+Shift+C- ダイアログで引数を編集
Pull Up / Push Down(継承関係での移動)
- Pull Up: サブクラスのメンバーをスーパークラスへ移動
- Push Down: スーパークラスのメンバーをサブクラスへ移動
継承構造の整理に使います。
リファクタリング履歴と元に戻す
Edit > Undo Refactoring で直前のリファクタリングを一括取り消しできます(複数ファイルにまたがる変更も)。
まとめ
| 操作 | ショートカット | 使いどころ |
|---|---|---|
| Rename | Alt+Shift+R | 名前を意味のあるものに |
| Extract Method | Alt+Shift+M | 長いメソッドを分割 |
| Extract Variable | Alt+Shift+L | 複雑な式を明確に |
| Inline | Alt+Shift+I | 不要な変数を削除 |
| Move | コンテキストメニュー | パッケージ整理 |
リファクタリングは「一度にたくさんやらない」のがコツです。小さく確実に進めましょう。