【コラム】
前回に引き続き、今回も将来的にJava SEに取り込まれる可能性のあるアノテーション関連のJSRを取り上げたいと思う。今回紹介するのは、Javaプログラムのバグ退治をサポートするアノテーションの標準セットとなる「JSR 305: Annotations for Software Defect Detection」だ。
現在、Javaプログラムのバグを探すにはFindBugsやIntelliJなどに代表されるバグ検証ツールを利用するのが一般的である。これらのツールを利用することで、バグの原因となりやすいコードパターンや無意味な処理を行っている箇所などを開発時に容易に発見することができる。
JSR 305では、こういったバグ検証をサポートするアノテーションの標準セットを提供する。たとえばNullチェックを行うアノテーションや、メソッドの戻り値の検証、並行性の誤りチェックなどを行うアノテーションなどの導入が検討されている。
FindBugsやIntelliJでは、現時点ですでにこのようなアノテーションの数々が用意されており、各ツールによるバグの検証に利用することができる。ただしそれらは各々独自に開発されたものであるため、他ツールとの互換性は考慮されていない。JSR-305ではこれらのアノテーションの仕様を標準化することで、各ツール間の互換性を確保する狙いがある。また、現時点では検証コードを挿入することが困難な部分も、新たなアノテーションによって検証が可能になるという効果も期待されている。
JSR 305のスペックリードはFindBugsプロジェクトの創立者であるWilliam Pugh氏が務め、エキスパートグループにはIntelliJをリリースしているJetBrainsなどが参加している。この面子を見てもわかるように、JSR 305の仕様はFindBugsやIntelliJの影響を強く受けており、まずはこれらのツールで提供されているアノテーションと同等のものが用意される予定である。
JSR 305の仕様に間するディスカッションは、Google Groups内にあるJSR 305グループで行われている。それによれば、現在のところ下記のようなアノテーションの採用が検討されている。
実際にどのようなアノテーションがどのような実装で採用されるのかは現在も活発に議論されている最中であり、ここで挙げたものがすべてというわけでもない。上記以外の候補としては、たとえば並列プログラミングをサポートする@GuardedBy、@ThreadSafe、@NotThreadSafe、@Immutableなどがある。これらFindBugsでサポートされているアノテーションの一部だ。あるアノテーションが単体テスト用のものであることを示す、@TestAnnotationアノテーションなどの提案もある。そのほかにも独自のアイデアがある場合には、グループに参加して提案してみるといいだろう。
それでは、実際にJSR 308で用意されるアノテーションを使ってどのようなことができるのかを知るために、同JSRのモデルとなっているFindBugsで提供されるアノテーションを試してみよう。
FindBugsはここからダウンロードできる。配布ファイルのlibディレクトリにあるannotation.jarに、FindBugsで提供されるアノテーションが含まれている。どのようなアノテーションが使えるかはAPIドキュメントを参照のこと。ここでは、JSR 305にも同様の機能のものが採用された@NonNull、@Nullable、@CheckForNullの3つを使ってリスト1のようなプログラムを作ってみた。
package samples;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import edu.umd.cs.findbugs.annotations.CheckForNull;
public class FindBugsAnnotationSample {
@NonNull
public static String nonNullMethod() {
return null;
}
@CheckForNull
public static String checkForNullMethod() {
return null;
}
@Nullable
public static String nullableMethod() {
return null;
}
public static void main(String[] args) {
String str;
str = nonNullMethod().trim();
System.out.println(str);
str = checkForNullMethod().trim();
System.out.println(str);
str = nullableMethod().trim();
System.out.println(str);
}
}
これをコンパイルして、図1のようにJARファイルにまとめる。そしてFindBugsを用いてバグ検証してみると、図2のように2つのバグが報告される。
1つ目はnonNullMethod()メソッドがnullを返そうとしていることの警告で、@NonNullアノテーションが効いていることがわかる。2つ目はcheckForNullMethod()メソッドから返されたオブジェクトに対してtrim()を実行しようとしたことに対する警告で、これは@CheckForNullによってnullチェックを促されていることによる。nullableMethod()メソッドは@Nullableなのでとくに警告は受けていない。バグ検証のためのアノテーションの役割がわかっていただけただろうか。
ちなみに、Google CodeにもJSR 305用のプロジェクトページが用意されており、そこではSubversionリポジトリにおいて参照実装のソースコードが公開されている。
スペックリードのWilliam Pugh氏によれば、今後は夏過ぎごろまでに仕様に関する議論をいったんまとめ、叩き台となる実装の作成を行う予定だという。JSR 305は今のところJava SE 7の候補には入っていないが、エキスパートグループは最終的にこのJSRがJava SEに統合されることを目指している。その場合、前回紹介したJSR 308との互換性なども気になるところだ。
提供:マイナビ
大学・大学院・短大・専門学生向けの就職情報サイト「マイナビ 2009」「毎日就職ナビ 2008」に今すぐ登録しよう! 大手からベンチャー企業までの企業情報を公開、エントリーが可能です。2009年卒予定の方は「マイナビ 2009」に、2008年卒予定の方は「毎日就職ナビ 2008」に登録してください。
毎日コミュニケーションズはプライバシーマークを取得しています。
提供:マイナビ
大学・大学院・短大・専門学生向けの就職情報サイト「マイナビ2010」「マイナビ2009」に今すぐ登録しよう! 大手企業からベンチャー企業までの約13,000社の企業情報を公開、エントリーが可能です。2010年卒予定の方は「マイナビ2010」に、2009年卒予定の方は「マイナビ2009」に登録してください。
毎日コミュニケーションズはプライバシーマークを取得しています。
| JSR 305: バグ退治のためのアノテーションを標準化 [2006/8/30] |
| 絶対使うべき! FindBugsでBug退治 [2006/9/23] |
| JSR 305: Annotations for Software Defect Detection |
| JSR-305: Annotations for Software Defect Detection(Google Groups) |
| jsr-305(Google Code) |
| FindBugs |
| IntelliJ IDEA |
【コラム】漢のzsh 第16回 拡張子ごとにコマンドを自動実行 - 「alias -s」
【コラム】ダイナミックObjective-C 第80回 デザインパターンをObjective-Cで - Proxy (2)
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
【ネタバレもありの徹底解明コラム】『サザエさん』タマの意外な事実 [17:30 5/27] ホビー |
|
鍼灸(しんきゅう)師が教える。オフィスで口臭予防ツボ・ベスト3 [17:00 5/27] キャリア |
|
[梶浦由記]米「アニメ・エキスポ」に2度目の参加決定 [17:00 5/27] ホビー |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第107回 今回のお題は…「chemical」 [17:00 5/27] キャリア |
|
[乃木坂46]キャプテン桜井が“ライバル”AKB総選挙予想 1位まゆゆ、2位はさしこ、3位たかみな [16:58 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。