Android Studio最速入門~効率的にコーディングするための使い方

第36回 リファクタリングについて

この記事を読むのに必要な時間:およそ 4 分

ダイアログ経由のリファクタリングの例

In-placeモードではなく,ダイアログ経由のリファクタリングについて説明します。リネーム以外のリファクタリングは,だいたいこの流れになります。

あるリファクタリングを実行すると,そのリファクタリング専用のダイアログが表示されます。図5はリネームのダイアログ例です。ダイアログ下部のボタンより上の部分は,リファクタリングのコマンドやその対象によって微妙に変化します。リネームだけでも,対象がクラス名,引数名,ローカル変数名などによって設定項目が変化します。

図5 ⁠Rename」ダイアログのバリエーション

図5 「Rename」ダイアログのバリエーション

このオプションをすべて説明するのは骨が折れるので割愛します。要するにリファクタリングの対象範囲を指示しているのです。

この解説での対象は,ダイアログ下部のボタン群です。

図6 リファクタリングダイアログ下部のボタン群

図6 リファクタリングダイアログ下部のボタン群

「Cancel」⁠Help」は読んで字のごとしなので省略します。⁠Refactor」が実行ボタンで,ダイアログに指示した内容でリファクタリングを実行します。解説の本命は残りの「Preview」です。

In-placeモードにしろ,ダイアログの「Refactor」ボタンにしろリファクタリングは即実行で後は仕上げをご覧じろです。ローカル変数やメソッド引数のようにスコープの狭いものならそれでも良いのですが,クラス名の変更など本当にAndroid Studioを信じて即実行していいものかと不安になります。そんなときに使うのが,この「Preview」ボタンです。ボタン名から察するに「リファクタリングのプレビューを表示してくれるのか」と期待しがちですが,実は違います。

プレビューを実行してみるとわかりますが,⁠Findツールウィンドウ」が表示され,そこにリファクタリングの対象がリストアップされます。つまり「リファクタリングではなく「リファクタリングがプレビューされるわけです。

図7 ⁠Preview」ボタンの実行例

図7 「Preview」ボタンの実行例

この「Findツールウィンドウ / Refactoring Previewタブ」ですが,リファクタリング対象がどこに影響を及ぼすかをカテゴリ別に分類して表示します。これが「プレビュー」の意味になります。

この内容をざっと眺め,問題がなければツールウィンドウ下部にある「Do Refactor」ボタンを押して実行します。

問題というのは「ここはやり過ぎなのでリファクタリングしないで欲しい」箇所があるかどうかです。リファクタリングしてほしくない箇所があったら,そこを選択してコンテキストメニューの"Exclude"を実行します。すると,その箇所に取消線が引かれリファクタリング対象から除外されます。戻す場合は"Include"を実行します(大抵 "Exclude"はDELキー,"Include"はINSキーにショートカットキーが割り当てられています⁠⁠。

図8 リファクタリングの対象を指定する

図8 リファクタリングの対象を指定する

この除外設定("Exclude")はプレビューの大事な機能なのですが,あまりにも控えめな機能なためか,それほど知られていないように思えます。

リファクタリングのプレビューで表示される「Findツールウィンドウ」は,検索("Find in Path..."や"Replace in Path...")で表示されるものと似ているようで若干異なります。検索時の「Findツールウィンドウ」については,第18回を参照してください。ここでは,その差分について説明します。違いはツールバーの右列です。増えている機能について表1にまとめました。どれもON/OFFのトグルボタンとして機能します。

表1 リファクタリングプレビューの時のツールバーアイコン(増分)

コマンド名機能
Show Read Access対象が読み込みアクセスを行っている箇所を表示します。
Show Write Access 対象が書き込みアクセスを行っている箇所を表示します。
Show import statements対象がimport文で使用されている箇所を表示します。

特筆すべき点は Preview」です。ツールバーにあるこのアイコンを選択すると「Findツールウィンドウ」の右側に「Previewペイン」が表示されます。ここまでは検索時と同じなのですが,⁠Previewペイン」の下部に,それぞれ以下のタブが追加されています(Previewタブ以外はプレビューの対象によって増減します⁠⁠。

  • Previewタブ
  • Call Hierarchyタブ
  • Dataflow to Hereタブ
  • Dataflow from Hereタブ

図9 ⁠Previewペイン」の表示例

図9 「Previewペイン」の表示例

「Previewタブ」は見ての通り対象箇所のコード片が表示されます。⁠Call Hierarchyタブ」は,対象箇所の呼び出し階層が表示されます。⁠Call Hierarchy」については第18回を参照してください。最後の「Dataflow to Hereタブ」「Dataflow from Hereタブ」は本連載ではまだ紹介していない分析機能のひとつです(後の回で紹介します⁠⁠。

このようにリファクタリングのプレビューでは,対象と影響箇所を多角的に評価してからリファクタリングを実行するかどうかを判断することができます。ここまでできると,さらに欲が出るのですが,今のところプレビューで分類した除外設定を記録して,他で再利用することはできません。あくまでその時限りです。

著者プロフィール

今井勝信(いまいまさのぶ)

システムエンジニア。日本ユニシス株式会社所属。仙台在住。

Android開発はまったくやったことがないけれどIntelliJ IDEAが大好き。

Twitter: @masanobuimai