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

第37回 リファクタリング・カタログ

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

マイグレーション(Migrate)

古いパッケージやクラスを新しいものに移行します。このリファクタリングの歴史はとても古くSwing 1.0.3をSwing1.1に移行するのに用いましたが,今はもう活躍する場はないでしょう。

使い方
  1. 選択状態,カーソル位置に関係なく"Migrate..."を実行

図39 ⁠Package and Class Migration」ダイアログ

図39 「Package and Class Migration」ダイアログ

※ プリセットされているのは「Swing (1.0.3 -> 1.1)」のみ。

「Package and Class Migration」ダイアログで「New...」「Edit...」ボタンを押せば,独自のマイグレーション方法を作成することができます。

図40 ⁠Edit Migration Map」ダイアログ

図40 「Edit Migration Map」ダイアログ

Javaに変換する(Convert to Java)

GroovyのソースコードをJavaに変換します。Android StudioがGradleサポートをする都合でGroovyをサポートしているために付いてきているリファクタリングです。

Android StudioでGroovyを使うのは一筋縄ではいかないので,ほとんど使う機会はないでしょう。

使い方
  1. 「Projectツールウィンドウ」でGroovyのソースコードを選択します(エディタの場合,Groovyのソースコードを開いておく)
  2. "Convert to Java"を実行

図41 モノは試しにbuild.gradleをJavaに変換(クリックすると動きがわかります)

gradleをJavaに変換` &title=`図41 モノは試しにbuild.gradleをJavaに変換` &width=`400` />

※ デモで行っているだけでリファクタリングとしては無意味です。

国際化(Internationalize)

Javaのソースコード中にハードコーディングしている文字列リテラルをリソースバンドルResourceBundleに抜き出し,国際化対応(多言語対応)します。

純粋なJavaの開発ではリソースバンドルを用いて国際化を行うのが標準的ですが,Android開発では strings.xml を使うので,Android Studioでこのリファクタリングが使われることはないと思います。

使い方
  1. リソースバンドルに抜き出したい文字列リテラルにカーソルを置く
  2. "Internationalize..."を実行

図42 ⁠I18nize Hardcoded String」ダイアログ

図42 「I18nize Hardcoded String」ダイアログ

スタイルのインライン化(Inline Style)

Android固有のリファクタリングです。⁠スタイルの抽出」の逆で,レイアウトリソースのスタイル参照style属性)をインライン展開します。

使い方
  1. エディタ上でインライン化したいスタイル参照にカーソルを置く
  2. "Inline Style..."を実行

図43 ⁠Inline Android Style」ダイアログ

図43 「Inline Android Style」ダイアログ

可能ならばスタイルを使用する(Use Style Where Possible)

Android固有のリファクタリングです。レイアウトリソースから既存のスタイルに置き換え可能な部分を探し出し,それらをスタイル参照に置き換えます。⁠スタイルの抽出」と連動して実行することもできます。

使い方
  1. styles.xmlをエディタで開き,スタイル適用させたいスタイルにカーソルを置く
  2. "Use Style Where Possible..."を実行

図45 "Use Style Where Possible..."の実行例(クリックすると動きがわかります)

可能ならばRTLサポートを追加する(Add RTL Support Where Possible)

Android固有のリファクタリングです。RTL(Right-To-Left:アラビア語などのように右から左に表記すること)サポートに必要な設定を加えます。

使い方
  1. 選択状態,カーソル位置に関係なく"Add RTL Support Where Possible..."を実行

図46「Add Right-To-Left (RTL) Support...」ダイアログ

図46 「Add Right-To-Left (RTL) Support...」ダイアログ

まとめ

リファクタリングメニューが多くて正直うんざりもしますが,すべてを使いこなすことは稀です。筆者の経験から言えば,リネーム,抽出系など頻繁に使うのは5つ程度で,残りのメニューは存在を忘れているか,使ったとしても年に数回,もしくは数年に1回程度です。

数年に1回しか使わないリファクタリングであっても,その時はかけがえのない機能だったりします。Android Studioがどんなリファクタリングを出来るのかはサラっとでもいいので認識していると,イザというときに助かるでしょう。

リファクタリング実行も「やり直し("Undo"⁠⁠」が利くので,恐れずあれこれ試してみると良いです。ただ,何かしらのバージョン管理システムと連携している状態にしてからリファクタリングしたほうが,変更のあったファイルをすべて把握できるので精神衛生上好ましいです。

最後にEclipseのリファクタリングとの対比を表1にまとめました。Eclipseから移行した方々の参考になれば幸いです。

表1 EclipseとAndroid Studioのリファクタリングメニューの比較

Eclipseのリファクタリングメニュー「Refactor」メニューの対応項目
"移動...""Move..."
"メソッドの抽出..."Extract → "Method..."
"ローカル変数の抽出..."Extract → "Variable..."
"定数の抽出..."Extract → "Constant..."
"インライン化...""Inline..."
"ローカル変数をフィールドに変換..."Extract → "Fields..."
"匿名クラスをネストに変換...""Convert Anonymous to Inner..."
"型を新規ファイルに移動...""Move..."
"スーパークラスの抽出..."Extract → "Superclass..."
"インターフェースの抽出..."Extract → "Interface..."
"使用可能な場合にスーパータイプを使用...""Use Interface Where Possible..."
"プッシュ・ダウン...""Push Members Down..."
"プル・アップ...""Pull Members Up..."
"クラスの抽出..."Extract → "Delegate..."
"パラメーター・オブジェクトの導入..."Extract → "Parameter Object..."
"間接参照の導入..."※該当無し
"ファクトリーの導入...""Replace Constructor with Factory Method..."
"フィールドのカプセル化...""Encapsulate Fields..."
"宣言された型の一般化..."※該当無し ⁠インテンションで代用可能)
"総称型引数の推測...""Generify..."
"JARファイルのマイグレーション..."※該当無し
"スクリプトの作成..."※該当無し
"スクリプトの適用..."※該当無し
"ヒストリー..."※該当無し

著者プロフィール

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

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

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

Twitter: @masanobuimai