一足早く、Java7でアプリを作ってみました!

まだ公式リリース前*1ですが、一足早く Java7 でアプリを作ってみました!

PopupTail
Java7 で実装した、タスクトレイ常駐型の Tail です(tail -f と同じ機能です)。
ファイルに変更があると、ポップアップでお知らせします。

ログの監視などに、ぜひご利用ください!
(JDK7 Developer Preview 版で動作確認をしています)


詳細はこちら(PopupTail)からどうぞ!


ソースコードpopup-tail - Google Project Hosting

以下、感想を少し。

Project Coin は便利

Java7の新文法、try-with-resources が思っていた以上に便利です。

    try(RandomAccessFile random = new RandomAccessFile(file, "r")){
        (中略)
    }

最初に書いてみたときはちょっと不思議な感じがしましたが*2、すぐに慣れてしまいました。
今回のプログラムで書いた try 文のほとんどが、この try-with-resources でした。たぶん、ほかのプログラムを書いてもそうなるんじゃないかと思います。
簡潔でミスも減るので、これはぜひ積極的に使っていきたいです。

Path と File の使い分けがまどろっこしい

NIO2(java.nio.file) が追加されて、新しくファイル監視が行えるようになったり*3、今まで妙な設計になっていた*4ファイル操作がきちんと直ったり*5しました。

ただ、これらの新機能が使うのは新しく追加された Path インタフェースです。
これは File クラスとは全くの別物です。
なので、今までの File クラスを使った設計になっているクラスと併用しようとすると、いちいちコンバートしなくてはいけません。

    Path path = file.toPath();

Path → File への変換も、File → Path への変換も、メソッド一つでできます。
でも、同じ概念のものが二つのクラスに分かれたというのはなんだかすっきりしません。


たとえば、今回の場合、Tailクラスの引数に File と Path のどっちを取るようにするのかで悩みました。
たまたま、 RandomAccessFile と WatchService を一つのクラス内で一緒に使ったからというのもあるかもしれません。ただ、既存のライブラリはしばらく File クラスのままだと思うので、頻繁に直面する問題かもしれません。(互換性の問題があるので、おそらく File クラスで済むなら File クラスを使うんじゃないかと思います)

設計上、しょうがなかったとは思うのですが…。

早く普及してほしい!

Twitter でほかの方のつぶやきを見ていると、いまだに Java 1.4 を使っているところもあると聞きます。
でも、今回やってみて思ったのは、

  • 今までできなかったことが、簡単にできるようになる。新しいことができるようになる。
  • めんどくさかったところが、とても簡潔になる。開発効率が上がる。

という大きなメリットが Java7 にあるということです。


なので、今回みたいな趣味だけじゃなく仕事でもつかえるように、早く普及してほしいです(^ー^)

*1:JDKの公式リリース日は、2011年7月28日予定です。

*2:今までの文法だと、try を書いたときは必ず catch か finally のいずれか、または両方が必須でした。それが、今回のように try だけだと「あれ?」って最初思いました。

*3:これを今回のプログラムで使用しています。http://download.java.net/jdk7/docs/api/java/nio/file/WatchService.html

*4:ファイル操作に失敗しても、例外は出さない(戻り値で通知)という設計になっていました。FileクラスでNullPointerException - 地平線に行く

*5:ファイル削除時にファイルがなければ、例外(NoSuchFileException)が発生するという設計になりました。http://download.java.net/jdk7/docs/api/java/nio/file/Files.html#delete%28java.nio.file.Path%29