今日は Android Advent Calendar 2011 参加のエントリです。Advent Calendar って何という方は こちら をどうぞ。
多くの方が Android 開発に eclipse を使用していると思いますが、eclipse の機能を使いこなして快適な開発・効率のよい開発をしているでしょうか。今日は、わたしが普段使っている開発環境で行っている eclipse の設定を紹介したいと思います。まぁどっちでもいい好みの問題といえるような設定から、是非皆さんに使って欲しいお勧め機能までいろいろ紹介します。
今回のエントリでは eclipse の設定画面がたくさん出てきますが、どこにある設定であるかを示すのに [ aaa > bbb > ccc ] という表記をします。一番左が設定画面(Preferences) の左にでている項目を示しています。右はネストした項目だったり右側にでている項目だったりその時々によって異なりますがいちいち説明しません。感じ取ってください。また、設定の項目は英語版での表記です。普段日本語化していないので日本語表記が分かりません。普段日本語化している方はごめんなさい。これも感じ取ってください。
まずは軽めのものから。
[General] の中にある Show heap status チェックボックスです。
このチェックボックスをチェックすると、右下の方に現在のヒープの大きさと使用しているメモリの量が表示されます。また、ゴミ箱アイコンをクリックするとeclipse を実行しているJVM で強制的に GC を走らせることができます。
[General > Editors > Text Editors] にある Show line numbers チェックボックスです。
このチェックボックスをチェックすると、ソースコードの左側に常に行番号が表示されるようになります。コレをチェックしなくても下の方に行番号と列番号が表示されているのでカーソル位置についてはわかるのですがわたしは表示するほうが好きです。ノートパソコンで開発する際など、少しでも画面を有効に使いたい場合は off のほうがいいかもしれません。
[General > Editors > Text Editors] にある Show whitespace characters チェックボックスです。
このチェックボックスをチェックすると、テキスト中の空白、TAB、改行などが可視化されます。具体的には、半角空白が ・ に、 TAB が ≫ などとして表示されます。また、CR/CRLF/LF といった改行の違いも見た目でわかるようになります。半角スペースのつもりがTAB でインデントしてしまったり、行末に余計な空行が入っていてもすぐにわかるのでお薦めです。
[General > Workspace] にある文字コードの選択のラジオボックスです。
当然ソースコードはUTF-8 で記述すると思うので、設定を UTF-8 にします。全てのワークスペースで UTF-8 しか使わないという人(大抵の人はそうだと思います)は、eclipse の実行ファイルの所にある eclipse.ini (MacOS X の場合は、 Eclipse.app を右クリックして「パッケージの内容を表示」してから Contents/MacOS/eclipse.ini) を開いて、 -vmargs と書かれた行の下に
-Dfile.encoding=UTF-8
を加えると、eclipse のデフォルトが UTF-8 になります。
[Java > Appearance > Type Filters] で、コード補完時に候補にしたくないクラスを指定します。
私は以下のクラスを指定しています。
android.R java.awt.*
android.R を指定することで、 R.string などを補完する際は、アプリケーションが生成する R クラスとして補完されるようにしています。うっかり android.R として保管されてムキッって言ってしまう @lychee さんにぜひお勧めな設定です。また、 java.awt.* を指定することで、 List を補完した際に java.awt.List が候補の先頭に出てきてちげーよと思うことがなくなります。
他にも状況に応じて適宜加えると効率アップに貢献します。
[Java > Code Style] で変数のプリフィックスを設定ます。
Android のコードはメンバ変数やstatic変数に接頭辞をつけるルールなので、これを eclipse に教えておきます。こうしておくと、getter/setter の生成時などに、変数の接頭辞を無視してメソッド名を生成してくれます。Fields の prefix list に m, Static Fields の Prefix list に s をそれぞれ記述します。
[Java > Code Style > Code Templates] で、eclipse が自動生成するコードをカスタマイズできます。わたしが行っているのは主に以下の変更です。
ファイルの先頭に挿入されるコメントです。コピーライト表記を以下のような感じでいれています。今年が何年かを ${year} 変数から指定することで2012年も安心です。
/* * Copyright ${year} 自分の名前<じぶんのメールアドレス> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
クラスやインタフェースの前に挿入されるコメントです。個人で作る場合は @author の記述は邪魔なことが多いので消して以下のようにしています。
/** * * ${tags} */
親クラスのメソッドをオーバーライドする際のコメントです。デフォルトでは (non-Javadoc) としてオーバーライドするメソッドが記述されますがeclipse を使っているなら簡単にオーバーライドされるメソッドに飛べるのでコメント自体を削除しています。
クラスを自動生成するさ際に挿入されるコードです。デフォルトでは何も書かれていませんが、わたしは以下のコードを記述しています。
@SuppressWarnings("unused") private static final String TAG = "${type_name}"; private final ${type_name} self = this;
コレにより、各クラスに自動的に TAG と self が定義されるようになります。不要な場合も多いですが、その場合は自動生成後に削除します。必要になって書くよりも不要なときに消すほうが楽なのでこうしています。また、Android のコーディング規約的にはメンバ変数は m で始めるべきですが、 this と同じように使いたいのであえて付けていません。 self が定義してあると、Activity の中の無名インナークラスで Context を渡さないといけない際に HogeActivity.this と書かずに self でスマスことができます。この方法は @vvakame さんのコードで見かけてわたしも真似するようになった記憶があります。
[Java > Code Style > Formatter] で、オートフォーマットをする際の設定を行います。
フォーマッタ設定は各自の好みや AOSP の設定を使うなどすればいいと思いますが、オートフォーマット除外の tag を有効にしておくのをおすすめします。
Formatter の Edit ボタンを押し、 On/Off tags タブを選択します。そこに表示される Enable On/Off tags にチェックをつけます。デフォルトのタグとしては @formatter:on と @formatte'Formatter'r:off が設定されていると思います。
この設定を有効にすることで、ソースコード中にオートフォーマットを行わない行を作ることができます。これでいつでも気兼ねなくオートフォーマットできます。
// @formatter:off 手動で頑張って整形したコード(配列の初期化を適当な数で折り返したい場合とか) // @formatter:on
[Java > Editor > Save Actions] で、ファイルを保存する際に自動で実行する処理を指定します。
↑でオートフォーマット除外をしていれば常にオートフォーマットしても問題ないので Save Actions として実行することをおすすめします。
[Java > Editor > Templates] でコードや Javadoc に挿入するテンプレートを定義できます。私は以下のテンプレート定義を追加しています。
Log.d(TAG,""); を生成するテンプレートです。コード中で logd<Ctrl-Space>(補完発動) すると、Logcat にデバッグログを出力するコードが一瞬で書けます。
Log.e(TAG,""); を生成するテンプレートです。コード中で loge<Ctrl-Space>(補完発動) すると、Logcat にエラーログを出力するコードが一瞬で書けます。
Log.w(TAG,""); を生成するテンプレートです。コード中で logw<Ctrl-Space>(補完発動) すると、Logcat に警告ログを出力するコードが一瞬で書けます。
Log.i(TAG,""); を生成するテンプレートです。コード中で logi<Ctrl-Space>(補完発動) すると、Logcat に情報ログを出力するコードが一瞬で書けます。
Log.dで、実行しているメソッドのトレースログを出力するコードを生成するテンプレートです。コード中で tracelog<Ctrl-Space>(補完発動) します。
Viewに対して OnClickListener をセットするためのコードテンプレートです。DialogInterface#OnClickListener と import が重複しないようになっているので両方を同じソースコード内で使用できます。
setOnClickListener(${imp:import(android.view.View)}new View.OnClickListener() { @Override public void onClick(View v) { ${cursor} } });
Dialogに対して OnClickListener をセットするためのコードテンプレートです。View#OnClickListener と import が重複しないようになっているので両方を同じソースコード内で使用できます。
setOnClickListener(${imp:import(android.content.DialogInterface)}new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ${cursor} } });
[Run/Debug > Launching] 起動対象の設定を行います。
デフォルトの設定では、Launch Configuration を指定しないでテストなどの実行を行う際、現在選択している(開いている)ものを対象にしたものが起動されます。実際の開発では直前に実行したものを起動したほうが便利なことが多いので、この設定を変更します。
この設定は小川 信一さんの「Google API Expertが解説する Google App Engine for Java実践ガイド」に載っていました。 この本は GAE/J の本ですが、Eclipse の tips も豊富に載っているのでとてもお勧めです。
自分の eclipse をみながら普段どんな設定をしているかを書いてみましたが、このエントリの内容でみなさんの Android 開発が少しでも楽になればと思います。
tracelogの見出しがlogiになってますよ