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

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

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

おまけ:モジュールのリネーム(非公式)

リファクタリングとはちょっとズレますが,モジュールのリネームについて言及しておきます。

特に凝ったことをしない限り,Android Studioは「1プロジェクト1モジュール」のプロジェクトを作成します。モジュール名は「New Project」ウィザードで指定できますが,ついうっかりデフォルトのままにして「app」にしている事が多いのでは?と思います。

図10 大抵モジュール名は「app」になっている

図10 大抵モジュール名は「app」になっている

デフォルトの「app」のままでも困ることはそう無いと思うのですが,そこはそれ「名前重要」なので気になる人にはとても気になると思います。ちなみに,このモジュール名がどこにどう使われるかと言えば,せいぜい生成するAPKファイルの名前くらいです。

このモジュールのリネームですが,簡単そうに見えて意外と面倒です。まず最初に思いつくのが「Project Structure上でリネームすること」ですが「Project Structure / Modules」ではモジュールの追加・削除ができるだけで,既存のモジュールの名称を変更することはできません。

図11 ⁠Project Structure / Modules」設定画面

図11 「Project Structure / Modules」設定画面

では,どうやるかというと,次のような段取りを踏みます。これは筆者の経験則でやっている手順なので正式なものでは無いことをご了承ください(そもそも,どれほど需要があるのだろう……)⁠

1.モジュールをリネーム
「Projectツールウィンドウ」上で対象とするモジュールを選択して,"Rename..."を実行します。⁠Select Refactoring」ダイアログが表示されるので,それぞれ順番に「ディレクトリ名のリネーム(Rename dirctory)⁠「モジュール名のリネーム(Rename module)⁠の両方を実行します。仮に,モジュール名を「app」から「sample」に変更したとして説明を続けます。

図12 ⁠Select Refactoring」ダイアログ(クリックすると動きがわかります)

「⁠Select Refactoring」ダイアログ` &title=`図12 ⁠Select Refactoring」ダイアログ` &width=`400` />

図13 モジュール名の変更後の様子

図13 モジュール名の変更後の様子

2.Gradleのビルドスクリプトのつじつまを合わせる
モジュール名が変わった事によるGradle側のつじつま合わせを行います。本来ならモジュールのリネームの時に連動してくれるとAndroid Studioを使っている甲斐があるのですが,まだそこまでやってはくれません(むしろ,たまに余計なことをしたりと不安定です)⁠
必ずやるのは <PROJECT_HOME>/settings.gradle の変更です。これはGradleのマルチプロジェクトに必要な設定ファイルで「どのプロジェクトたちで構成されたマルチプロジェクトなのか」を定義してあります。ややこしくて申し訳ありませんが「Gradleのプロジェクト=Android Studioのモジュール」です。

リスト1 <PROJECT_HOME>/settings.gradleの修正例

    include ':app'
         ↓
    include ':sample'
※モジュールのリネームの過程で余計なゴミが混入する場合があるので,なるべく気にかけておいてください。
この他に,サブプロジェクトのbuild.gradledependenciesでリネームしたモジュール(サブプロジェクト)を参照しているものがあれば,それもあわせて修正しておきます。

以上の作業が終わったら,⁠Tools → Android」メニューかツールバーから "Sync Project with Gradle Files"」を実行してビルドスクリプトの変更をAndroid Studioに取り込んでください。

まとめと次回の予定

リネームを例にAndroid Studioのリファクタリングのやり方を紹介しました。次回は「Refactor」メニューにあるリファクタリング項目をひとつひとつ紹介していきます。

著者プロフィール

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

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

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

Twitter: @masanobuimai