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

第40回 分析機能について

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

Eclipseのクリーンアップとの比較

唐突ですが,Eclipseとの機能比較について語ります。Eclipseには「クリーンアップ」というコードを整理する便利な機能があります。

図10 Eclipseの「クリーンアップ」コマンド

図10 Eclipseの「クリーンアップ」コマンド

EclipseからAndroid Studioに移行した人のうち幾人かは,このクリーンアップに相当する機能を探して見つけられず落胆しているようです。結論から言えば,Android StudioにEclipseのクリーンアップに合致する機能はありません

その代わり先ほど紹介したインスペクション機能をうまく活用することで,クリーンアップに類似した事を実現できます。次からEclipseのクリーンアップの個々の設定に対応するAndroid Studioのインスペクタを紹介します。見出しは図11のクリーンアップ設定のタブ名で,文中の『』はインスペクタの項目を指します。中にはインスペクタで対応できない項目もあるので,代替策があれば都度補足します。

図11 Eclipseのクリーンアップのプロファイル設定画面

図11 Eclipseのクリーンアップのプロファイル設定画面

※プロジェクトプロパティからJavaコード・スタイル→クリーンアップで,プロファイルの「編集」をクリック

コード・スタイル

「制御ステートメント」グループについては以下の通りです。

if/while/for/do ステートメントでブロックを使用
今回の「Analyze」メニューのカバー範囲ではなく,まだ紹介していないコードフォーマットでカバーします。具体的には「Preferences / Code Style」「Wrapping and Braces」で指定して,リフォーマット("Reformat Code...")します。
オプションの「常時」に相当するのは『Code style issues / Control flow statement without braces』です。
forループを拡張に変換
『Java language level migration aids / 'for' loop replaceable with 'for each'』が相当します。

「式」グループについては以下の通りです。

式で括弧を使用
オプションの「常時」に相当するのは『Code style issues / Unclear expression』です。もう一方の「必要な場合のみ(不要な括弧を除去⁠⁠」に相当するのは『Code style issues / Unnecessary parentheses』です。

「変数宣言」グループについては以下の通りです。

使用可能な場合,修飾子 'final' を使用(privateフィールド,パラメータ,ローカル変数)
『Code style issues / Field may be final』『Code style issues / Local variable or parameter can be final』が相当します。
この逆(不必要な finalを除去する)のことを行う『Code style issues / Unnecessary 'final' on local variable or parameter』という項目もあります。

コード編成

「フォーマッター」グループについては以下の通りです。

ソース・コードのフォーマット
「Analyze」メニュー(インスペクション)のカバー範囲ではありません。コード整形は"Reformat Code..."で行います。
末尾の空白の除去
「Analyze」メニュー(インスペクション)のカバー範囲ではありません。エディタの設定です。⁠Preferences / Editor」設定画面にある「Strip trailing spaces on Save」でファイル保存時の振る舞いとして空白の除去を指定します。指定できるオプションは「Modified Lines(変更行だけを対象にする⁠⁠/All(すべての行を対象にする⁠⁠/None(空白の除去を行わない⁠⁠」の3つです。
インデントの訂正
これも「Analyze」メニュー(インスペクション)のカバー範囲ではなく,コード整形時に行われます。その内容は「Preferences / Code Style」設定画面の設定に従います。Eclipseでいうところの「インデント訂正をしない」はAndroid Studioでは指定できません。

「メンバー」グループについては以下の通りです。

メンバーのソート
「Analyze」メニュー(インスペクション)のカバー範囲ではありません。コード整形のひとつのアレンジメント("Rearrange Code")時に実施されます。その内容は「Preferences / Code Style」設定画面のアレンジメント設定に従います。

メンバー・アクセス

「非静的アクセス」グループについては以下の通りです。

フィールド・アクセスに 'this' 修飾子を使用
メソッド・アクセスに 'this' 修飾子を使用
上の2つは同じ設定で適用されます。Eclipseのように別々に扱うことはできません。オプションの「必要な場合のみ」に相当するのは『Code style issues / Unnecessary 'this' qualifier』で,もうひとつの「常時」に相当するのは『Code style issues / Instance field access not qualified with 'this'』『Code style issues / Instance field access not qualified with 'this'』です。

「静的アクセス」グループについては以下の通りです。

宣言されているクラスを修飾子として使用
直接対応する項目はありません。面倒ですが『Imports / Add Single-Member Static Import』『Add On Demand Static Import』staticインポート化したのち『Imports / Expand Static Import』で再展開すると期待通りの結果になります。
ちょっと毛色が違いますが「無駄なstaticアクセスを除去する」という項目(⁠⁠Code style issues / Unnecessarily qualified static access⁠⁠)もあります。
フィールド・アクセスの修飾
メソッド・アクセスの修飾
この2つをあわせた項目に『Code style issues / Unqualified static access』があります。
サブタイプを介するすべてのアクセスの変更
『Probable bugs / Static field referenced via subclass』『Probable bugs / Static method referenced via subclass』が相当します。
インスタンスを介するすべてのアクセスの変更
『General / Access static member via instance reference』が相当します。

欠落コード

「注釈」グループについては以下の通りです。

'@Override' と インターフェース・メソッドの実装 (1.6以上)
『Class structure / Missing @Override annotation』が相当します。
'@使用すべきではない'
この設定の意味は@Deprecated を適切に使う」という項目です。⁠Class structure / Missing @Deprecated annotation」が相当します。

「潜在的なプログラミングの問題」グループについては以下の通りです。

シリアル・バージョン ID の追加
『Serialization issues / Serializable class without 'serialVersionUID'」が相当します。ただし,Eclipseのように '1L' を設定することはできません。

「未実装コード」グループについては以下の通りです。

実装されていないメソッドの追加
これはそもそもコンパイルエラーになるので,これといった設定項目はありません。

不要なコード

「未使用コード」グループについては以下の通りです。

未使用のインポートの除去
『Imports / Unused import』が相当します。
未使用の private メンバーの除去(タイプ,コンストラクター,フィールド,メソッド)
未使用のローカル変数を除去
上の2つをあわせて『Declaration redundancy / Unused symbol』が相当します。オプションでチェックする対象を「Check Classes(クラス⁠⁠/Check Fields(フィールド⁠⁠/Check Local Variables(変数⁠⁠/Check Methods(メソッド⁠⁠/Check Parameters(引数⁠⁠」の5つから選択します。

「不要なコード」グループについては以下の通りです。

不要なキャストの除去
『Verbose or redundant code constructs / Redundant type cast』が相当します。
不要な '$NON-NLS$' タグを除去
かろうじて言えば『Internationalization issues / Hard coded strings』が相当します。オプションの「Ignore lines containing this comment」に無視させたいコメントキーワードを設定できます(Android StudioのデフォルトではNON-NLSです⁠⁠。

著者プロフィール

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

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

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

Twitter: @masanobuimai