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

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

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

はじめに

たいていのIDEが備えているソースコードの整形機能―――コードフォーマットについて解説します。Android Studioができるコードフォーマットは次の3種類です。

インポートの最適化
インポート文の最適化を行います。Eclipseの「ソース → インポートの編成」に相当します。
コードフォーマット
指定されたルールに基づいてソースコードを整形します。Eclipseの「ソース → フォーマット / 要素のフォーマット」に相当します。
アレンジメント
指定されたルールに基づいて,ソースコード内の要素を並び替えます。Eclipseの「ソース → メンバーのソート」に相当します。

できることはEclipseとさほど変わりありません。Eclipseとの機能的な大きな違いは ファイルの保存のタイミングで自動でフォーマットできないこと です。

コードフォーマットの基本

Android Studioのコードフォーマットのルール(コードスタイル)「Preferences / Code Style」で設定します。この設定は「Project Settings」に属するので,プロジェクトごとに変更することができます。

図1 ⁠Preferences / Code Style」設定画面

図1 「Preferences / Code Style」設定画面

インスペクションと同じようにコードスタイルも「Scheme」として複数の設定を持つことができます。ただし,追加したコードスタイルの内容そのものはIDEの設定として保存されます。デフォルトの状態では「Project」「Default」の2つのSchemeが登録されています。キーバインド(Keymap)やカラー設定(Color & Fonts)ではデフォルトの設定を変更することはできませんが,コードスタイルはデフォルトの値を変更することができます。

もうすこし内情について説明します。コードスタイルの設定はProject Structureに属しているにもかかわらず<AS_HOME>/config/codestylesに保存されます。つまり,いくつもScheme(コードスタイル)を設定してもそれはIDE固有の設定として記録されます。個人で利用する分には問題ないのですが,複数人でプロジェクトを共有する場合,自分以外の人に自分が設定したコードスタイルを渡すことができません。

そこで登場するのがデフォルトで登録済みの「Project」コードスタイルです。このコードスタイルのみ,設定情報が<PROJECT_HOME>\.idea\codeStyleSettings.xmlに保存されます。このファイルをバージョン管理システムに登録して共有することでコードスタイルも共有されます(この話は第35回につながります)⁠

「Project」コードスタイルのみ共有されるのであれば,それ以外のスタイルは何のためにあるのか?という疑問については「Preferences / Code Style」設定画面の「Manged...」ボタンから知ることができます。

この「Code Style Schemes」ダイアログの「Copy to Project」ボタンを押すと,選択中のコードスタイルの内容が「Project」コードスタイルにコピーされます。どうやら,常に「Project」コードスタイルを使うようにし,その内容をプロジェクト毎に変更していくという共有方法をとります。

「Preferences / Code Style」の詳しい設定については次回で紹介する予定です。

インポートの最適化

無駄なインポート文を削除したり,指定されたルールに従ってインポート文を最適化する機能ですが,コーディング時に適時行う方法と,明示的に"Optimize Imports..."コマンドを実行して行う方法の2種類あります。

まずはインポート最適化に関するルール設定について説明します。設定箇所は「Preferences / Code Style / Java」「imports」タブです。

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

図2 「Preferences / Code Style / Java」設定画面の「imports」タブ

設定できる箇所はそれほど多くは無いのですが,英語表記ということもあって少々わかりづらいです。またIntelliJ由来のため無意味な設定項目もあります(⁠JSP imports layout」がそう)⁠

General
インポート最適化の全般的な設定です。
  • Use single class import:ONにするとアスタリスク*を使わず,クラスひとつずつ インポート文を記述します。
  • Use fully qualified class names:ONにするとインポート文を使わず,常にクラスの完全修飾名を展開します。正直,なんのためにあるオプションなのかわかりません。
  • Insert imports for inner classes:ONにすると内部クラスに対してもインポート文を展開します。これをONにすると,一見してそのクラスが内部クラスなのか通常のクラスなのか見分けが付かなくなるので,筆者はこれをONにするのは好みません。
  • Use fully qualified class names in javadoc:ONにすると,Javadoc中のクラスを完全修飾名で記述します。Javadoc中でしか参照しないクラスのために インポート文を追加するのが許せない人はONにしましょう。筆者は,そのあたりはおおらかなのでOFFにしています。
  • Class count to use import with '*':インポート文でアスタリスクを使うまでの閾値を指定します。最初に紹介した「Use single class import」をONにしていても 同じパッケージのクラス を,ここで指定した値以上インポートするとアスタリスクに展開します。
  • Names count to use static import with '*':上の項目のスタティックインポート版です。ここで指定した値以上のメンバやメソッドをスタティックインポートするとアスタリスクに展開します。
JSP imports layout
JSP(JavaServer Pages)でのインポート文の設定です。そもそもAndroid StudioはJSPの編集をサポートしていないので,この項目自体が無意味です。元になったIntelliJ IDEAのUltimate EditionがJSPをサポートしているので,その名残です。
Package to Use Import with '*'
「General」にある「Use single class import」「Class/Names count to use~」に関わりなく,常にアスタリスク指定でインポートしたいパッケージを指定します(スタティックインポートも扱えます)⁠
Import Layout
インポート文の並び順を指定します。パッケージ別に指定できたり,空行の挿入箇所を指示できたりと,見かけによらず高機能です。もちろんスタティックインポートも対象です。

どのような設定が望ましいかは,個人の嗜好であったりプロジェクトのルールに依ります。たとえば,筆者の場合はこうです。

  • インポートにアスタリスクを使うのは好きでは無い
    • 「Use single class import」をON
    • 「Class count to use import with '*'」99999 を指定(いかなる場合もアスタリスク展開させない)
  • 反対にスタティックインポートにアスタリスクを使うのを好む
    • 「Names count to use static import with '*'」3 を指定(3つ以上,同じクラスのメンバをスタティックインポートしたらアスタリスク展開する)

JUnit4やhamcrestの場合は常にアスタリスク展開したかったので,それらを「Package to Use Import with '*'」に指定していましたが,Android StudioはJUnit3ベースなので,今のところ使い道がありません。

著者プロフィール

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

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

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

Twitter: @masanobuimai

コメント

コメントの記入