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

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

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

アレンジメント

Eclipseの「設定 → 外観 → メンバー・ソート順序」に相当します(ダジャレではありません⁠⁠。実行はメニューバーの「Code → Rearrange Code」で行います。前述した"Optimize Imports..."や"Reformat Code..."と異なりコマンド名の末尾に "..." が付かないため,コマンド指定後即座に実行されます(実行前にダイアログとか出てきません⁠⁠。

それと律儀にアレンジメントだけ行います(コードフォーマットは実施しない⁠⁠。そのため,このコマンド単独で利用するより"Reformat Code..."のオプションとして指定する用途のほうが多いのでは?と思います。⁠だったら,はじめから"Reformat Code..."にまとめておけば……」と言いたくなりますが,この機能の生い立ちに起因するためか,こんなコマンド体系になっています。

生い立ちといっても大げさなものではありません。元々この機能,IntelliJのプラグインとして提供されていたのですが,その人気と完成度の高さからIntelliJ本体に取り込まれました(筆者の記憶が正しければ,IDEA12からです⁠⁠。プラグインとしての歴史はそこそこ長いですが,IntelliJ/Android Studioの機能としては若いです。そうもあってか,たまにエラーを吐きます。

アレンジメントの設定

「Preferences / Code Style / Java」「Arrangement」にあります。"Reformat Code..."で「Rearrenge entries」を有効にすればコードフォーマット時にも適用されるので,設定項目がここにあってもそんなにおかしくは無いです。

元がJetBrains製ではないプラグインという背景もあってか,設定画面のユーザインターフェイスはかなり独特です。

図19 ⁠Preferences / Code Style / Java」設定画面の「Arrangement」タブ

図19 「Preferences / Code Style / Java」設定画面の「Arrangement」タブ

Andorid Studio 0.4.4でみるとUIが微妙にわかりづらくなっていますが,上半分の(1)~(3)の設定が「Grouping rules(グルーピングのルール⁠⁠」で,下半分が「Matching rules(組合せのルール⁠⁠」になります。

「Grouping rules」は関係のあるメソッドをグループ化するためのルールを指定します。丸数字の1~3が優先度で,その隣のチェックボックスがそのルールを適用するかどうかのスイッチになっています。優先度は右上の「≫」で隠れている上下アイコンで変更することができます。

Keep getters and setters together
同じプロパティに対するgettersetterをまとめるかどうかを指定ます。
Keep overridden methods together
オーバライド(または実装)したメソッドの並び順を指定します。
  • keep order:親クラス(またはインターフェイス)の定義順に並び替える
  • order by name:アルファベット順に並び替える
Keep dependent method together
依存関係のあるメソッドの並び順を指定します。⁠依存関係のあるメソッド」とはリスト2のようなメソッド群を指します。
  • depth-first order:深さ優先で並び替えします。
  • breadth-first order:幅優先で並び替えします。先ほど例示したリストが幅優先の例です。

リスト2 依存関係のあるメソッド群の例

void aaa() {
  bbb();
  ccc();
}
void bbb() { AAA(); }
void AAA() {}
void ccc() {}

「Matching rules」はメンバやメソッドの並び順を指定します。こちらも右上端の「≫」アイコンでルールの優先度を変更したり,ルールそのものを追加したり削除することができます。見かけによらず設定できるルールは多彩です。むしろこのルールが提供されるようになったため「Code Generation」「Order of Members」が無用の長物になっています。

図20 ⁠Matching rules」のルール設定の例(クリックすると動きがわかります)

「⁠Matching rules」のルール設定の例` &title=`図20 ⁠Matching rules」のルール設定の例` &width=`400` />

筆者は,ここまでコードの並び順に執着がないため "Rearrenge Code"自体をめったに使ったことがありません。この記事の執筆のためいろいろ調べましたが,こんなに"Rearrenge Code"を使ったのは今回がはじめてと言っても過言では無いです。

XMLのArrangement設定

Android Studioが標準で提供しているコードスタイルの種別は Groovy, HTML, Java, XMLの4種類です。Arrangementの設定があるのはJavaだけではなくXMLでもできることに気付いていたでしょうか。

さらにXMLのコードスタイル設定には,XMLにしか無い隠し機能……というか隠しては居ないのですが,まさかそんなものがあったとは!?な機能があります。⁠Preferences / Code Style / XML」設定画面で(どのタブを表示していてもいいのですが)スキーマ名を表示しているヘッダ部の右端に「Set from...」というリンクがあります。

実はこれ,XMLに限らず,General以外のどの言語のコードスタイルの設定画面にも出てきています。主たる用途は,他の言語の設定値を取り込む機能で,通常は図21のように,どの言語の設定を取り込むのか指定するポップアップがでてきます。

図21 ⁠Set from...」から他の言語設定を取り込む

図21 「Set from...」から他の言語設定を取り込む

XMLだけ特別で「Set from...」をクリックすると「他の言語設定を取り込む(Language⁠⁠」か「プリセットを取り込む(Predefined Style⁠⁠」の二択がまずあり,⁠Predefined Style」を選ぶと,そこから「Android」を選択することができます。

図22 XMLの「Set from...」だけ特別メニュー(Predefined Style)がある

図22 XMLの「Set from...」だけ特別メニュー(Predefined Style)がある

説明がまわりくどかったですが,XMLに限りAndroid向けの設定がプリセットされているというわけです(筆者もはじめて気付きました⁠⁠。ちなみに,プリセットの内容はほぼ Arrangement の設定です。⁠Arrangementタブ」にAndroid用XMLのための設定が登録されます。

「Arrangementタブ」の下部にある,JavaのArrangement設定ではなかった「Additional settings」ですが,これは"Reformat Code..."実行時に"Arrangement Code"を同時に行うかどうかを指定します(Force rearrange⁠⁠。おそらく「Android用のXMLにしかアレンジメントを適用したくない」ために用意しているオプションなのでしょう。

図23 XMLの「Arrangementタブ」の下にある設定項目

図23 XMLの「Arrangementタブ」の下にある設定項目

Use current mode (toggled in the Reformat Code dialog)
「Reformat Code」ダイアログの「Rearrange entries」の指定に従います。
Always
"Reformat Code..."を実行すると常に"Rearrange Code"も実行します。
Never
"Reformat Code..."では決して"Rearrange Code"を実行しません。アレンジメントを行いたい場合は,別途"Rearrange Code"を実行します。

まとめ

Android Studioのソースコード整形機能についてできること(インポートの最適化,コードフォーマット,アレンジメント)とその使い方を中心に紹介しました。

次回は,整形機能のうちでもコードフォーマットに注目して,そこで設定できるフォーマットのルールを紹介します。

著者プロフィール

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

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

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

Twitter: @masanobuimai