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

第41回 コードフォーマット

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

コード生成に関連するコードスタイルの設定

コードフォーマットのスタイル設定を行う「Preferences / Code Style / Java」ですが,その中の「Code Generation」タブは"Reformat Code..."で適用するスタイルの設定ではなく,"Generate..."などで生成するコードのスタイルを設定します。

ついでなので仕方ないのでしょうがコードスタイルの設定には「Code Generation」のように,直接関係ない設定が紛れ込んでいる場合があります。

Naming
インスタンス変数(Field⁠⁠,クラス変数(Static Field⁠⁠,引数(Parameter⁠⁠,ローカル変数(Local variable)それぞれの接頭子(Name prefix)と接尾子(Name suffix)を定義します。採用しているコーディングルールや好みにもよると思いますが,筆者はここを設定した事はありません。
仮に図12のような古典的なルールを定義したとしましょう(ローカル変数の接頭子にアンダースコア_を付けます⁠⁠。

図12 ローカル変数の接頭子を指定する

図12 ローカル変数の接頭子を指定する

一応というか当然それなりの影響力がありまして,コード補完の候補もここで定義した内容に従うようになります。

図13 ローカル変数名のコード補完の候補に接頭子が付くようになる

図13 ローカル変数名のコード補完の候補に接頭子が付くようになる

なお「Prefer longer names」をONにするとコード補完に出てくる候補は文字数の長い順になります。OFFの場合は,文字数の短い順になります。これは接頭子,接尾子とは関係なく機能するオプションです。

図14 ⁠Prefer longer names」のON/OFFによる補完候補の違い

図14 「Prefer longer names」のON/OFFによる補完候補の違い

こんなどーでもいいことまで設定できるところを見るにつけ,すごいなぁという思いとやり過ぎだろうというあきれた思いが交差します(こうゆう拘りが良い方向にはたらく事がよくあるので侮れません⁠⁠。
Final Modifier
自動生成したコードのローカル変数(local variable)や引数(parameter)にFinal修飾子をつけるかどうかを指定します。
  • Make generated local variables final:ローカル変数にfinalをつける
  • Make generated parameters final:引数にfinalをつける
finalを付けたい気持ちはわかるのですが,そこまで徹底できないので筆者はこの設定を両方ともOFFにしています。
Comment Code
"Comment with Line Comment"や"Comment with Block Comment"でコメントアウトするときに,その行の最初(1桁目)にコメント宣言///* ~ */を記述するかどうかを指定します。
  • Line comment at first column:行コメントを行の先頭から始める
  • Block comment at fist column:ブロックコメントを行の先頭から始める
これがOFFだと文字が始まる直前にコメントが挿入されます。ブロックコメントだとON/OFFの違いがわかりづらいです。個人的には,2つともONにしておくのが好みです。

図15 ⁠Comment Code」の設定が両方とのONの場合(クリックすると動きがわかります)

「⁠Comment Code」の設定が両方とのONの場合` &title=`図15 ⁠Comment Code」の設定が両方とのONの場合` &width=`391` />

図16 ⁠Comment Code」の設定が両方とのOFFの場合(クリックすると動きがわかります)

「⁠Comment Code」の設定が両方とのOFFの場合` &title=`図16 ⁠Comment Code」の設定が両方とのOFFの場合` &width=`400` />

Override Method Signature
自動生成したオーバライドメソッド(インターフェイスの実装メソッド含む)のシグネチャに関する設定です。
  • Insert @Override annotation@Overrideアノテーションを付けるかどうかを指定します。イマドキのJava開発なら迷わずONにしましょう。
  • Repeat synchronized modifiersynchronized宣言を付けるかどうかを指定します。そもそもメソッド宣言にsynchronizedが付いているコードを見かける方が稀です。ほとんど出番がないと思いますが,とりあえずONにしています。
Order of Members
「インテンションやリファクタリングによってメソッドやフィールドを自動生成した場合に,どこに生成するかを指定します」とヘルプには記述してありましたが,実際そうなのか結構アテになりません。次の節で説明する「アレンジメント」とも連動していないので,今となっては死んでる設定項目だと思って無視していよいでしょう。筆者も,この設定を気にしたことがありません。

「Use external annotations」ってなに?

これもIntelliJ IDEA由来の特殊機能で,GradleベースのAndroid Studioでどこまで機能するかわかりません。そんなわけで説明するのも面倒なのですが,せっかくなので紹介しておきます。

この設定,簡単言うと「アノテーションの外部化」です。とは言え,すべてのアノテーションを外部化するのではなく,前回紹介した"Infer Nullity..."の annotaions.jar (HOME>/libのような標準外のアノテーションが対象になります。

annotaions.jarが設定されており,かつ「use external annotaions」をONにした状態で @NotNull@Nullable を宣言しようとすると図17のような「External Annotations preview」ダイアログが表示されます。

図17 ⁠External annotation preview」ダイアログ(クリックすると動きがわかります)

「⁠External annotation preview」ダイアログ` &title=`図17 ⁠External annotation preview」ダイアログ` &width=`400` />

ここで「Add externally」ボタンを押すと,アノテーション情報をどこに保存するか問い合わせくるので適当なディレクトリを指定します(例では <PROJECT_HOME>/annotations を指定しています⁠⁠。するとソースコード上は何も変わりがありませんが,アノテーションの効果@NotNull@Nullableは発生します。

何をなっているかというと,ソースコードにアノテーションを設定する代わりに,Android Studio独自のメタ情報として外部化します。実体は図18のように「External annotation prompt」ダイアログで指定したディレクトリにXMLファイルで記録されます。

図18 ⁠Use external annotations」で外部化されたアノテーション情報

図18 「Use external annotations」で外部化されたアノテーション情報

著者プロフィール

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

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

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

Twitter: @masanobuimai