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

第42回コードスタイルの設定

はじめに

前回の続きでコードフォーマットの話です。今回はコードフォーマットの設定について紹介します。Android Studioのコードフォーマット設定は非常に多く、正直うんざりする作業です。それと、当然のようにEclipseと設定項目が似ているようで違います。

幸いなことに、最近のAndroid StudioはEclipseのEclipseのコードフォーマット設定をインポートできるようになりました。

そうは言っても世の中は広く、少数ではありますがカスタマイズ熱中症に罹患した方々がいます。これに罹るとデフォルト設定ではガマンできず、設定できるものは変更しないと気が済みません。今回はJavaスタイルを中心に、Android Studioのコードスタイル設定について紹介します。

共通のコードスタイル

Java固有の話に入る前に共通のコードスタイルについて触れておきます。⁠Preferences / Code Style / General」に言語別ではない共通の設定を行います。Android Studioの設定項目はEclipse並かそれ以上に多く複雑です。⁠思いもよらない設定が、思いもしないところにある」なんてのはザラですので、まずは基本から……。

図1 ⁠Preferences / Code Style / General」設定画面
図1
Line separator(for new files)
意外なことに改行コードの指定がこんなところにあります。ただし、新規作成するファイルに限ります。すでに作成済みのファイルは、そのファイルの改行コードを優先します。
Right margin(columns)
右マージンを指定します。このマージンの値が、以降のスタイル設定にある程度の影響を及ぼします。
一般的には「80~140」程度だと思いますが、筆者は右マージン値による折り返しを好まないため、無駄に大きな値(999など)を設定しています。右マージン指定を無効にできないため、このような方法をとるしかありません。

「Default Indent Options」ではタブやインデントの設定を行います。タブやインデントは言語ごとに指定することもできるので、ここの設定値は主にテキストファイルの設定値と思ってください。見ての通り、Eclipseの該当項目より設定できることは多くありません。

Use tab character
インデントにハードタブを使うかどうかを指定します。ONにするとハードタブ\tを用い、OFFにするとソフトタブ(スペース)を用います。インデントのタブ論争も根の深い問題なので、そこには触れません。ただ「筆者はソフトタブ(スペース)を好む」とだけ記しましょう。
「Smart tabs」を指定すると、インデントのみハードタブを使い、それ以外はスペースを用いるいわゆるSmart Tabsモードになるはずなのですが、実際はそうならずハードタブで補填されます。おそらくバグなのだと思います。IntelliJ IDEAのBTS(YouTrack)を覗いたところ、そのものズバリなチケットがあがっていました。
OC-6187 Formatter: 'Smart tab' option doesn't convert spaces to tabs correctly
チケットそのものはAppCodeで報告されていますが、AppCodeもAndroid Studioも根っこはIntelliJで共通なので同じ問題を抱えています。
Tab size
ハードタブの文字数を指定します。環境によってハードタブの文字数が異なることを嫌うのであれば、通常は「8」を指定しておきましょう。
Indent
インデントの文字数を指定します。Javaの場合は「4」ですが、General(共通)の場合は「2」に設定しています(個人的な好みです⁠⁠。
Continuation indent
「継続行」のインデントの文字数を指定します。こちらもJavaの場合は「8」ですが、Generalでは「4」にしています(これも好みです⁠⁠。

コードフォーマッタを抑止する「Formatter Control」前回説明したとおりです。

Javaのコードスタイル

「Preferences / Code Style / Java」で設定を行います。コードスタイル設定のド本命で設定できる項目も多岐にわたります。いつものように、Eclipseと似ているようで似ていないのですが、一応の目安として類似項目を表1にまとめました。Eclipseの設定項目(タブ名)とは、Eclipseの「設定 → Java → フォーマッター」から「編集...」ボタンを押した「プロファイル」ダイアログのタブを指します。

図2 ⁠Preferences / Code Style / Java」設定画面
図2
図3 Eclipseのフォーマッターの「プロファイル」ダイアログ
図3
表1 Android StudioとEclipseの設定項目の対応付け
Android Studioの設定項目(タブ名)Eclipseの設定項目(タブ名)
Tabs and Indentsインデント
Spaces空白
Wrapping and Braces中括弧、行折り返し、制御ステートメント
Blank Linesブランク行
JavaDocコメント
Imports※該当なし(⁠⁠設定 → Java → コード・スタイル → インポートの編成」に相当)
Arrangement※該当なし
Code Generation※該当なし(⁠⁠設定 → Java → コード・スタイル」に相当)

以降、Android Studioの設定項目(タブ名)別に説明します。⁠Imports」⁠Arrangment」「Code Generation」前回説明済みなので省略します。

Tabs and Indents

タブとインデントの設定です。ほとんどが「共通のコードスタイル」と同じなので、差分のみ説明します。

Label indent
「ラベル」のインデント文字数を指定します。⁠Absolute label indent」をチェックすると、先頭行にラベルを記述します。
Do not indent top level class members
ここをONにすると、トップレベルのクラスのメンバ(フィールドやメソッドなど)はインデントを行いません。この不思議な設定項目は何のためにあるのか長年の疑問です(こうゆう特殊なスタイルが実在するってことなんでしょうか?⁠⁠。
Use indents relative to expression start
「継続行のインデント(Continuation indent⁠⁠」をどこから開始するかを指定します。OFFの場合、直前のコードブロックのインデント位置を基準にしますが、ONにすると直前の式の開始位置を基準にします。⁠Indent:2, Continuation indent:4」で具体例をリスト1リスト2 に示します。
リスト1 ⁠Use indents relative to expression start」がOFFの場合
|<- ここが基準
 System.out.println("%s%s%s\n",
     foo, bar, boo);
リスト2 ⁠Use indents relative to expression start」がONの場合
                   |<- ここが基準
 System.out.println("%s%s%s\n",
                       foo, bar, boo);

Eclipseではインデントの設定項目の中に「列内のフィールドの位置合わせ」という項目がありますが、Android Studioで相当する項目はここではなく「Wrapping and Braces」にあります(項目名は『Field groups / Align in columns⁠⁠。

Spaces

空白(スペース)に関する設定を行います。Eclipseの設定項目とは見せ方がだいぶ異なります。項目の並び順は「Java要素ごとにオプションをソート」より「構文要素ごとにオプションをソート」にしたほうがAndroid Studioと比較しやすいです。

図5 Eclipseの「空白」設定画面
図5
Before Parentheses
小括弧(の前に空白をつけるかどうかを指定します。Eclipseと異なり、閉じ小括弧)への指定はありません。
  • Method declartion parentheses : メソッド宣言の小括弧の前
  • Method call parentheses : メソッド呼び出しの小括弧の前
  • 'if' parenthesesif文の小括弧の前
  • 'for' parenthesesfor文の小括弧の前
  • 'while' parentheseswhile文の小括弧の前
  • 'switch' parenthesesswitch文の小括弧の前
  • 'try' parenthesestry文の小括弧の前
  • 'catch' parenthesescatch文の小括弧の前
  • 'synchronized' parenthesessynchronized文の小括弧の前
  • Annotation parentheses : アノテーションの小括弧の前
Around Operators
演算子のまわり(前後)に空白をつけるかどうかを指定します。Eclipseと異なり、演算子の前・後ろといった細かい指定はできません。
  • Assignment operators (=, +=, ...) : 代入演算子の前後
  • Logical operators (&&, ||) : 論理演算子の前後
  • Equality operators (==, !=) : 比較演算子の前後
  • Relational operators (<, >, <=, >=) : 比較演算子の前後
  • Bitwise operators (&, |, ^) : ビット演算子の前後
  • Additive operators (+, -) : 加減算演算子の前後
  • Multiplicative operators (*, /, %) : 乗除算演算子の前後
  • Shift operators (<<, >>, >>>) : シフト演算子の前後
  • Unary operators (!, -, +, ++, --) :単項演算子の前後
  • Lambda arrow : ラムダ記号->の前後(Java8用です⁠⁠。
  • Method reference double colon : メソッドリファレンス::の前後(これもJava8ですね……⁠⁠。
Before Left Brace
中括弧{の前に空白をつけるかどうかを指定します。小括弧(と同じく、閉じ中括弧}への指定はありません。
  • Class left brace : クラス宣言の中括弧の前
  • Method left brace : メソッド宣言の中括弧の前
  • 'if' left braceif-else文のifの中括弧の前
  • 'else' left braceif-else文のelseの中括弧の前
  • 'for' left bracefor文の中括弧の前
  • 'while' left bracewhile文の中括弧の前
  • 'do' left bracedo-while文のdoの中括弧の前
  • 'switch' left braceswitch文の中括弧の前
  • 'try' left bracetry-catch-finally文のtryの中括弧の前
  • 'catch' left bracetry-catch-finally文のcatchの中括弧の前
  • 'finally' left bracetry-catch-finally文のfinallyの中括弧の前
  • 'synchronized' left brace : synchronizedブロックの中括弧の前
  • Array initializer left brace : 配列の初期化の中括弧の前
  • Annotation array initializer left brace : アノテーションの配列初期化の中括弧の前
Before Keywords
特定のキーワードの前に空白をつけるかどうかを指定します。設定項目を見ると、これをわざわざOFFにする理由がわからないものばかりです(Eclipseに、これに相当する設定項目が無いのも頷けるかと⁠⁠。
  • 'else' keywordif-else文のelseの直前
  • 'while' keyworddo-while文のwhileの直前
  • 'catch' keywordtry-catch-finally文のcatchの直前
  • 'finally' keywordtry-catch-finally文のfinallyの直前
Within
指定した対象の内側を空白で囲みます。たとえば、メソッド引数の括弧の間などです。
図6 ⁠Within / Method call parentheses』の例
図6
Eclipseには、これにピッタリ当てはまる設定項目はありません(⁠⁠左小括弧の後」「右小括弧の前」などの組み合わせで再現できます⁠⁠。
  • Code braces : コードブロックの内側
  • Brackets : 大括弧の内側
  • Array initializer braces : 配列初期化の中括弧の内側
  • Grouping parentheses : 式で用いる括弧の内側
  • Method call parentheses : メソッド呼び出しの小括弧の内側
  • Empty method call parentheses : 引数なしのメソッド呼び出しの小括弧の内側
  • Method declartion parentheses : メソッド宣言の小括弧の内側
  • Empty method declartion parentheses : 引数なしのメソッド宣言の小括弧の内側
  • 'if' parenthesesif文の小括弧の内側
  • 'for' parenthesesfor文の小括弧の内側
  • 'while' parentheseswhile文の小括弧の内側
  • 'switch' parenthesesswitch文の小括弧の内側
  • 'try' parenthesestry-with-resource文のtryの小括弧の内側
  • 'catch' parenthesestry-catch文のcatchの小括弧の内側
  • 'synchronized' parenthesessynchronizedブロックの小括弧の内側
  • Type cast parentheses : キャストの小括弧の内側
  • Annotation parentheses : アノテーションの小括弧の内側
In Ternary Operator(?:)
三項演算子?:に関する空白の指定です。珍しく「演算子の後」という指定があります。そういえば、Eclipseのフォーマッタには三項演算子に関する項目が無かったような気がします……。
  • Before '?' : 三項演算子の ? の前
  • After '?' : 三項演算子の ? の後
  • Before ':' : 三項演算子の : の前
  • After ':' : 三項演算子の : の後
Within Type Arguments
型パラメータに関する空白の指定です。設定項目は1つしかなく、Eclipseのようなきめの細かい設定はできません。
  • After comma : 型パラメータ指定のカンマの後
Other
その他の空白指定です。変わったものばかりで、デフォルト以外に設定する事は無いと思います。
  • Before comma : カンマの前(すべてのカンマが対象ではなく、主に配列宣言のカンマが対象になります)
  • After comma : カンマの後(対象は上記と同じです)
  • Before semicolon : セミコロンの前(これも、for文やtry-with-resource文のセミコロンが対象のようです)
  • After semicolon : セミコロンの後(対象は上記と同じです)
  • After type cast : キャストの後(具体的には図7の通りです)
図7 ⁠Other / After type cast』の例
図7

Wrapping and Braces

折り返しや中括弧{の位置に関する設定です。なぜこの2つを同じタブにまとめたのか良くわかりませんが気にせずいきましょう。

Keep when reformatting
リフォーマットの対象外にする要素を指定します。ポリシーというか好みの分かれる部分なので、それぞれプレビューを見ながらON/OFFを検討してください。
  • Line breaks : 途中の改行位置。意図的なものであれば残すことに意味はあるのですが、テキトウにやったのと見分けるのが難しいところです。
  • Comment at first column : 行の先頭に記述したコメント。TODOコメントなど目立たせるために意図的に行頭にコメントを記述する場合もあるので、これも悩みどころです。
  • Control statement in one line : 1行で記述した制御文。個人的好みとしてはリフォーマットの対象外にしたい要素です。
  • Multiple expressions in one line : 1行で記述した複雑な式。
  • Simple blocks in one line : 中身の無いブロックを1行で記述します。筆者は以下の2つも含めて、ONにするのが好みです。
  • Simple method in one line : 中身の無いメソッドを1行で記述します。
  • Simple classes in one line : 中身の無いクラスを1行で記述します。
Ensure right margin is not exceeded
右マージンを超過しないようにします。
Braces placement
中括弧{の位置を指定します。それぞれの設定項目の選択肢の意味は表2の通りです。
  • In class declartion : クラス定義の中括弧の位置
  • In method declartion : メソッド定義の中括弧の位置
  • Other : それ以外の中括弧の位置
表2 ⁠Braces placement』の選択肢
選択肢意味
End of line常にその行の終端
Next line if wrapped行の終端だが、折り返す場合は次の行へ
Next line常に次の行
Next line shifted常に次の行で、ついでに1段インデントを下げる。インデントと同じ位置に中括弧が配置されるので、すごくヘンです(これが好きな人、ごめんなさい)
Next line, each shifted常に次の行で、ついでにインデントを下げて中括弧を配置し、さらにインデントを下げてブロックボディを記述します(GNUスタイル⁠⁠。
Extends/implements list
extendsimplements の対象(親クラスやインターフェイスのリスト)の折り返しを指定します。指定できる選択肢は表3の通りです。この表3の選択肢は他の項目でも多く登場するので、大ざっぱで良いので覚えておいてください。
"Wrap if long"と"Chop down if long"は違いがわかりづらいのですが、後者はインターフェイスのリスト部分――長い名前のインターフェイスを複数実装している場合に効果が出ます。
  • Align when multiline : 複数のインターフェイスを実装しているときのインデント位置の指定をします。ONでインデントを最初のインターフェイスの桁に揃えます。OFFの場合、単純に継続行としてインデントを下げます。
表3 ⁠Extends/implements list』の選択肢
選択肢意味
Do not wrap折り返ししない
Wrap if long右マージン以上だったら折り返す
Chop down if long右マージン以上だったら、さらにインデントを下げて折り返す
Wrap always常に折り返しする
Extends/implements keyword
extendsimplementsキーワードの折り返しを指定します。選択肢は表3と同じです(ただし "Chop down if long" はありません⁠⁠。
Throws list | Do not wrap / Wrap if long / Chop down if long / Wrap always
throws に宣言した例外リストの折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : 複数の例外の送出を宣言しているときのインデント位置を指定します。ON/OFFの意味は『Extends/implements list』と同じです。
  • Align 'throws' to method startthrows キーワードまたは送出する例外を折り返したときにインデントせず、メソッドの開始行と同じ位置に配置します。
Throws keyword
throws キーワード の折り返しを指定します。選択肢は表3と同じです(ただし選択肢に『Chop down if long⁠⁠ はありません⁠⁠。
Method declartion parentheses
メソッド定義のパラメタ(引数)部分の折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : 折り返ししたときのインデント位置を最初のパラメタ位置に合わせるか、単純に継続行としてインデントするかを指定します。
  • New line after '(' : メソッド定義の ( の後に改行するかを指定します。
  • Place ')' on new lin : メソッド定義の ) の前で改行するかを指定します。
Method call arguments
メソッドを呼び出すときのパラメタ(引数)部分の折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : 引数リストが複数あるときのインデント揃えを指定します。
  • Take priority over call chain wrapping : 後述する『Chained method calls』より優先するかを指定します。これ単独では意味が無く『Align when multiline』と組み合わせて初めて効果がでるようです。
  • New line after '('(の後に改行します。
  • Place ')' on new line) の前に改行します。
Method parentheses
メソッドの括弧位置(主に閉じ小括弧)のインデント位置を指定します。
  • Align when multiline : 閉じ小括弧のインデント位置を指定します。これ単独では意味は無く「Method declaration parentheses」「Method call arguments」「Place ')' on new line」がONのときに効果があります。
Chained method calls
複数のメソッドを連鎖的に呼び出すメソッドチェインのときの折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : メソッドチェインが複数行あるときのインデント位置を最初のメソッドチェインにあわせるか、単純に継続行としてインデントするかを指定します。
Field groups
フィールドに関する設定ですが、インスタンス変数だけではなく、クラス変数(定数)にも効果があります。
  • Align in columns : 可視性public, protected, privateなど)や型や変数名、代入演算子や初期値など、要素ごとに桁揃えをするかを指定します。
リスト3 "Align in columns"がOFFの場合
public static long ZERO = 0;
private int f1 = 1;
protected String field2 = "";
リスト4 "Align in columns"がONの場合
public static int    ZERO   = 0;
private       int    f1     = 1;
private       String field2 = "";
'if()' statement
if文に関する折り返しを指定します。
  • Force braces : 中括弧 {} を強制的に付けるかどうかを指定します。選択肢は のとおりえす。これ以降でも何度か「Force braces」という設定項目が登場しますが、意味はすべて同じです。
  • 'else' on new lineelse キーワードを常に次の行から開始するかを指定します。
  • Special 'else if' treatmentelse if を特別扱いするかを指定します。ONにした場合、リスト5のように整形されます。
リスト5 "else if" を特別扱いした例
if (2 < 3) return;
else                   // ← "else if" ではなく else / if として扱う
  if (2 > 3) return;
  else return;
表4 ⁠'if()' statement / Force braces』の選択肢
選択肢意味
Do no force中括弧を強制しない
When multiline複数行の場合、中括弧を付ける
Always常に中括弧を付ける
'for()' statement
for文に関する折り返しを指定します。for() statement』自体の選択肢は表3と同じで、for文の小括弧内の式に適用されます。
  • Align when multiline : 繰り返し条件式が複数あるときのインデント揃えを指定します。
  • New line after '('(の後に改行します。
  • Place ')' on new line) の前に改行します。
  • Force braces : 中括弧の指定です。選択肢は 表4 と同じです。
'while()' statement
while文に関する整形を指定します。
  • Force braces : 中括弧の指定です。選択肢は 表4 と同じです。
'do ... while()' statement
do ~ while文に関する折り返しを指定します。
  • Force braces : 中括弧の指定です。選択肢は 表4 と同じです。
  • 'while' on new linewhile キーワードを常に次の行から開始するかを指定します。
'switch()' statement
switch文に関する整形を指定します。
  • Indent 'case' branchescase 文をさらにインデントするかを指定します。
'try-with-resources'
Java7から追加されたtry-with-resources文に関する折り返しを指定します。この項目自体の選択肢は表3と同じで、try文の小括弧内の式(リソース宣言)に適用されます。
  • Align when multiline : リソース宣言が複数あるときのインデント揃えを指定します。
  • New line after '('(の後に改行します。
  • Place ')' on new line) の前に改行します。
'try' statement
try ~ catch文に関する折り返しを指定します。
  • 'catch' on new linecatch キーワードを常に次の行から開始するかを指定します。
  • 'finally' on new line : finally キーワードを常に次の行から開始するかを指定します。
Binary expressions
二項演算式――というより条件式と呼んだほうがわかりやすいでしょう。if文やwhile文、三項演算子などtrue/falseを返すすべての式が対象になります。ただ、試した限りでは条件式に留まらずすべての演算式が対象になっていました(バグでしょうか……⁠⁠。なお選択肢は表3と同じです。
  • Align when multiline : 式が複数行に渡るときのインデント揃えを指定します。
  • Operation sign on next line : 継続行を常に演算子から開始するかを指定します。
  • Align parenthesised when multiline : 式が複数行に渡るときのカッコ位置の揃えを指定します。……が、イマイチ効き目がわかりませんでした。
  • New line after '('(の後に改行します。
  • Place ')' on new line) の前に改行します。
Assignment statement
代入命令の折り返しを指定します。先ほどの『Binary expressions』と意味が被りそうですが、こちらは代入演算子=だけを対象としています。選択肢は表3と同じです。
  • Align when multiline : 複数行の代入文a = b = c = 10; のようなケース)のインデント揃えを指定します。
  • Assignment sign on next line : 継続行を常に代入演算子から開始するかを指定します。
Ternary operator
三項演算子の折り返しを指定します。先ほどの『Assignment statement』と同じように三項演算子?:だけ を対象としています。選択肢は表3と同じです。
  • Align when multiline : 複数行の式のインデント揃えを指定します。
  • '?' and ':' signs on next line : 継続行を常に三項演算子から開始するかを指定します。
Array initializer
配列の初期化に関する折り返しを指定します。選択肢は表3と同じです。
  • Align when multiline : 配列の初期化が複数行に渡るときのインデント揃えを指定します。
  • New line after '{'{の後に改行します。
  • Place '}' on new line} の前に改行します。
Modifier list
装飾子に関する折り返しを指定します。
  • Wrap after modifier list : 装飾子のあとで改行するかを指定します。
Assert statement
assert文に関する折り返しを指定します。選択肢は表3と同じです。
  • ':' signs on next line : 継続行を常に : から開始するかを指定します。
Class annotations
クラスに対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Method annotations
メソッドに対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Field annotations
フィールドに対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Parameter annotations
メソッドのパラメタ(引数)に対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Local variable annotations
ローカル変数に対するアノテーションの折り返しを指定します。選択肢は表3と同じです。
Enum annotations
列挙型の宣言に関する折り返しを指定します。選択肢は表3と同じです。

Blank Lines

空白行に関する設定です。

Keep Maximum Blank Lines
リフォーマットしても残しておく空白行の最大値を指定します。ここで指定した行数より多い(無駄に見える)空白行は "Reformat Code..." を実行すると、それぞれ指定した最大値まで削除されます。
  • In declarations : クラスやインターフェイスの宣言内の空白行(主にメソッドの外側)
  • In Code : メソッド内側にある空白行。
  • Before '}' : 閉じ中括弧 } の前の空白行
Minimum Blank Lines
「Keep Maximum Blank Lines」とは逆にリフォーマットすると最低限挿入する空白行の行数を指定します。
  • Before package statementpackage文の前の空白行。
  • After package statementpackage文の後の空白行。
  • Before importsimport文の前の空白行。
  • After importsimport文の後の空白行。
  • Around class : クラス全体の前後の空白行。
  • After class header : クラスヘッダclass宣言)の後の空白行。
  • After anonymous class header : 匿名クラスのクラスヘッダの後の空白行。
  • Around field in interface : インターフェイス・フィールドの前後の空白行。
  • Around field : クラス・フィールドの前後の空白行。
  • Around method in interface : インターフェイス内のメソッド宣言前後の空白行。
  • Around method : メソッド全体の前後の空白行。
  • Before method body : メソッド本体の前(メソッド宣言の { の後)の空白行。

JavaDoc

Javadocコメントに関する設定です。IntelliJ IDEA10とか、そのあたりの頃は日本語の扱いがテキトウでJavadocコメントの整形なんてロクな事にならないので、指定しない方がマシな項目でした。最近では日本語の扱いも多少マシになったので、ある程度アテにしてもよくなりました。最新のIDEA13をベースにしているAndroid Studioも当然大丈夫です。

  • Enable JavaDoc formatting : Javadocの整形を行うかどうかを指定します。Android StudioのJavadocの整形が気に入らなときはここをOFFにしましょう。
Alignment
Javadocタグの桁揃えを指定します。
  • Align parameter descriptions@param タグの説明文の桁揃えを行います。
  • Align thrown exception descriptions@throws タグの説明文の桁揃えを行います。
Blank lines
Javadocコメント中の空白行の扱いを指定します。空白行の指定といっても指定した箇所に空白行を1行挿入するだけで、挿入する行数を変えることはできません。
  • After description : Javadocコメント本文とJavadocタグの間に空白行を挿入します。
  • After parameter descriptions@paramタグと他のJavadocタグの間に空白行を挿入します。
  • After return tag@returnタグと他のタグの間に空白行を挿入します。
Invalid tags
不正なJavadocタグをそのままにしておくかを決めます。それぞれの項目でOFFにすると、該当箇所は"Reformat Code..."を実行すると不正なタグは消えて無くなります。
  • Keep invalid tags : 不正なJavadocタグをそのままにします。
  • Keep empty @param tags : 説明文が空の@paramタグをそのままにします。
  • Keep empty @return tags : 説明文が空の@returnタグをそのままにします。
  • Keep empty @throws tags : 説明文が空の@throwsタグをそのままにします。
Other
Javadocコメントに関するその他の設定です。
  • Enable leading asterisks : Javadocコメントの継続行の行頭にアスタリスク*を付けるかを指定します。
  • Use @throws rather than @exception@exceptionタグではなく、@throwsタグを使います。
  • Wrap at right margin : 右マージンを超えるコメントを折り返します。日本語の文区切りが実に大ざっぱです。
  • Generate "<p/>" on empty lines : 空白行を <p/> に置き換えます。
  • Keep empty lines : 空白行をそのまま維持します。
  • Do not wrap one line comments : 1行コメント/** こうゆうやつ */を折り返ししません。
  • Preserve line feeds : 任意の改行位置をそのままにします。OFFにすると『Wrap at right margin』などに巻き込まれて改行位置が調整されます。
  • Parameter descriptions on new line@param@throwsの説明文を改行してから記述します。

XML

冒頭で「Java中心にコードスタイル設定について紹介する」と言いましたが、特別にXMLの一部について紹介します。Android Studioの紹介記事なので「Androidタブ」について取り上げます。

図8 ⁠Preferences / Code Style / XML」設定画面の「Androidタブ」
図8

「Androidタブ」では、XMLファイルのうちAndroid開発に用いるXMLファイルに特化した設定を行います。

  • Use custom formatting settings for Android XML files : Android用のXMLファイルにこのコードスタイルを適用するかを指定します。

以下、それぞれ次のXMLファイルについて個別に設定を行います。

  • AndroidManifest.xml
  • Layout Files
  • Value Resource Files and Selectors
  • Other XML resource files

設定できる項目は以下のとおりです。設定画面にプレビューがないのでわかりづらいです。

Wrap attributes
XML属性(attribute)の折り返しを指定します。選択肢は表3と同じです。
Insert line break before first attribute
タグの最初の属性を改行してから記述するかを指定します。
リスト6 ⁠Insert line break before first attribute』がOFF
<uses-sdk android:minSdkVersion="7"
    android:targetSdkVersion="16" />
リスト7 ⁠Insert line break before first attribute』がON
<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="16" />
Insert line break after last attribute
タグの最後の属性を後に改行するかを指定します。ONにすると、ちょっとヘンな感じです。
リスト8 ⁠Insert line break after last attribute』がOFF
<uses-sdk android:minSdkVersion="7"
    android:targetSdkVersion="16"
    />
Group tags with the same name
「同じ名前のタグをグループ化する」と読み取れるのですが、実際にONにしても何の変化も見られません。見ている対象が悪かったのか、それともバグなのでしょうか……。
Insert blank line before tag
タグの直前に空白行を1行挿入します。
Insert line breaks around style declaration
「スタイル<style>定義の前後に空白行を挿入する」と読み取れるのですが、実際にためしてもそうなりませんでした。これもバグですかね……。

まとめ

この題材を取り上げたことを後悔するほど、コードスタイルにはたくさんの設定項目があります。ちょっとかじっただけでは「Eclipseで出来たこれができない」と言いたくなりますが、挫けずに目を皿のように凝らして設定項目をなめ回すと大体はAndroid Studioでもできます。該当するルールを探し当てたときの感激たるや、そもそも何をしたかったのかを忘れるくらいです。

当然、もともとサポートしていない整形ルールはいくら探しても見つかりません。結局のところ、EclipseもAndroid Studioも出自が異なるIDEなので仕方が無いのです。そこは割り切って慣れるしかありません。

おすすめ記事

記事・ニュース一覧